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

Bob*_*byP 4 postgresql stored-procedures

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

我有两个保存相同数据的表:transactions 和 transactions2。

我想编写一个触发器,每次将新行添加到事务中时都会触发并将其插入到 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;

我认为这个语法也是错误的,但是我怎么说呢,触发器应该在第一个表中进行新插入后立即启动?

谁能帮我这个?

谢谢鲍比

sti*_*bit 9

an 的正确语法INSERTINSERT (<column list>) VALUES (<values list>). 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;
Run Code Online (Sandbox Code Playgroud)

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

要创建触发器本身,请使用以下命令:

CREATE TRIGGER t2t2_t
       AFTER INSERT
       ON transactions
       FOR EACH ROW
       EXECUTE PROCEDURE t2t2_f();
Run Code Online (Sandbox Code Playgroud)

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

这应该会给你一些开始的东西。请考虑学习全面的PostgreSQL 手册以获取更多、更详细的信息。