Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit59b4cef

Browse files
committed
Add regression tests for disabling constraints.
Gavin Sherry
1 parent571be6f commit59b4cef

File tree

2 files changed

+105
-0
lines changed

2 files changed

+105
-0
lines changed

‎src/test/regress/expected/triggers.out

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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;

‎src/test/regress/sql/triggers.sql

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,3 +253,44 @@ COPY main_table (a, b) FROM stdin;
253253
\.
254254

255255
SELECT*FROM main_tableORDER BY a, b;
256+
257+
-- Test enable/disable triggers
258+
259+
createtabletrigtest (iserialprimary key);
260+
-- test that disabling RI triggers works
261+
createtabletrigtest2 (iintreferences trigtest(i)on delete cascade);
262+
263+
createfunctiontrigtest() returns triggeras $$
264+
begin
265+
raise notice'% % % %', TG_RELNAME, TG_OP, TG_WHEN, TG_LEVEL;
266+
return new;
267+
end;$$ language plpgsql;
268+
269+
createtriggertrigtest_b_row_tg before insertorupdateordeleteon trigtest
270+
for each row execute procedure trigtest();
271+
createtriggertrigtest_a_row_tg after insertorupdateordeleteon trigtest
272+
for each row execute procedure trigtest();
273+
createtriggertrigtest_b_stmt_tg before insertorupdateordeleteon trigtest
274+
for each statement execute procedure trigtest();
275+
createtriggertrigtest_a_stmt_tg after insertorupdateordeleteon trigtest
276+
for each statement execute procedure trigtest();
277+
278+
insert into trigtest defaultvalues;
279+
altertable trigtest disable trigger trigtest_b_row_tg;
280+
insert into trigtest defaultvalues;
281+
altertable trigtest disable trigger user;
282+
insert into trigtest defaultvalues;
283+
altertable trigtest enable trigger trigtest_a_stmt_tg;
284+
insert into trigtest defaultvalues;
285+
insert into trigtest2values(1);
286+
insert into trigtest2values(2);
287+
deletefrom trigtestwhere i=2;
288+
select*from trigtest2;
289+
altertable trigtest disable trigger all;
290+
deletefrom trigtestwhere i=1;
291+
select*from trigtest2;
292+
-- ensure we still insert, even when all triggers are disabled
293+
insert into trigtest defaultvalues;
294+
select*from trigtest;
295+
droptable trigtest2;
296+
droptable trigtest;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp