mirror of
https://github.com/postgres/postgres.git
synced 2025-08-18 12:22:09 +03:00
Fix oversight in FindTriggerIncompatibleWithInheritance.
This function is called from ATExecAttachPartition/ATExecAddInherit,
which prevent tables with row-level triggers with transition tables from
becoming partitions or inheritance children, to check if there is such a
trigger on the given table, but failed to check if a found trigger is
row-level, causing the caller functions to needlessly prevent a table
with only a statement-level trigger with transition tables from becoming
a partition or inheritance child. Repair.
Oversight in commit 501ed02cf
.
Author: Etsuro Fujita <etsuro.fujita@gmail.com>
Discussion: https://postgr.es/m/CAPmGK167mXzwzzmJ_0YZ3EZrbwiCxtM1vogH_8drqsE6PtxRYw%40mail.gmail.com
Backpatch-through: 13
This commit is contained in:
@@ -2045,6 +2045,8 @@ FindTriggerIncompatibleWithInheritance(TriggerDesc *trigdesc)
|
||||
{
|
||||
Trigger *trigger = &trigdesc->triggers[i];
|
||||
|
||||
if (!TRIGGER_FOR_ROW(trigger->tgtype))
|
||||
continue;
|
||||
if (trigger->tgoldtable != NULL || trigger->tgnewtable != NULL)
|
||||
return trigger->tgname;
|
||||
}
|
||||
|
@@ -2930,6 +2930,10 @@ NOTICE: trigger = child3_delete_trig, old table = (42,CCC)
|
||||
-- copy into parent sees parent-format tuples
|
||||
copy parent (a, b) from stdin;
|
||||
NOTICE: trigger = parent_insert_trig, new table = (AAA,42), (BBB,42), (CCC,42)
|
||||
-- check detach/reattach behavior; statement triggers with transition tables
|
||||
-- should not prevent a table from becoming a partition again
|
||||
alter table parent detach partition child1;
|
||||
alter table parent attach partition child1 for values in ('AAA');
|
||||
-- DML affecting parent sees tuples collected from children even if
|
||||
-- there is no transition table trigger on the children
|
||||
drop trigger child1_insert_trig on child1;
|
||||
@@ -3127,6 +3131,10 @@ NOTICE: trigger = parent_insert_trig, new table = (AAA,42), (BBB,42), (CCC,42)
|
||||
create index on parent(b);
|
||||
copy parent (a, b) from stdin;
|
||||
NOTICE: trigger = parent_insert_trig, new table = (DDD,42)
|
||||
-- check disinherit/reinherit behavior; statement triggers with transition
|
||||
-- tables should not prevent a table from becoming an inheritance child again
|
||||
alter table child1 no inherit parent;
|
||||
alter table child1 inherit parent;
|
||||
-- DML affecting parent sees tuples collected from children even if
|
||||
-- there is no transition table trigger on the children
|
||||
drop trigger child1_insert_trig on child1;
|
||||
|
@@ -2038,6 +2038,11 @@ BBB 42
|
||||
CCC 42
|
||||
\.
|
||||
|
||||
-- check detach/reattach behavior; statement triggers with transition tables
|
||||
-- should not prevent a table from becoming a partition again
|
||||
alter table parent detach partition child1;
|
||||
alter table parent attach partition child1 for values in ('AAA');
|
||||
|
||||
-- DML affecting parent sees tuples collected from children even if
|
||||
-- there is no transition table trigger on the children
|
||||
drop trigger child1_insert_trig on child1;
|
||||
@@ -2257,6 +2262,11 @@ copy parent (a, b) from stdin;
|
||||
DDD 42
|
||||
\.
|
||||
|
||||
-- check disinherit/reinherit behavior; statement triggers with transition
|
||||
-- tables should not prevent a table from becoming an inheritance child again
|
||||
alter table child1 no inherit parent;
|
||||
alter table child1 inherit parent;
|
||||
|
||||
-- DML affecting parent sees tuples collected from children even if
|
||||
-- there is no transition table trigger on the children
|
||||
drop trigger child1_insert_trig on child1;
|
||||
|
Reference in New Issue
Block a user