![](/img/trans.png)
[英]Function and trigger of postgresql to update in a table the changes that take place in another one
[英]PostgreSQL trigger to replicate changes from one table to another
我有一个名为info的数据库。 在数据库中我有4个不同的表info1
, info2
, info3
和info4
。
我想创建一个存储过程,以便每当对表info1
进行更改(例如INSERT
, DELETE
或UPDATE
)时,其他三个表中都将出现相同的更改。
我为此使用PostgreSQL,但我不知道如何执行此查询。
请举例说明。
提前致谢!
基本上,您需要阅读手册以了解自己在做什么。 @Michael提供了链接。
有多种方法可以解决此问题。 这是UPDATE
和DELETE
两个典型示例:
创建用于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.