mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +03:00
Use actual backend IDs in pg_stat_get_backend_idset() and friends.
Up to now, the ID values returned by pg_stat_get_backend_idset() and used by pg_stat_get_backend_activity() and allied functions were just indexes into a local array of sessions seen by the last stats refresh. This is problematic for a few reasons. The "ID" of a session can vary over its existence, which is surprising. Also, while these numbers often match the "backend ID" used for purposes like temp schema assignment, that isn't reliably true. We can fairly cheaply switch things around to make these numbers actually be the sessions' backend IDs. The added test case illustrates that with this definition, the temp schema used by a given session can be obtained given its PID. While here, delete some dead code that guarded against getting a NULL return from pgstat_fetch_stat_local_beentry(). That can't happen as long as the caller is careful to pass an in-range array index, as all the callers are. (This code may not have been dead when written, but it surely is now.) Nathan Bossart Discussion: https://postgr.es/m/20220815205811.GA250990@nathanxps13
This commit is contained in:
@ -5485,20 +5485,23 @@ SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event i
|
||||
the <structname>pg_stat_activity</structname> view, returns a set of records
|
||||
containing all the available information about each backend process.
|
||||
Sometimes it may be more convenient to obtain just a subset of this
|
||||
information. In such cases, an older set of per-backend statistics
|
||||
information. In such cases, another set of per-backend statistics
|
||||
access functions can be used; these are shown in <xref
|
||||
linkend="monitoring-stats-backend-funcs-table"/>.
|
||||
These access functions use a backend ID number, which ranges from one
|
||||
to the number of currently active backends.
|
||||
These access functions use the session's backend ID number, which is a
|
||||
small positive integer that is distinct from the backend ID of any
|
||||
concurrent session, although a session's ID can be recycled as soon as
|
||||
it exits. The backend ID is used, among other things, to identify the
|
||||
session's temporary schema if it has one.
|
||||
The function <function>pg_stat_get_backend_idset</function> provides a
|
||||
convenient way to generate one row for each active backend for
|
||||
convenient way to list all the active backends' ID numbers for
|
||||
invoking these functions. For example, to show the <acronym>PID</acronym>s and
|
||||
current queries of all backends:
|
||||
|
||||
<programlisting>
|
||||
SELECT pg_stat_get_backend_pid(s.backendid) AS pid,
|
||||
pg_stat_get_backend_activity(s.backendid) AS query
|
||||
FROM (SELECT pg_stat_get_backend_idset() AS backendid) AS s;
|
||||
SELECT pg_stat_get_backend_pid(backendid) AS pid,
|
||||
pg_stat_get_backend_activity(backendid) AS query
|
||||
FROM pg_stat_get_backend_idset() AS backendid;
|
||||
</programlisting>
|
||||
</para>
|
||||
|
||||
@ -5526,8 +5529,7 @@ SELECT pg_stat_get_backend_pid(s.backendid) AS pid,
|
||||
<returnvalue>setof integer</returnvalue>
|
||||
</para>
|
||||
<para>
|
||||
Returns the set of currently active backend ID numbers (from 1 to the
|
||||
number of active backends).
|
||||
Returns the set of currently active backend ID numbers.
|
||||
</para></entry>
|
||||
</row>
|
||||
|
||||
|
Reference in New Issue
Block a user