report_triggers_listname.patch

application/octet-stream

Filename: report_triggers_listname.patch
Type: application/octet-stream
Part: 0
Message: Re: Segfault in RI UPDATE CASCADE on partitioned tables with LIKE+ATTACH child (attnum drift)

Patch

Same data as JSON: GET /api/v1/attachments/:id/patch the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes. API reference →
Format: unified
File+
src/backend/commands/explain.c 8 5
diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c
index e6edae0845c..854a148fbf3 100644
--- a/src/backend/commands/explain.c
+++ b/src/backend/commands/explain.c
@@ -70,7 +70,7 @@ static void ExplainPrintJIT(ExplainState *es, int jit_flags,
 static void ExplainPrintSerialize(ExplainState *es,
 								  SerializeMetrics *metrics);
 static void report_triggers(ResultRelInfo *rInfo, bool show_relname,
-							ExplainState *es);
+							ExplainState *es, char *list_name);
 static double elapsed_time(instr_time *starttime);
 static bool ExplainPreScanNode(PlanState *planstate, Bitmapset **rels_used);
 static void ExplainNode(PlanState *planstate, List *ancestors,
@@ -850,19 +850,19 @@ ExplainPrintTriggers(ExplainState *es, QueryDesc *queryDesc)
 	foreach(l, resultrels)
 	{
 		rInfo = (ResultRelInfo *) lfirst(l);
-		report_triggers(rInfo, show_relname, es);
+		report_triggers(rInfo, show_relname, es, "resultrels");
 	}
 
 	foreach(l, routerels)
 	{
 		rInfo = (ResultRelInfo *) lfirst(l);
-		report_triggers(rInfo, show_relname, es);
+		report_triggers(rInfo, show_relname, es, "routerels");
 	}
 
 	foreach(l, targrels)
 	{
 		rInfo = (ResultRelInfo *) lfirst(l);
-		report_triggers(rInfo, show_relname, es);
+		report_triggers(rInfo, show_relname, es, "trigrels");
 	}
 
 	ExplainCloseGroup("Triggers", "Triggers", false, es);
@@ -1090,7 +1090,8 @@ ExplainQueryParameters(ExplainState *es, ParamListInfo params, int maxlen)
  *		report execution stats for a single relation's triggers
  */
 static void
-report_triggers(ResultRelInfo *rInfo, bool show_relname, ExplainState *es)
+report_triggers(ResultRelInfo *rInfo, bool show_relname, ExplainState *es,
+				char *list_name)
 {
 	int			nt;
 
@@ -1134,6 +1135,8 @@ report_triggers(ResultRelInfo *rInfo, bool show_relname, ExplainState *es)
 				appendStringInfo(es->str, " for constraint %s", conname);
 			if (show_relname)
 				appendStringInfo(es->str, " on %s", relname);
+			if (list_name)
+				appendStringInfo(es->str, " in List %s", list_name);
 			if (es->timing)
 				appendStringInfo(es->str, ": time=%.3f calls=%.0f\n",
 								 1000.0 * instr->total, instr->ntuples);