PostgreSQL触发器将新行复制到其他表中

时间:2018-05-15 12:09:53

标签: postgresql stored-procedures

我有一个问题我现在已经坚持了一段时间。所以我想寻求一些帮助。

我有两个持有相同数据的表:交易和交易2.

我想编写一个触发器,每次在事务中添加新行并将其插入到PLSQL的transaction2中时触发。

首先,我只是用

复制表格

CREATE TABLE transactions2 (SELECT * FROM transactions WHERE 1=1);

我想我发现了如何插入

CREATE OR REPLACE FUNCTION copyRow RETURNS TRIGGER AS $$ DECLARE BEGIN INSERT INTO transaction2 VALUES transaction; END;

我认为这个语法也是错误的,但是我怎么说,一旦新的Insert插入到第一个表中,Trigger就应该开始了?

任何人都可以帮我吗?

由于 波比

1 个答案:

答案 0 :(得分:0)

INSERT的正确语法是INSERT (<column list>) VALUES (<values list>)。函数与“outside”相比,INSERT语法没有区别。因此,您的触发器功能应如下所示:

CREATE OR REPLACE FUNCTION t2t2_f ()
RETURNS TRIGGER
AS
$$
BEGIN
  INSERT INTO transactions2
              (column_1,
               ...,
               column_n)
              VALUES (NEW.column_1,
                      ...,
                      NEW.column_n);

  RETURN NEW;
END;
$$
LANGUAGE plpgsql;

column_i替换为表格的实际列名称。 NEW是一个伪记录,您可以使用该记录访问新行的值。

要创建触发器本身,请使用以下内容:

CREATE TRIGGER t2t2_t
       AFTER INSERT
       ON transactions
       FOR EACH ROW
       EXECUTE PROCEDURE t2t2_f();

您可能想要使用其他时间,例如BEFORE代替AFTER

这应该给你一些东西。请考虑研究全面的PostgreSQL Manual以获取更多更详细的信息。