我们希望监视一个表中的可疑质量数据,并创建一个触发器以在质量检查失败时发出消息。
当然,我们希望绝对不可能这个触发器会以某种方式导致事务失败(并回滚),从而阻碍正在检查的任何数据更改。
以下是我们当前的实现:
create or replace function check_stuff()
returns trigger as
$$
declare
original record;
...
begin
original := new;
...
if NEW.name ... then
raise warning 'weird name detected';
end if
if NEW.address ... then
raise warning 'weird address detected';
end if
...
return original;
exception
when whatever then
raise notice '% % % : % %', TG_NAME, TG_WHEN, TG_OP, SQLERRM, SQLSTATE;
return original;
end;
$$
language plpgsql
create trigger check_stuff_trigger
after insert or update on important_table
for each row execute procedure check_stuff();
什么样的规则可以被认可来定义一个完全安全的触发器?