繁体   English   中英

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

[英]PostgreSQL trigger to replicate changes from one table to another

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

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

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

请举例说明。

提前致谢!

基本上,您需要阅读手册以了解自己在做什么。 @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();

对于删除:

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();

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM