PostgreSQL触发器将更改从一个表复制到另一个表

时间:2012-08-16 11:33:52

标签: postgresql stored-procedures

我有一个名为info的数据库。在数据库中,我有4个不同的表info1info2info3info4

我想创建一个存储过程,以便每当我在表info1(例如INSERTDELETEUPDATE)中进行更改时,相同的更改都应出现在其他三张桌子。

我正在使用PostgreSQL,我不知道如何执行此查询。

请举例说明。

提前致谢!

2 个答案:

答案 0 :(得分:2)

基本上,您需要阅读手册以了解您在做什么。 @Michael提供了链接。

有很多不同的方法可以解决这个问题。以下是UPDATEDELETE的两个典型示例:

为UPDATE创建触发器功能:

CREATE OR REPLACE FUNCTION trg_info1_upaft()
  RETURNS trigger AS
$BODY$
BEGIN
    UPDATE info2
    SET col1 = NEW.col1
    --more?
    WHERE info2.info1_id = NEW.info1_id;

    UPDATE info3
    SET col1 = NEW.col1
    --more?
    WHERE info3.info1_id = NEW.info1_id;

    -- more?
    RETURN NULL; -- because trigger is meant for AFTER UPDATE
END;
$BODY$
  LANGUAGE plpgsql;

创建使用它的触发器:

CREATE TRIGGER upaft
  AFTER UPDATE
  ON info1
  FOR EACH ROW
  EXECUTE PROCEDURE trg_info1_upaft();

对于DELETE:

CREATE OR REPLACE FUNCTION trg_info1_delaft()
  RETURNS trigger AS
$BODY$
BEGIN
    DELETE FROM info2
    WHERE info1_id = OLD.info1_id;

    -- more?
    RETURN NULL; -- because trigger is meant for AFTER DELETE
END;
$BODY$
  LANGUAGE plpgsql;

CREATE TRIGGER delaft
  AFTER DELETE
  ON info1
  FOR EACH ROW
  EXECUTE PROCEDURE trg_info1_delaft();

答案 1 :(得分:1)

对于此类更改,您应使用触发器:http://www.postgresql.org/docs/current/interactive/triggers.html

您必须创建将新数据插入/更新/删除到其他表中的函数,然后使用CREATE TRIGGER http://www.postgresql.org/docs/current/interactive/sql-createtrigger.html显示PostgreSQL,以便每次更改源表中的数据时调用该函数。