PostgreSQL继承:父表触发器是否继承?
如果CANINES表上有一个prefore update触发器,它将timestamp列设置为now(),并且DOGS从CANINES继承,那么当DOGS行被更新时,CANINES update触发器应该触发吗?在我的测试中,答案是否定的,所以我怀疑答案是否定的,但也许我做得不对: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
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:是的。有一个关于限制的“注意事项”部分。它应该有一个元警告:此警告部分不完整:-)