有没有办法让父表上的触发器也监听 Postgres 中的所有子表?
Posted
技术标签:
【中文标题】有没有办法让父表上的触发器也监听 Postgres 中的所有子表?【英文标题】:Is there a way that a trigger on parent table will also listen to all child tables in Postgres? 【发布时间】:2016-07-06 20:04:53 【问题描述】:每个客户都有一个父表和 800 多个子表。我想为每个人创建相同的触发器。有没有办法直接为父表创建,每个子表都会监听?
我可以编写一个脚本来为每个客户表创建相同的,但我专门寻找任何直接的解决方案。
【问题讨论】:
【参考方案1】:如果您使用 inherit,那么您为主表创建触发器,并且更改发生在子表上。
这是一个插入触发器的例子,你可以看到我只在主表avl
上插入更新或删除。
CREATE OR REPLACE FUNCTION avl_db.avl_insert_trigger()
RETURNS trigger AS
$BODY$
BEGIN
IF ( NEW.event_time >= '2017-06-01 00:00:00' AND NEW.event_time < '2017-06-02 00:00:00' ) THEN
INSERT INTO avl_db.avl_20170601 VALUES (NEW.*);
ELSEIF ( NEW.event_time >= '2017-06-02 00:00:00' AND NEW.event_time < '2017-06-03 00:00:00' ) THEN
INSERT INTO avl_db.avl_20170602 VALUES (NEW.*);
ELSEIF ( NEW.event_time >= '2017-06-03 00:00:00' AND NEW.event_time < '2017-06-04 00:00:00' ) THEN
INSERT INTO avl_db.avl_20170603 VALUES (NEW.*);
ELSEIF ( NEW.event_time >= '2017-06-04 00:00:00' AND NEW.event_time < '2017-06-05 00:00:00' ) THEN
INSERT INTO avl_db.avl_20170604 VALUES (NEW.*);
ELSEIF ( NEW.event_time >= '2017-06-05 00:00:00' AND NEW.event_time < '2017-06-06 00:00:00' ) THEN
INSERT INTO avl_db.avl_20170605 VALUES (NEW.*);
....
ELSE
RAISE EXCEPTION 'Date out of range.';
END IF;
RETURN NULL; -- avoid insert in the main table
关于我刚刚制作的question 的更多详细信息
【讨论】:
以上是关于有没有办法让父表上的触发器也监听 Postgres 中的所有子表?的主要内容,如果未能解决你的问题,请参考以下文章