From 8de345838a987de5e0ac74c7bd70dc0d746a4574 Mon Sep 17 00:00:00 2001 From: Aleksander Alekseev Date: Mon, 16 Jan 2023 12:34:18 +0300 Subject: [PATCH v2 2/4] Fix the message in case of approaching xidWrapLimit Prior to this commit the error message said that the database doesn't accept new commands when it approaches xidWrapLimit. This is not true. The commands that don't allocate new XIDs can still be executed. E.g. read-only transactions continue to work. This commit clarifies this. Additionally it makes the error messages consistent with the similar messages for MultiXactIds which interestingly were accurate. Author: Aleksander Alekseev Reviewed-by: TODO FIXME Discussion: https://postgr.es/m/CAJ7c6TM2D277U2wH8X78kg8pH3tdUqebV3_JCJqAkYQFHCFzeg@mail.gmail.com --- doc/src/sgml/maintenance.sgml | 2 +- src/backend/access/transam/varsup.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/src/sgml/maintenance.sgml b/doc/src/sgml/maintenance.sgml index 2aa072ba89..48330605c7 100644 --- a/doc/src/sgml/maintenance.sgml +++ b/doc/src/sgml/maintenance.sgml @@ -666,7 +666,7 @@ HINT: To avoid a database shutdown, execute a database-wide VACUUM in that data once there are fewer than three million transactions left until wraparound: -ERROR: database is not accepting commands to avoid wraparound data loss in database "mydb" +ERROR: database is not accepting commands that generate new XIDs to avoid wraparound data loss in database "mydb" HINT: Stop the postmaster and vacuum that database in single-user mode. diff --git a/src/backend/access/transam/varsup.c b/src/backend/access/transam/varsup.c index 334adac09e..fece6cf31b 100644 --- a/src/backend/access/transam/varsup.c +++ b/src/backend/access/transam/varsup.c @@ -126,14 +126,14 @@ GetNewTransactionId(bool isSubXact) if (oldest_datname) ereport(ERROR, (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), - errmsg("database is not accepting commands to avoid wraparound data loss in database \"%s\"", + errmsg("database is not accepting commands that generate new XIDs to avoid wraparound data loss in database \"%s\"", oldest_datname), errhint("Stop the postmaster and vacuum that database in single-user mode.\n" "You might also need to commit or roll back old prepared transactions, or drop stale replication slots."))); else ereport(ERROR, (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), - errmsg("database is not accepting commands to avoid wraparound data loss in database with OID %u", + errmsg("database is not accepting commands that generate new XIDs to avoid wraparound data loss in database with OID %u", oldest_datoid), errhint("Stop the postmaster and vacuum that database in single-user mode.\n" "You might also need to commit or roll back old prepared transactions, or drop stale replication slots."))); -- 2.39.0