Re: making EXPLAIN extensible
Andrei Lepikhov <lepihov@gmail.com>
From: Andrei Lepikhov <lepihov@gmail.com>
To: Sami Imseih <samimseih@gmail.com>, Robert Haas <robertmhaas@gmail.com>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, Jeff Davis <pgsql@j-davis.com>,
Thom Brown <thom@linux.com>,
PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2025-03-19T20:37:23Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
pg_overexplain: Use PG_MODULE_MAGIC_EXT.
- 83ccc85859f3 18.0 landed
-
pg_overexplain: Call previous hooks as appropriate.
- 9f0c36aea0fb 18.0 landed
-
pg_overexplain: Additional EXPLAIN options for debugging.
- 8d5ceb113e3f 18.0 landed
-
Add an additional hook for EXPLAIN option validation.
- 50ba65e73325 18.0 landed
-
Add some new hooks so extensions can add details to EXPLAIN.
- 4fd02bf7cf94 18.0 landed
-
Make it possible for loadable modules to add EXPLAIN options.
- c65bc2e1d14a 18.0 landed
On 19/3/2025 18:41, Sami Imseih wrote: >> On Wed, Mar 19, 2025 at 11:38 AM Sami Imseih <samimseih@gmail.com> wrote: >>> ... as I made the hook signature match that of >>> ParseExplainOptionList, so both pstate and the options list >>> are now available to the hook. >> >> This version LGTM, except it's not pgindent-clean. > > ugh, sorry about that. ran it for both modified files and it found one > indentation correction from v2. > >> index 1d4be3c18ac..8fe1ca5c73e 100644 > 38c38 > < + (*explain_validate_options_hook) (es, options, pstate); > --- >> + (*explain_validate_options_hook)(es, options, pstate); > 59c59 > < 2.47.1 > > v3 attached. I want to criticize this patch a bit. ;) Why do you think this hook is not redundant? May we avoid it at all? It seems to perform a too-narrow task. For example, if you want to separate parameters that may be used on a plain EXPLAIN and on EXPLAIN ANALYZE to get behaviour like the following: EXPLAIN (BUFFERS ON, TIMING ON) SELECT * FROM pg_class; ERROR: EXPLAIN option TIMING requires ANALYZE It would be better to add the parameter "type: EXPLAIN_ONLY | ANALYZE_ONLY | BOTH" to the RegisterExtensionExplainOption() routine. This value will be saved inside the ExplainExtensionOption structure and processed by the core inside the ParseExplainOptionList. > ERROR: EXPLAIN options REMOTE_PLANS and ANALYZE cannot be used > together I think the additional parameter covers the case you provided, isn't it? -- regards, Andrei Lepikhov