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

Commit851f4b4

Browse files
committed
Don't clone internal triggers to partitions
Trigger cloning to partitions was supposed to occur for user-visibletriggers only, but during development the protection that prevented itfrom occurring to internal triggers was lost. Reinstate it, as well asadd a test case to ensure internal triggers (in the tested case,triggers implementing a deferred unique constraint) are not cloned.Without the code fix, the partitions in the test end up with differentnumbers of triggers, which is clearly wrong ...Bug in86f5759.Discussion:https://postgr.es/m/20180403214903.ozfagwjcpk337uw7@alvherre.pgsql
1 parent2b30315 commit851f4b4

File tree

3 files changed

+42
-0
lines changed

3 files changed

+42
-0
lines changed

‎src/backend/commands/tablecmds.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14336,6 +14336,10 @@ CloneRowTriggersToPartition(Relation parent, Relation partition)
1433614336
if (!TRIGGER_FOR_ROW(trigForm->tgtype))
1433714337
continue;
1433814338

14339+
/* We don't clone internal triggers, either */
14340+
if (trigForm->tgisinternal)
14341+
continue;
14342+
1433914343
/*
1434014344
* Complain if we find an unexpected trigger type.
1434114345
*/

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

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2234,6 +2234,29 @@ NOTICE: trigger parted_trigger on parted_trigger_3_1 AFTER UPDATE for ROW: (a,b
22342234
NOTICE: trigger parted_trigger on parted_trigger_3_2 AFTER UPDATE for ROW: (a,b)=(2003,eeeeb)
22352235
drop table parted_trigger;
22362236
drop function trigger_notice_ab();
2237+
-- Make sure we don't end up with unnecessary copies of triggers, when
2238+
-- cloning them.
2239+
create table trg_clone (a int) partition by range (a);
2240+
create table trg_clone1 partition of trg_clone for values from (0) to (1000);
2241+
alter table trg_clone add constraint uniq unique (a) deferrable;
2242+
create table trg_clone2 partition of trg_clone for values from (1000) to (2000);
2243+
create table trg_clone3 partition of trg_clone for values from (2000) to (3000)
2244+
partition by range (a);
2245+
create table trg_clone_3_3 partition of trg_clone3 for values from (2000) to (2100);
2246+
select tgrelid::regclass, count(*) from pg_trigger
2247+
where tgrelid::regclass in ('trg_clone', 'trg_clone1', 'trg_clone2',
2248+
'trg_clone3', 'trg_clone_3_3')
2249+
group by tgrelid::regclass order by tgrelid::regclass;
2250+
tgrelid | count
2251+
---------------+-------
2252+
trg_clone | 1
2253+
trg_clone1 | 1
2254+
trg_clone2 | 1
2255+
trg_clone3 | 1
2256+
trg_clone_3_3 | 1
2257+
(5 rows)
2258+
2259+
drop table trg_clone;
22372260
--
22382261
-- Test the interaction between transition tables and both kinds of
22392262
-- inheritance. We'll dump the contents of the transition tables in a

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1578,6 +1578,21 @@ drop table parted_trigger;
15781578

15791579
dropfunction trigger_notice_ab();
15801580

1581+
-- Make sure we don't end up with unnecessary copies of triggers, when
1582+
-- cloning them.
1583+
createtabletrg_clone (aint) partition by range (a);
1584+
createtabletrg_clone1 partition of trg_clone forvaluesfrom (0) to (1000);
1585+
altertable trg_clone addconstraint uniq unique (a) deferrable;
1586+
createtabletrg_clone2 partition of trg_clone forvaluesfrom (1000) to (2000);
1587+
createtabletrg_clone3 partition of trg_clone forvaluesfrom (2000) to (3000)
1588+
partition by range (a);
1589+
createtabletrg_clone_3_3 partition of trg_clone3 forvaluesfrom (2000) to (2100);
1590+
select tgrelid::regclass,count(*)from pg_trigger
1591+
where tgrelid::regclassin ('trg_clone','trg_clone1','trg_clone2',
1592+
'trg_clone3','trg_clone_3_3')
1593+
group by tgrelid::regclassorder by tgrelid::regclass;
1594+
droptable trg_clone;
1595+
15811596
--
15821597
-- Test the interaction between transition tables and both kinds of
15831598
-- inheritance. We'll dump the contents of the transition tables in a

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp