From: Andrew Dunstan Date: Fri, 1 May 2026 15:52:14 +0000 (-0400) Subject: Only show signal-sender PID/UID detail in server log X-Git-Tag: REL_19_BETA1~199 X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=b772f3fcad1870731020dbe56713c616abc5dc26;p=thirdparty%2Fpostgresql.git Only show signal-sender PID/UID detail in server log The errdetail() added in 55890a91945 (and reworked in 3e2a1496bae) 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 Reviewed-by: Jakub Wartak Discussion: https://postgr.es/m/E5CA274C-74BD-4067-8B73-A3AD8C080EFA@gmail.com --- diff --git a/src/backend/replication/syncrep.c b/src/backend/replication/syncrep.c index 73450fe437e..e0e30579c59 100644 --- a/src/backend/replication/syncrep.c +++ b/src/backend/replication/syncrep.c @@ -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), diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 2c1f14b7889..dbef734a93f 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -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 diff --git a/src/bin/psql/t/001_basic.pl b/src/bin/psql/t/001_basic.pl index 7c21204c1f2..cd4a21ca639 100644 --- a/src/bin/psql/t/001_basic.pl +++ b/src/bin/psql/t/001_basic.pl @@ -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::2: FATAL: terminating connection due to administrator command -(?:DETAIL: Signal sent by PID \d+, UID \d+\.\n)?psql::2: server closed the connection unexpectedly +psql::2: server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request. psql::2: error: connection to server was lost/,