Subject: add a new explain option including_query for include query string inside the json plan output

From: jian he <[email-masked]>
Date: Tue, 25 Jun 2024 16:54:00 +0800

for json format, add a new option to let the explain json output also
include the actual query string.

it can make json usage more convenient.
Now you only need to grab the json output, no need to
collect another explain statement and extract the actual query from
the explain statement.

including_query name is so far what i can come up with, if people have
better ideas, then we can change.

example:
explain (analyze,including_query on, format json) select 1;
             QUERY PLAN
-------------------------------------
 [                                  +
   {"Query": "select 1"},           +
   {                                +
     "Plan": {                      +
       "Node Type": "Result",       +
       "Parallel Aware": false,     +
       "Async Capable": false,      +
       "Startup Cost": 0.00,        +
       "Total Cost": 0.01,          +
       "Plan Rows": 1,              +
       "Plan Width": 4,             +
       "Actual Startup Time": 0.001,+
       "Actual Total Time": 0.001,  +
       "Actual Rows": 1,            +
       "Actual Loops": 1            +
     },                             +
     "Planning Time": 0.119,        +
     "Triggers": [                  +
     ],                             +
     "Execution Time": 0.033        +
   }                                +
 ]
(1 row)

---

From: Matthias van de Meent <[email-masked]>
Date: Tue, 25 Jun 2024 12:30:27 +0200

> include the actual query string.

How would this cooperate with e.g. EXPLAIN (...) EXECUTE
my_prepared_statement? Would this query be the prepared statement's
query, or the top-level EXECUTE statement?

> collect another explain statement and extract the actual query from

Wouldn't the user be able to keep track of the query they wanted
explained by themselves? If not, why?

> explain (analyze,including_query on, format json) select 1;

If we were to add the query to the explain output, I think it should
be a top-level key in the same JSON object that holds the "Plan",
Triggers, and "Execution Time" keys.

Kind regards,

Matthias van de Meent
Neon (https://neon.tech)

---

From: Tom Lane <[email-masked]>
Date: Tue, 25 Jun 2024 10:23:53 -0400

> explained by themselves? If not, why?

Indeed.  I do not think this is a good idea at all, even if the
question of "where did you get the query string from" could be
resolved satisfactorily.

			regards, tom lane