触发器在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
部分。