我有一张桌子“demand_details” 在更新或删除时,我想将每行的值存储在另一个表“demand_details_log”
中我的功能如下
CREATE OR REPLACE FUNCTION water_blogb() RETURNS trigger AS
$BODY$
BEGIN
IF (TG_OP='UPDATE') THEN
INSERT INTO demand_details_log VALUES ('U',now(),OLD.*);
RETURN NEW;
END IF;
IF (TG_OP='DELETE') THEN
INSERT INTO demand_details_log VALUES ('D',now(),OLD.*);
RETURN OLD;
END IF;
END;
$BODY$ LANGUAGE plpgsql
我的触发器如下
CREATE TRIGGER water_btrg_b
AFTER UPDATE OR DELETE
ON demand_details
FOR EACH ROW
EXECUTE PROCEDURE water_blogb();
我的问题是相同的触发器,功能在其他表上运行良好(通过更改表,触发器和函数名称)但不能使用需求表。我尝试了“RAISE NOTICE'工作......'”在其他表中触发器被触发但在需求表中它根本没有被触发。
答案 0 :(得分:0)
如您所见,触发器不会被继承。这导致在继承的表结构中管理触发器时遇到一些困难。您可能希望了解http://ledgersmbdev.blogspot.com/2012/08/postgresql-or-modelling-part-3-table.html和http://ledgersmbdev.blogspot.com/2012/08/or-modelling-32-setsubset-modelling.html所涉及的一些问题。
现在那些没有直接解决表分区问题,这可能就是你在这里尝试做的事情。我建议你构建一些额外的测试,你可以运行它们来检查并确保在所有子表上正确安装了触发器。我建议您查看How to find inherited tables programatically in PostgreSQL?以及pg_trigger表,以便您可以构建一个不共享父项触发器的子表的报告。