mirror of
https://github.com/postgres/postgres.git
synced 2025-07-15 19:21:59 +03:00
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:
@ -397,11 +397,6 @@ CREATE OR REPLACE FUNCTION
|
||||
RETURNS boolean STRICT VOLATILE LANGUAGE INTERNAL AS 'pg_terminate_backend'
|
||||
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
|
||||
CREATE OR REPLACE FUNCTION
|
||||
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);
|
||||
}
|
||||
|
||||
/*
|
||||
* 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
|
||||
*
|
||||
|
Reference in New Issue
Block a user