Remove pg_wait_for_backend_termination().
It was unable to wait on a backend that had already left the procarray. Users tolerant of that limitation can poll pg_stat_activity. Other users can employ the "timeout" argument of pg_terminate_backend(). Reviewed by Bharath Rupireddy. Discussion: https://postgr.es/m/20210605013236.GA208701@rfd.leadboat.com
This commit is contained in:
parent
0aac73e6a2
commit
5f1df62a45
|
@ -25002,23 +25002,6 @@ SELECT collation for ('foo' COLLATE "de_DE");
|
||||||
<literal>false</literal> is returned.
|
<literal>false</literal> is returned.
|
||||||
</para></entry>
|
</para></entry>
|
||||||
</row>
|
</row>
|
||||||
|
|
||||||
<row>
|
|
||||||
<entry role="func_table_entry"><para role="func_signature">
|
|
||||||
<indexterm>
|
|
||||||
<primary>pg_wait_for_backend_termination</primary>
|
|
||||||
</indexterm>
|
|
||||||
<function>pg_wait_for_backend_termination</function> ( <parameter>pid</parameter> <type>integer</type>, <parameter>timeout</parameter> <type>bigint</type> <literal>DEFAULT</literal> <literal>5000</literal> )
|
|
||||||
<returnvalue>boolean</returnvalue>
|
|
||||||
</para>
|
|
||||||
<para>
|
|
||||||
Waits for the backend process with the specified Process ID to
|
|
||||||
terminate. If the process terminates before
|
|
||||||
the <parameter>timeout</parameter> (in milliseconds)
|
|
||||||
expires, <literal>true</literal> is returned. On timeout, a warning
|
|
||||||
is emitted and <literal>false</literal> is returned.
|
|
||||||
</para></entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
</tbody>
|
||||||
</tgroup>
|
</tgroup>
|
||||||
</table>
|
</table>
|
||||||
|
|
|
@ -640,13 +640,7 @@ Author: Magnus Hagander <magnus@hagander.net>
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Add function <link
|
Add an optional timeout parameter to <link
|
||||||
linkend="functions-admin-signal"><function>pg_wait_for_backend_termination()</function></link>
|
|
||||||
that waits for session exit (Bharath Rupireddy)
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
Also add a similar optional wait parameter to <link
|
|
||||||
linkend="functions-admin-signal"><function>pg_terminate_backend()</function></link>
|
linkend="functions-admin-signal"><function>pg_terminate_backend()</function></link>
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
|
|
|
@ -397,11 +397,6 @@ CREATE OR REPLACE FUNCTION
|
||||||
RETURNS boolean STRICT VOLATILE LANGUAGE INTERNAL AS 'pg_terminate_backend'
|
RETURNS boolean STRICT VOLATILE LANGUAGE INTERNAL AS 'pg_terminate_backend'
|
||||||
PARALLEL SAFE;
|
PARALLEL SAFE;
|
||||||
|
|
||||||
CREATE OR REPLACE FUNCTION
|
|
||||||
pg_wait_for_backend_termination(pid integer, timeout int8 DEFAULT 5000)
|
|
||||||
RETURNS boolean STRICT VOLATILE LANGUAGE INTERNAL AS 'pg_wait_for_backend_termination'
|
|
||||||
PARALLEL SAFE;
|
|
||||||
|
|
||||||
-- legacy definition for compatibility with 9.3
|
-- legacy definition for compatibility with 9.3
|
||||||
CREATE OR REPLACE FUNCTION
|
CREATE OR REPLACE FUNCTION
|
||||||
json_populate_record(base anyelement, from_json json, use_json_as_text boolean DEFAULT false)
|
json_populate_record(base anyelement, from_json json, use_json_as_text boolean DEFAULT false)
|
||||||
|
|
|
@ -230,42 +230,6 @@ pg_terminate_backend(PG_FUNCTION_ARGS)
|
||||||
PG_RETURN_BOOL(r == SIGNAL_BACKEND_SUCCESS);
|
PG_RETURN_BOOL(r == SIGNAL_BACKEND_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Wait for a backend process with the given PID to exit or until the given
|
|
||||||
* timeout milliseconds occurs. Returns true if the backend has exited. On
|
|
||||||
* timeout a warning is emitted and false is returned.
|
|
||||||
*
|
|
||||||
* We allow any user to call this function, consistent with any user being
|
|
||||||
* able to view the pid of the process in pg_stat_activity etc.
|
|
||||||
*/
|
|
||||||
Datum
|
|
||||||
pg_wait_for_backend_termination(PG_FUNCTION_ARGS)
|
|
||||||
{
|
|
||||||
int pid;
|
|
||||||
int64 timeout;
|
|
||||||
PGPROC *proc = NULL;
|
|
||||||
|
|
||||||
pid = PG_GETARG_INT32(0);
|
|
||||||
timeout = PG_GETARG_INT64(1);
|
|
||||||
|
|
||||||
if (timeout <= 0)
|
|
||||||
ereport(ERROR,
|
|
||||||
(errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
|
|
||||||
errmsg("\"timeout\" must not be negative or zero")));
|
|
||||||
|
|
||||||
proc = BackendPidGetProc(pid);
|
|
||||||
|
|
||||||
if (proc == NULL)
|
|
||||||
{
|
|
||||||
ereport(WARNING,
|
|
||||||
(errmsg("PID %d is not a PostgreSQL server process", pid)));
|
|
||||||
|
|
||||||
PG_RETURN_BOOL(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
PG_RETURN_BOOL(pg_wait_until_termination(pid, timeout));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Signal to reload the database configuration
|
* Signal to reload the database configuration
|
||||||
*
|
*
|
||||||
|
|
|
@ -53,6 +53,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* yyyymmddN */
|
/* yyyymmddN */
|
||||||
#define CATALOG_VERSION_NO 202106101
|
#define CATALOG_VERSION_NO 202106151
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -6190,10 +6190,6 @@
|
||||||
proname => 'pg_terminate_backend', provolatile => 'v', prorettype => 'bool',
|
proname => 'pg_terminate_backend', provolatile => 'v', prorettype => 'bool',
|
||||||
proargtypes => 'int4 int8', proargnames => '{pid,timeout}',
|
proargtypes => 'int4 int8', proargnames => '{pid,timeout}',
|
||||||
prosrc => 'pg_terminate_backend' },
|
prosrc => 'pg_terminate_backend' },
|
||||||
{ oid => '2137', descr => 'wait for a backend process exit or timeout occurs',
|
|
||||||
proname => 'pg_wait_for_backend_termination', provolatile => 'v',
|
|
||||||
prorettype => 'bool', proargtypes => 'int4 int8',
|
|
||||||
proargnames => '{pid,timeout}', prosrc => 'pg_wait_for_backend_termination' },
|
|
||||||
{ oid => '2172', descr => 'prepare for taking an online backup',
|
{ oid => '2172', descr => 'prepare for taking an online backup',
|
||||||
proname => 'pg_start_backup', provolatile => 'v', proparallel => 'r',
|
proname => 'pg_start_backup', provolatile => 'v', proparallel => 'r',
|
||||||
prorettype => 'pg_lsn', proargtypes => 'text bool bool',
|
prorettype => 'pg_lsn', proargtypes => 'text bool bool',
|
||||||
|
|
Loading…
Reference in New Issue