Version: postgresql 9.0.1 Step to reproduce: use following code. It creates two tables (parent "xtest" and inherited "xtest_inh"), creates trigger function, creates BEFORE INSERT/UPDATE/DELETE trigger.
************************************* CREATE TABLE xtest (id serial, data varchar, primary key(id)); CREATE TABLE xtest_inh (check (id > 0), primary key(id)) INHERITS (xtest); -- insert some data to inherited table "xtest_inh" INSERT INTO xtest_inh(data) values ('ddd'), ('lol'), ('olo'); -- this function just raises an exception every time CREATE FUNCTION just_raise_exception_tg() returns trigger as $$ BEGIN raise exception 'aaaaaaaaaaaaaaaaaaaaa!'; END; $$ language plpgsql; -- adding STATEMENT-level trigger to inherited table "xtest_inh" CREATE TRIGGER just_raise_exception_tg BEFORE INSERT OR UPDATE OF data OR DELETE ON xtest_inh FOR EACH STATEMENT execute procedure just_raise_exception_tg(2); -- do some operations, that should cause to trigger the table -- INSERT into xtest_inh(data) values ('omg'); DELETE from xtest where id = 2; drop table xtest cascade; drop function just_raise_exception_tg() cascade; ********************************** Expected result: exception will be raised before deletion of rows is done. Real result: no exception occurs. One of rows is really deleted. The trigger is ignored. Comments: 1. You can uncomment INSERT statement, and try again: exception will be thrown. BEFORE INSERT works, BEFORE delete - no. 2. If i create trigger FOR EACH STATEMENT, it will work ok for insert, update and delete. 3. AFTER DELETE statement-level trigger also does not work at all. bug?
signature.asc
Description: PGP signature