Re: RFC: Logging plan of the running query
Sami Imseih <samimseih@gmail.com>
From: Sami Imseih <samimseih@gmail.com>
To: torikoshia <torikoshia@oss.nttdata.com>
Cc: Robert Haas <robertmhaas@gmail.com>, pgsql-hackers@lists.postgresql.org, destrex271@gmail.com
Date: 2025-04-03T12:40:14Z
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 →
-
ecpg: Catch zero-length Unicode identifiers correctly
- a18b6d2dc288 15.0 cited
-
Improve warning message in pg_signal_backend()
- 7fa945b857cc 15.0 cited
-
Add assert to ensure that page locks don't participate in deadlock cycle.
- 72e78d831ab5 13.0 cited
> > 2/ > > It should be noted that the plan will not print to the log until > > the plan begins executing the next plan node? depending on the > > operation, that could take some time ( i.e.long seq scan of a table, > > etc.) > > Does this behavior need to be called out in docs? > > Seems reasonable, but long seq scan of a table would not cause the case > since ExecProcNode() is called at least the number of the rows in a > table, as far as I remember. > Of course there can be the case where long time can elapse before > executing ExecProcNode(), so I agree with adding the doc about this. Correct. Seq Scan is a bad example since ExecProcNode is called for every tuple as you mention. MultiExecProcNode, functions doing time consuming computations, pg_sleep, etc. can all delay the signal being sent. I also realized that the extended query protocol may have its own caveats. A query running under the extended protocol will alternate between "active" and "idle in transaction" as it transitions through parse, bind, and execute. If a user calls pg_log_query_plan while the state is "idle in transaction," it will result in a "backend with PID ... is not running a query" log message. This is more likely if the query repeatedly reissues an "execute" message (i.e., JDBC fetchSize). Of course, if the user executes pg_log_query_plan again, it will (eventually) log the plan, but it may be very confusing to see the "is not running a query" message in the logs. the chances of this behavior is low, but not 0, so it's probably worth calling out in documentation. > 3/ > + * By default, only superusers are allowed to signal to log the plan because > + * allowing any users to issue this request at an unbounded rate would > Only superuser allowed to do this is very restrictive. Many shops do > not, for good > reasons, want DBAs or monitoring tools to connect as superuser. Why not allow > this functionality with "pg_monitor" ? I just realized that my comment above is unwarranted. A superuser can just simply GRANT EXECUTE ON FUNCTION to pg_monitor, or whatever monitoring role if they choose. You can ignore this. -- Sami Imseih Amazon Web Services (AWS)