From 9e95c9ad558bafa26efbab50f77929de4ade5f90 Mon Sep 17 00:00:00 2001 From: Simon Riggs <simon@2ndQuadrant.com> Date: Tue, 1 Feb 2011 00:20:53 +0000 Subject: [PATCH] Create new errcode for recovery conflict caused by db drop on master. Previously reported as ERRCODE_ADMIN_SHUTDOWN, this case is now reported as ERRCODE_T_R_DATABASE_DROPPED. No message text change. Unlikely to happen on most servers, so low impact change to allow session poolers to correctly handle this situation. Tatsuo Ishii, edits by me, review by Robert Haas --- doc/src/sgml/errcodes.sgml | 5 +++++ src/backend/tcop/postgres.c | 4 +++- src/include/utils/errcodes.h | 1 + src/pl/plpgsql/src/plerrcodes.h | 4 ++++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/doc/src/sgml/errcodes.sgml b/doc/src/sgml/errcodes.sgml index 3a1baf58831..d19de947b4c 100644 --- a/doc/src/sgml/errcodes.sgml +++ b/doc/src/sgml/errcodes.sgml @@ -985,6 +985,11 @@ <entry>deadlock_detected</entry> </row> +<row> +<entry><literal>40P02</literal></entry> +<entry>DATABASE DROPPED</entry> +<entry>database_dropped</entry> +</row> <row> <entry spanname="span13"><emphasis role="bold">Class 42 — Syntax Error or Access Rule Violation</></entry> diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 535926a937a..f6ccbb95243 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -2912,9 +2912,11 @@ ProcessInterrupts(void) } else if (RecoveryConflictPending) { + /* Currently there is only one non-retryable recovery conflict */ + Assert(RecoveryConflictReason == PROCSIG_RECOVERY_CONFLICT_DATABASE); pgstat_report_recovery_conflict(RecoveryConflictReason); ereport(FATAL, - (errcode(ERRCODE_ADMIN_SHUTDOWN), + (errcode(ERRCODE_T_R_DATABASE_DROPPED), errmsg("terminating connection due to conflict with recovery"), errdetail_recovery_conflict())); } diff --git a/src/include/utils/errcodes.h b/src/include/utils/errcodes.h index 7f2d589f140..8a9a8d460a5 100644 --- a/src/include/utils/errcodes.h +++ b/src/include/utils/errcodes.h @@ -243,6 +243,7 @@ #define ERRCODE_T_R_SERIALIZATION_FAILURE MAKE_SQLSTATE('4','0', '0','0','1') #define ERRCODE_T_R_STATEMENT_COMPLETION_UNKNOWN MAKE_SQLSTATE('4','0', '0','0','3') #define ERRCODE_T_R_DEADLOCK_DETECTED MAKE_SQLSTATE('4','0', 'P','0','1') +#define ERRCODE_T_R_DATABASE_DROPPED MAKE_SQLSTATE('4','0', 'P','0','2') /* Class 42 - Syntax Error or Access Rule Violation */ #define ERRCODE_SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION MAKE_SQLSTATE('4','2', '0','0','0') diff --git a/src/pl/plpgsql/src/plerrcodes.h b/src/pl/plpgsql/src/plerrcodes.h index 812446ffdf3..50f57413790 100644 --- a/src/pl/plpgsql/src/plerrcodes.h +++ b/src/pl/plpgsql/src/plerrcodes.h @@ -483,6 +483,10 @@ "deadlock_detected", ERRCODE_T_R_DEADLOCK_DETECTED }, +{ + "database_dropped", ERRCODE_T_R_DATABASE_DROPPED +}, + { "syntax_error_or_access_rule_violation", ERRCODE_SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION }, -- GitLab