【发布时间】:2021-02-21 08:48:41
【问题描述】:
我在 Postgres DB 中有两个表 A 和 B。
每当我在表 A 中插入一个或多个新行时,我想将这些更新添加到表 B。如果表 B 为空,则表 A 中插入的所有新闻行也将添加到表 B。但是,当新行插入到表A中,如果表B中已经有数据,我想在将表A的新行插入表B之前删除表B中的所有数据。
所以基本上每次在A表中插入新行时,相应的行也应该添加到表B中,但每次插入表B之前都要执行删除操作,这样表B中就没有旧行了。表B旨在仅保存表 A 中新添加的行。
以下是我使用触发器的 Postgres 脚本。
CREATE TRIGGER test_one AFTER INSERT ON A
FOR EACH ROW EXECUTE PROCEDURE addRows();
CREATE OR REPLACE FUNCTION addRows() RETURNS TRIGGER AS $remove_table$
BEGIN
DELETE from B;
INSERT INTO B(std_id, name) VALUES (new.col1, new.col2);
RETURN NEW;
END;
$remove_table$ LANGUAGE plpgsql;
这个触发器函数完成了这项工作,但表 A 中的所有新添加的行都没有被保留。我最终在表 B 中只有一行是表 A 中新插入数据的最后一行。再次强调,如果我在表 A 中插入 10 行新行,则表 B 预计将添加 10 行。但是,表 B 中只添加了第 10 行,这不是我们想要的结果。
谁能帮我弄明白怎么回事?
【问题讨论】:
标签: postgresql triggers