我试着把触发器放在一起,它可以做多种事情:
在任何插入更新之前,
中。
在更新之前,
中。
删除前的
如何使用调整后的新(或旧)值有效地编写前(或后)更新触发器?这里是我的触发器:
create trigger my_trigger
before insert or update or delete on my_table
for each row execute procedure my_function();并在我想要使用更新的新行的地方使用:
create function my_function() returns trigger as $$
begin
if (tg_op = 'INSERT') then
return 'something done here';
elsif (tg_op = 'UPDATE') then
update NEW set edited_date = now(), edited_by = current_user;
insert into my_table_hist select NEW.*;
elsif (tg_op = 'DELETE') then
return 'something done here';
end if;
return null;
end;
$$ language plpgsql;我的意思是,在update之前,我将新的行列更新为当前时间和当前用户,然后用更新的值将表更新到这个新行,最后,带有更新值的此行也被插入存档(历史记录)表中。但是它显然不是那样工作的,所以我应该如何重写这个触发器函数来使它工作呢?
发布于 2020-09-29 05:28:27
这里有很多问题:
NEW或NULL才能中止操作
NEW,因为它不是一个表,但是您分配给它的列,如current_timestamp; NEW.created :=
BEFORE DELETE触发器NEW为空,因为没有新版本的行。
https://stackoverflow.com/questions/64113143
复制相似问题