On Wed, May 11, 2022 at 11:33:50AM -0500, Justin Pryzby wrote:
> I suggest to reference the mvcc docs from the merge docs, or to make the merge
> docs themselves include the referenced information.

No comments here ?

> Also, EXPLAIN output currently looks like this:
> 
> | Merge on ex_mtarget t (actual rows=0 loops=1)
> |   Tuples Inserted: 0
> |   Tuples Updated: 50
> |   Tuples Deleted: 0
> |   Tuples Skipped: 0
> 
> Should the "zero" rows be elided from the text output ?
> And/or, should it use a more compact output format ?
> 
> There are two output formats already in use, so the options would look like
> this:
> 
>    Tuples: Inserted: 1  Updated: 2  Deleted: 3  Skipped: 4
> or
>    Tuples: inserted=1 updated=2 deleted=3 skipped=4
> 
> Note double spaces and capitals.
> That's separate from the question about eliding zeros.

Actually, the existing uses suggest that these *aren't* separate.

The cases where 0 output is elided (like Heap Blocks and Buffers) uses "=" and
not ":".  The cases using ":" always show all fields (Sort Method, Buckets,
Hits, Batches).  I'm not sure which is preferable for MERGE, but here's one
way.

diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c
index b902ef30c87..491105263ff 100644
--- a/src/backend/commands/explain.c
+++ b/src/backend/commands/explain.c
@@ -4119,10 +4119,20 @@ show_modifytable_info(ModifyTableState *mtstate, List 
*ancestors,
                        skipped_path = total - insert_path - update_path - 
delete_path;
                        Assert(skipped_path >= 0);
 
-                       ExplainPropertyFloat("Tuples Inserted", NULL, 
insert_path, 0, es);
-                       ExplainPropertyFloat("Tuples Updated", NULL, 
update_path, 0, es);
-                       ExplainPropertyFloat("Tuples Deleted", NULL, 
delete_path, 0, es);
-                       ExplainPropertyFloat("Tuples Skipped", NULL, 
skipped_path, 0, es);
+                       if (es->format == EXPLAIN_FORMAT_TEXT)
+                       {
+                               ExplainIndentText(es);
+                               appendStringInfo(es->str,
+                                               "Tuples Inserted: %.0f  
Updated: %.0f  Deleted: %.0f  Skipped: %.0f\n",
+                                               insert_path, update_path, 
delete_path, skipped_path);
+                       }
+                       else
+                       {
+                               ExplainPropertyFloat("Tuples Inserted", NULL, 
insert_path, 0, es);
+                               ExplainPropertyFloat("Tuples Updated", NULL, 
update_path, 0, es);
+                               ExplainPropertyFloat("Tuples Deleted", NULL, 
delete_path, 0, es);
+                               ExplainPropertyFloat("Tuples Skipped", NULL, 
skipped_path, 0, es);
+                       }
                }
        }
 


Reply via email to