diff options
| author | Tom Lane | 2016-11-25 18:44:48 +0000 |
|---|---|---|
| committer | Tom Lane | 2016-11-25 18:44:48 +0000 |
| commit | 05bef7b0884d85c25a3c8a5060c6389e6da52531 (patch) | |
| tree | eb8704342941cc19f10770bbbe044c93b962d411 /src/test | |
| parent | 8f67a6c226a3f73b7115491650630dd8a91937df (diff) | |
Check for pending trigger events on far end when dropping an FK constraint.
When dropping a foreign key constraint with ALTER TABLE DROP CONSTRAINT,
we refuse the drop if there are any pending trigger events on the named
table; this ensures that we won't remove the pg_trigger row that will be
consulted by those events. But we should make the same check for the
referenced relation, else we might remove a due-to-be-referenced pg_trigger
row for that relation too, resulting in "could not find trigger NNN" or
"relation NNN has no triggers" errors at commit. Per bug #14431 from
Benjie Gillam. Back-patch to all supported branches.
Report: <20161124114911.6530.31200@wrigleys.postgresql.org>
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/regress/expected/foreign_key.out | 13 | ||||
| -rw-r--r-- | src/test/regress/sql/foreign_key.sql | 13 |
2 files changed, 26 insertions, 0 deletions
diff --git a/src/test/regress/expected/foreign_key.out b/src/test/regress/expected/foreign_key.out index 8db6b8fb272..0a8c7473782 100644 --- a/src/test/regress/expected/foreign_key.out +++ b/src/test/regress/expected/foreign_key.out @@ -1355,4 +1355,17 @@ rollback to x; commit; -- fail ERROR: insert or update on table "fktable2" violates foreign key constraint "fktable2_f1_fkey" DETAIL: Key (f1)=(2) is not present in table "pktable2". +-- +-- Test that we prevent dropping FK constraint with pending trigger events +-- +begin; +insert into fktable2 values(2); +alter table fktable2 drop constraint fktable2_f1_fkey; +ERROR: cannot ALTER TABLE "fktable2" because it has pending trigger events +commit; +begin; +delete from pktable2 where f1 = 1; +alter table fktable2 drop constraint fktable2_f1_fkey; +ERROR: cannot ALTER TABLE "pktable2" because it has pending trigger events +commit; drop table pktable2, fktable2; diff --git a/src/test/regress/sql/foreign_key.sql b/src/test/regress/sql/foreign_key.sql index 28d990408ca..e0a44a300d1 100644 --- a/src/test/regress/sql/foreign_key.sql +++ b/src/test/regress/sql/foreign_key.sql @@ -1004,4 +1004,17 @@ delete from fktable2; rollback to x; commit; -- fail +-- +-- Test that we prevent dropping FK constraint with pending trigger events +-- +begin; +insert into fktable2 values(2); +alter table fktable2 drop constraint fktable2_f1_fkey; +commit; + +begin; +delete from pktable2 where f1 = 1; +alter table fktable2 drop constraint fktable2_f1_fkey; +commit; + drop table pktable2, fktable2; |
