我是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。
答案 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的事务同时发生。但是可以同时发生两次交易。特别是如果你有几个用户。连接