在postgresql

时间:2015-06-19 12:56:40

标签: postgresql triggers

我是PostgreSQL的新手,我试图在更新时创建触发器。我有两个表源和目标具有相同的表结构。因此,我希望在源上有更新时,在目标上更新记录。我尝试了以下触发功能:

  Create FUNCTION ins_functiontest() RETURNS trigger AS '
BEGIN
 IF tg_op = ''UPDATE'' THEN
     INSERT INTO  destination(id,name,tg_op)
     VALUES (new.id,new.name, tg_op);
      RETURN new;
  END IF;
END
' LANGUAGE plpgsql;

专栏' id'是两个表的主键,因此上面的函数失败,因为源上有更新,因为该记录已存在于目标上。

我尝试修改函数来更新表中的其余列,比较源和目标上的id字段。

 Update des
      Set name = new.name,tg_op= update
      From destination des join source src
      ON des.id = src.id
      Where des.id = src.id

但无法使语法正确。非常感激任何的帮助。

我正在使用PostgreSQL 8.4。

2 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法,下面就是答案。   创建功能ins_functiontest()返回触发器AS'  开始   如果tg_op =''更新''然后    更新destination_table_name        组        name = new.name,        其中id = new.id;

结束IF;  结束 ' LANGUAGE plpgsql;

答案 1 :(得分:-1)

我为我的日志表做了类似的事情。但我复制了colums。 1为新。*设置为捕获插入和更新,为旧设置。*也用于更新和删除。然后插入一个连续主键,时间和idtransaction,txid_current()。唯一的防弹是串口。 idtransaction依赖于服务器工作。如果您更改了PC,并且它可能在数据库的生命周期内发生,它将再次启动计数器。但是不可能发生两个具有相同id的事务同时发生。但是可以同时发生两次交易。特别是如果你有几个用户。连接