mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +03:00
Fire per-statement triggers on partitioned tables.
Even though no actual tuples are ever inserted into a partitioned table (the actual tuples are in the partitions, not the partitioned table itself), we still need to have a ResultRelInfo for the partitioned table, or per-statement triggers won't get fired. Amit Langote, per a report from Rajkumar Raghuwanshi. Reviewed by me. Discussion: http://postgr.es/m/CAKcux6%3DwYospCRY2J4XEFuVy0L41S%3Dfic7rmkbsU-GXhhSbmBg%40mail.gmail.com
This commit is contained in:
@ -882,11 +882,22 @@ set_plan_refs(PlannerInfo *root, Plan *plan, int rtoffset)
|
||||
/*
|
||||
* If the main target relation is a partitioned table, the
|
||||
* following list contains the RT indexes of partitioned child
|
||||
* relations, which are not included in the above list.
|
||||
* relations including the root, which are not included in the
|
||||
* above list. We also keep RT indexes of the roots separately
|
||||
* to be identitied as such during the executor initialization.
|
||||
*/
|
||||
root->glob->nonleafResultRelations =
|
||||
list_concat(root->glob->nonleafResultRelations,
|
||||
list_copy(splan->partitioned_rels));
|
||||
if (splan->partitioned_rels != NIL)
|
||||
{
|
||||
root->glob->nonleafResultRelations =
|
||||
list_concat(root->glob->nonleafResultRelations,
|
||||
list_copy(splan->partitioned_rels));
|
||||
/* Remember where this root will be in the global list. */
|
||||
splan->rootResultRelIndex =
|
||||
list_length(root->glob->rootResultRelations);
|
||||
root->glob->rootResultRelations =
|
||||
lappend_int(root->glob->rootResultRelations,
|
||||
linitial_int(splan->partitioned_rels));
|
||||
}
|
||||
}
|
||||
break;
|
||||
case T_Append:
|
||||
|
Reference in New Issue
Block a user