Re: making EXPLAIN extensible

Sami Imseih <samimseih@gmail.com>

From: Sami Imseih <samimseih@gmail.com>
To: 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-18T03:54:32Z
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.

> You only
> need the second hook if you want to check the values of options
> against the values of other options.
+1

I did not think of adding a new hook, because there must be a really good
reason to add a new hook. I think it's justified for this case. It's better than
my approach since the extension author can just put all their checks in one
place rather than having to register a bunch of handlers.

> some loadable module adds two new options LEFT and RIGHT and wants to
> check that you don't specify LEFT and RIGHT together? Either they
> register the same validate handler for both, or they register the real
> validate handler for one and a no-op handler for the other. Neither of
> those options seems very appealing.

When I thought about this, I figured that one of the options will register
a validate handler and the other option will set the handler to NULL. But,
I do see why this is not appealing.

--
Sami