PostgreSQL继承:父表触发器是否继承?

PostgreSQL继承:父表触发器是否继承?,postgresql,inheritance,triggers,timestamp,postgresql-9.2,Postgresql,Inheritance,Triggers,Timestamp,Postgresql 9.2,如果CANINES表上有一个prefore update触发器,它将timestamp列设置为now(),并且DOGS从CANINES继承,那么当DOGS行被更新时,CANINES update触发器应该触发吗?在我的测试中,答案是否定的,所以我怀疑答案是否定的,但也许我做得不对: create table canines ( lastupdate timestamp with time zone default now() ); CREATE OR REPLACE FUNCTION stam

如果CANINES表上有一个prefore update触发器,它将timestamp列设置为now(),并且DOGS从CANINES继承,那么当DOGS行被更新时,CANINES update触发器应该触发吗?在我的测试中,答案是否定的,所以我怀疑答案是否定的,但也许我做得不对:

create table canines
(
lastupdate timestamp with time zone default now()
);

CREATE OR REPLACE FUNCTION stamp_lastupdate_column()
    RETURNS TRIGGER AS $$
    BEGIN
       NEW.lastupdate = now(); 
       RETURN NEW;
    END;
    $$ language 'plpgsql';


CREATE TRIGGER TRG_CANINES_BU BEFORE UPDATE
        on CANINES FOR EACH ROW EXECUTE PROCEDURE 
        stamp_lastupdate_column();


create table dogs
(id int primary key,
breed varchar(25)
) inherits (CANINES);

insert into dogs(id, breed) values(1, 'sheltie');  

select * from dogs;
--"2013-02-09 06:49:31.669-05" , 1 , sheltie

update dogs set breed = 'Sheltie/Shetland Sheepdog' where id = 1;

select * from dogs;
--"2013-02-09 06:49:31.669-05" , 1 , Sheltie/Shetland Sheepdog

长话短说——不,它不是遗传的。有一个选项可以
创建表
-
像。。。包括…
,但它也不会传播触发器。

这是许多表继承不如您所希望的那么清晰的领域之一。触发器和外键约束对于分区表都有问题;它们需要代码“理解”实际的分区结构才能工作。你不能为顶级表编写它们,并让它们自动为子表工作。@Craig Ringer:是的。有一个关于限制的“注意事项”部分。它应该有一个元警告:此警告部分不完整:-)