触发器在Postgresql中插入已删除的行
假设我有两个表,触发器在Postgresql中插入已删除的行,postgresql,Postgresql,假设我有两个表,a和b,它们都有两行int和date。我想编写一个触发器,当从表a中删除行时,将它们复制到表b,并将日期更改为当前日期。因此,如果我今天从表a中删除一行132015-01-01,132015-06-08将插入表b。 有什么办法可以做到这一点吗 create or replace function a_adr_tf() returns trigger as $$ begin insert into b(aid, awhen) values (old.id, now());
a
和b
,它们都有两行int
和date
。我想编写一个触发器,当从表a
中删除行时,将它们复制到表b
,并将日期更改为当前日期。因此,如果我今天从表a
中删除一行132015-01-01
,132015-06-08
将插入表b
。
有什么办法可以做到这一点吗
create or replace function a_adr_tf() returns trigger as $$
begin
insert into b(aid, awhen) values (old.id, now());
return old;
end;
$$ language plpgsql;
create trigger a_adr after delete from a for each row execute procedure a_adr_tf();
请注意,此触发器不考虑表b
中可能存在的重复主键。我假设A
中的列在id
时被称为和,在B
中被称为aid
和awhen
您可以通过在序列类型的B
中有一个PK来解决B
主键的问题,或者,如果您只想在B
中有一行a
中具有相同id
的a
的B
中,在a
中插入新行时,使用从B
中删除的触发器来解决主键的问题
请注意,此触发器不考虑表b
中可能存在的重复主键。我假设A
中的列在id
时被称为和,在B
中被称为aid
和awhen
您可以通过在序列类型的B
中有一个主键来解决B
的主键问题,或者,如果您只想在B
中有一行a
中具有相同id
的a
的B
中,在a
中插入新行时,使用从B
中删除的触发器,您尝试了什么?你所描述的听起来并不难,所以我不清楚到底是什么给你带来了麻烦。我对函数有问题。我不知道删除的行是否存储在某个地方,我可以从中复制它们。我曾想过制作一个临时表,在其中更改日期,但仅此而已。发布函数的代码。有关审核触发器的一般解决方案,请参阅Postgres Wiki:您尝试了什么?你所描述的听起来并不难,所以我不清楚到底是什么给你带来了麻烦。我对函数有问题。我不知道删除的行是否存储在某个地方,我可以从中复制它们。我曾想过制作一个临时表,在其中更改日期,但仅此而已。发布函数的代码。有关审核触发器的一般解决方案,请参阅Postgres Wiki:非常感谢,我唯一不知道的是old.id
部分。非常感谢,我唯一不知道的是old.id
部分。