postgresql触发器不工作

postgresql触发器不工作,postgresql,triggers,Postgresql,Triggers,我有一张表格“需求详情” 在更新或删除时,我想将每行的值存储在另一个表“demand\u details\u 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.*); RETU

我有一张表格“需求详情” 在更新或删除时,我想将每行的值存储在另一个表“demand\u details\u 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();
我的触发器如下

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();

我的问题是,相同的触发器和函数在其他表上运行良好(通过更改表、触发器和函数名),但不在需求表上运行。我尝试在两个表中使用“raisenotice'working…”,在其他表中触发触发器,但在请求表中根本没有触发触发器。

正如您所发现的,触发器不会被继承。这导致在继承表结构中管理触发器时遇到一些困难。您可能想了解和中涉及的一些问题


现在,这些并没有直接处理表分区,这可能就是您在这里要做的。我建议您构建一些额外的测试,您可以运行这些测试来检查并确保触发器正确安装在所有子表上。我建议您同时查看pg_触发器表,这样您就可以创建一个不共享其父母触发器的子表的报告。

您所说的“不工作”到底是什么意思?当我从demand_表中更新或删除记录时,触发器根本不会被触发我正在使用Postgresql 9.1.3I在父表上放置触发器。触发器必须与子表/继承表一起使用。现在更新父行或子行的任何行及其工作状态。