postgresql触发器无法正常工作

时间:2013-02-15 13:36:11

标签: postgresql triggers

我有一张桌子“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'工作......'”在其他表中触发器被触发但在需求表中它根本没有被触发。

1 个答案:

答案 0 :(得分:0)

如您所见,触发器不会被继承。这导致在继承的表结构中管理触发器时遇到一些困难。您可能希望了解http://ledgersmbdev.blogspot.com/2012/08/postgresql-or-modelling-part-3-table.htmlhttp://ledgersmbdev.blogspot.com/2012/08/or-modelling-32-setsubset-modelling.html所涉及的一些问题。

现在那些没有直接解决表分区问题,这可能就是你在这里尝试做的事情。我建议你构建一些额外的测试,你可以运行它们来检查并确保在所有子表上正确安装了触发器。我建议您查看How to find inherited tables programatically in PostgreSQL?以及pg_trigger表,以便您可以构建一个不共享父项触发器的子表的报告。