@@ -322,3 +322,67 @@ SELECT * FROM main_table ORDER BY a, b;
322322 |
323323(8 rows)
324324
325+ -- Test enable/disable triggers
326+ create table trigtest (i serial primary key);
327+ NOTICE: CREATE TABLE will create implicit sequence "trigtest_i_seq" for serial column "trigtest.i"
328+ NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "trigtest_pkey" for table "trigtest"
329+ -- test that disabling RI triggers works
330+ create table trigtest2 (i int references trigtest(i) on delete cascade);
331+ create function trigtest() returns trigger as $$
332+ begin
333+ raise notice '% % % %', TG_RELNAME, TG_OP, TG_WHEN, TG_LEVEL;
334+ return new;
335+ end;$$ language plpgsql;
336+ create trigger trigtest_b_row_tg before insert or update or delete on trigtest
337+ for each row execute procedure trigtest();
338+ create trigger trigtest_a_row_tg after insert or update or delete on trigtest
339+ for each row execute procedure trigtest();
340+ create trigger trigtest_b_stmt_tg before insert or update or delete on trigtest
341+ for each statement execute procedure trigtest();
342+ create trigger trigtest_a_stmt_tg after insert or update or delete on trigtest
343+ for each statement execute procedure trigtest();
344+ insert into trigtest default values;
345+ NOTICE: trigtest INSERT BEFORE STATEMENT
346+ NOTICE: trigtest INSERT BEFORE ROW
347+ NOTICE: trigtest INSERT AFTER ROW
348+ NOTICE: trigtest INSERT AFTER STATEMENT
349+ alter table trigtest disable trigger trigtest_b_row_tg;
350+ insert into trigtest default values;
351+ NOTICE: trigtest INSERT BEFORE STATEMENT
352+ NOTICE: trigtest INSERT AFTER ROW
353+ NOTICE: trigtest INSERT AFTER STATEMENT
354+ alter table trigtest disable trigger user;
355+ insert into trigtest default values;
356+ alter table trigtest enable trigger trigtest_a_stmt_tg;
357+ insert into trigtest default values;
358+ NOTICE: trigtest INSERT AFTER STATEMENT
359+ insert into trigtest2 values(1);
360+ insert into trigtest2 values(2);
361+ delete from trigtest where i=2;
362+ NOTICE: trigtest DELETE AFTER STATEMENT
363+ select * from trigtest2;
364+ i
365+ ---
366+ 1
367+ (1 row)
368+
369+ alter table trigtest disable trigger all;
370+ delete from trigtest where i=1;
371+ select * from trigtest2;
372+ i
373+ ---
374+ 1
375+ (1 row)
376+
377+ -- ensure we still insert, even when all triggers are disabled
378+ insert into trigtest default values;
379+ select * from trigtest;
380+ i
381+ ---
382+ 3
383+ 4
384+ 5
385+ (3 rows)
386+
387+ drop table trigtest2;
388+ drop table trigtest;