0

我在更新或删除时有一个表“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 'working...'”,但在需求表中它根本没有被触发。

4

1 回答 1

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

现在那些不直接解决表分区,这可能是您在这里尝试做的。我建议您构建一些额外的测试,您可以运行这些测试来检查并确保触发器已正确安装在所有子表上。我建议看一下如何在 PostgreSQL 中以编程方式查找继承的表?以及 pg_trigger 表,以便您可以构建不共享其父触发器的子表的报告。

于 2013-02-19T02:02:54.977 回答