代码之家  ›  专栏  ›  技术社区  ›  villasv

如何确保PostgreSQL触发器不会导致回滚?

  •  0
  • villasv  · 技术社区  · 8 年前

    我们希望监视一个表中的可疑质量数据,并创建一个触发器以在质量检查失败时发出消息。

    当然,我们希望绝对不可能这个触发器会以某种方式导致事务失败(并回滚),从而阻碍正在检查的任何数据更改。

    以下是我们当前的实现:

    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();
    

    什么样的规则可以被认可来定义一个完全安全的触发器?

    0 回复  |  直到 8 年前