触发在Postgresql中插入已删除的行

时间:2015-06-08 18:45:40

标签: postgresql

假设我有两个表scores = (from r in ds.Tables[0].AsEnumerable() select new ExternalScoreModel { Score = Convert.ToInt32(r[0]), FirstName = r[1].ToString(), LastName = r[2].ToString(), }).OrderByDescending(x => x.Score).ToList(); a,它们都有两行bint。我想编写一个触发器,在删除表date中的行时,将它们复制到表a,并将日期更改为当前日期。因此,如果我今天从表b删除了13, 2015-01-01行,a会插入到表13, 2015-06-08中。 关于如何完成这项工作的任何想法?

1 个答案:

答案 0 :(得分:4)

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中的列称为idwhen,而B中的列称为aidawhen

您可以通过在序列类型的B中使用PK来解决B的主键问题,或者,如果您只想在B中使用相同的行,则可以解决id的主键问题来自A的{​​{1}},当B插入新行时触发器从A删除。