Re: making EXPLAIN extensible

Tom Lane <tgl@sss.pgh.pa.us>

From: Tom Lane <tgl@sss.pgh.pa.us>
To: Robert Haas <robertmhaas@gmail.com>
Cc: Jeff Davis <pgsql@j-davis.com>, Thom Brown <thom@linux.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2025-03-05T21:00:21Z
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 →
  1. pg_overexplain: Use PG_MODULE_MAGIC_EXT.

  2. pg_overexplain: Call previous hooks as appropriate.

  3. pg_overexplain: Additional EXPLAIN options for debugging.

  4. Add an additional hook for EXPLAIN option validation.

  5. Add some new hooks so extensions can add details to EXPLAIN.

  6. Make it possible for loadable modules to add EXPLAIN options.

Robert Haas <robertmhaas@gmail.com> writes:
> On Wed, Mar 5, 2025 at 1:53 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:
>> I'm quite confused by the #include additions in auto_explain.c and
>> file_fdw.c, and I strongly object to the ones in explain_state.h.
>> Surely those are unnecessary?

> They are necessary but they should have been part of 0001.

Ah.  I was mistakenly assuming that 0001 would compile on its own ;-)

> Because
> 0001 moves the definition of ExplainState to explain_state.h, files
> that need to access to the members of that structure now need to
> include that header file. As for the includes in explain_state.h, it
> needs definitions for DefElem, ParseState, and PlannedStmt.

Got it.  So does that mean we can remove any #include's from explain.h
after moving the struct definition?

			regards, tom lane