mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +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:
		@@ -2285,6 +2285,8 @@ FindTriggerIncompatibleWithInheritance(TriggerDesc *trigdesc)
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			Trigger    *trigger = &trigdesc->triggers[i];
 | 
								Trigger    *trigger = &trigdesc->triggers[i];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (!TRIGGER_FOR_ROW(trigger->tgtype))
 | 
				
			||||||
 | 
									continue;
 | 
				
			||||||
			if (trigger->tgoldtable != NULL || trigger->tgnewtable != NULL)
 | 
								if (trigger->tgoldtable != NULL || trigger->tgnewtable != NULL)
 | 
				
			||||||
				return trigger->tgname;
 | 
									return trigger->tgname;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3016,6 +3016,10 @@ NOTICE:  trigger = child3_delete_trig, old table = (42,CCC)
 | 
				
			|||||||
-- copy into parent sees parent-format tuples
 | 
					-- copy into parent sees parent-format tuples
 | 
				
			||||||
copy parent (a, b) from stdin;
 | 
					copy parent (a, b) from stdin;
 | 
				
			||||||
NOTICE:  trigger = parent_insert_trig, new table = (AAA,42), (BBB,42), (CCC,42)
 | 
					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
 | 
					-- DML affecting parent sees tuples collected from children even if
 | 
				
			||||||
-- there is no transition table trigger on the children
 | 
					-- there is no transition table trigger on the children
 | 
				
			||||||
drop trigger child1_insert_trig on child1;
 | 
					drop trigger child1_insert_trig on child1;
 | 
				
			||||||
@@ -3213,6 +3217,10 @@ NOTICE:  trigger = parent_insert_trig, new table = (AAA,42), (BBB,42), (CCC,42)
 | 
				
			|||||||
create index on parent(b);
 | 
					create index on parent(b);
 | 
				
			||||||
copy parent (a, b) from stdin;
 | 
					copy parent (a, b) from stdin;
 | 
				
			||||||
NOTICE:  trigger = parent_insert_trig, new table = (DDD,42)
 | 
					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
 | 
					-- DML affecting parent sees tuples collected from children even if
 | 
				
			||||||
-- there is no transition table trigger on the children
 | 
					-- there is no transition table trigger on the children
 | 
				
			||||||
drop trigger child1_insert_trig on child1;
 | 
					drop trigger child1_insert_trig on child1;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2110,6 +2110,11 @@ BBB	42
 | 
				
			|||||||
CCC	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
 | 
					-- DML affecting parent sees tuples collected from children even if
 | 
				
			||||||
-- there is no transition table trigger on the children
 | 
					-- there is no transition table trigger on the children
 | 
				
			||||||
drop trigger child1_insert_trig on child1;
 | 
					drop trigger child1_insert_trig on child1;
 | 
				
			||||||
@@ -2329,6 +2334,11 @@ copy parent (a, b) from stdin;
 | 
				
			|||||||
DDD	42
 | 
					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
 | 
					-- DML affecting parent sees tuples collected from children even if
 | 
				
			||||||
-- there is no transition table trigger on the children
 | 
					-- there is no transition table trigger on the children
 | 
				
			||||||
drop trigger child1_insert_trig on child1;
 | 
					drop trigger child1_insert_trig on child1;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user