插入触发器以使用PostgreSQL更新另一个表

use*_*873 15 postgresql triggers

我有一张名为奖项的表.如何在PostgreSQL中安装Trigger,其中表中的每个插入奖励更新不同的表?

Sac*_*pta 36

这里我们有两个名为table1和的表table2.使用触发器我会table2在插入时更新table1.

创建表

CREATE TABLE table1
(
  id integer NOT NULL,
  name character varying,
  CONSTRAINT table1_pkey PRIMARY KEY (id)
)

CREATE TABLE table2
(
  id integer NOT NULL,
  name character varying
)
Run Code Online (Sandbox Code Playgroud)

触发功能

CREATE OR REPLACE FUNCTION function_copy() RETURNS TRIGGER AS
$BODY$
BEGIN
    INSERT INTO
        table2(id,name)
        VALUES(new.id,new.name);

           RETURN new;
END;
$BODY$
language plpgsql;
Run Code Online (Sandbox Code Playgroud)

触发

CREATE TRIGGER trig_copy
     AFTER INSERT ON table1
     FOR EACH ROW
     EXECUTE PROCEDURE function_copy();
Run Code Online (Sandbox Code Playgroud)

  • 在触发器函数中,它如何知道从表一插入值?难道我们不需要在“values(new.id, new.name)”后面写“from table1”吗? (3认同)
  • new.id 和 new.name 是 table1 中的值 (2认同)

Cra*_*ger 5

您需要PL/PgSQL triggers文档,其中仅讨论了这种情况。有关触发器的一般文档也可能有用。

为此,您可以使用 aBEFOREAFTER触发器。不过,我可能会使用AFTER触发器,以便我的触发器看到正在插入的行的最终版本。你想要FOR EACH ROW,当然。