Only show signal-sender PID/UID detail in server log

The errdetail() added in 55890a9194 (and reworked in 3e2a1496ba)
exposed the operating-system PID and UID of whoever sent the
termination signal directly to the affected client.

Discussion suggested this should not be sent to the client, but only
recorded in the server log where the admin can use it for diagnosis.

Author: Chao Li <li.evan.chao@gmail.com>
Reviewed-by: Jakub Wartak <jakub.wartak@enterprisedb.com>
Discussion: https://postgr.es/m/E5CA274C-74BD-4067-8B73-A3AD8C080EFA@gmail.com
master
Andrew Dunstan 6 days ago
parent f67dbd8398
commit b772f3fcad
  1. 7
      src/backend/replication/syncrep.c
  2. 7
      src/backend/tcop/postgres.c
  3. 2
      src/bin/psql/t/001_basic.pl

@ -304,9 +304,10 @@ SyncRepWaitForLSN(XLogRecPtr lsn, bool commit)
ereport(WARNING,
(errcode(ERRCODE_ADMIN_SHUTDOWN),
errmsg("canceling the wait for synchronous replication and terminating connection due to administrator command"),
errdetail("The transaction has already committed locally, but might not have been replicated to the standby. Signal sent by PID %d, UID %d.",
(int) ProcDieSenderPid,
(int) ProcDieSenderUid)));
errdetail("The transaction has already committed locally, but might not have been replicated to the standby."),
errdetail_log("The transaction has already committed locally, but might not have been replicated to the standby. Signal sent by PID %d, UID %d.",
(int) ProcDieSenderPid,
(int) ProcDieSenderUid)));
else
ereport(WARNING,
(errcode(ERRCODE_ADMIN_SHUTDOWN),

@ -111,12 +111,13 @@ int client_connection_check_interval = 0;
int restrict_nonsystem_relation_kind;
/*
* Include signal sender PID/UID as errdetail when available (SA_SIGINFO).
* The caller must supply the (already-captured) pid and uid values.
* Include signal sender PID/UID in the server log when available
* (SA_SIGINFO). The caller must supply the already-captured pid and uid
* values.
*/
#define ERRDETAIL_SIGNAL_SENDER(pid, uid) \
((pid) == 0 ? 0 : \
errdetail("Signal sent by PID %d, UID %d.", (int) (pid), (int) (uid)))
errdetail_log("Signal sent by PID %d, UID %d.", (int) (pid), (int) (uid)))
/* ----------------
* private typedefs etc

@ -143,7 +143,7 @@ is($ret, 2, 'server crash: psql exit code');
like($out, qr/before/, 'server crash: output before crash');
unlike($out, qr/AFTER/, 'server crash: no output after crash');
like( $err, qr/psql:<stdin>:2: FATAL: terminating connection due to administrator command
(?:DETAIL: Signal sent by PID \d+, UID \d+\.\n)?psql:<stdin>:2: server closed the connection unexpectedly
psql:<stdin>:2: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
psql:<stdin>:2: error: connection to server was lost/,

Loading…
Cancel
Save