From 9cbfe5ced8c650c7b43227c1b9f7a4da2a0d2c51 Mon Sep 17 00:00:00 2001 From: "houzj.fnst" Date: Mon, 17 Oct 2022 10:57:38 +0800 Subject: [PATCH] Improve errhint for ALTER SUBSCRIPTION ADD/DROP PUBLICATION Improve the HINT message when adding or dropping a publication on disabled subscription. While on it, also change the error code of related messages to a more appropriate one. --- src/backend/commands/subscriptioncmds.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/backend/commands/subscriptioncmds.c b/src/backend/commands/subscriptioncmds.c index 8fb89a9..2186d9e 100644 --- a/src/backend/commands/subscriptioncmds.c +++ b/src/backend/commands/subscriptioncmds.c @@ -1182,7 +1182,7 @@ AlterSubscription(ParseState *pstate, AlterSubscriptionStmt *stmt, */ if (sub->twophasestate == LOGICALREP_TWOPHASE_STATE_ENABLED && opts.copy_data) ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), + (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("ALTER SUBSCRIPTION with refresh and copy_data is not allowed when two_phase is enabled"), errhint("Use ALTER SUBSCRIPTION ... SET PUBLICATION with refresh = false, or with copy_data = false" ", or use DROP/CREATE SUBSCRIPTION."))); @@ -1226,7 +1226,9 @@ AlterSubscription(ParseState *pstate, AlterSubscriptionStmt *stmt, ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("ALTER SUBSCRIPTION with refresh is not allowed for disabled subscriptions"), - errhint("Use ALTER SUBSCRIPTION ... SET PUBLICATION ... WITH (refresh = false)."))); + /* translator: %s is an SQL ALTER command */ + errhint("Use %s.", isadd ? "ALTER SUBSCRIPTION ... ADD PUBLICATION ... WITH (refresh = false)" + : "ALTER SUBSCRIPTION ... DROP PUBLICATION ... WITH (refresh = false)"))); /* * See ALTER_SUBSCRIPTION_REFRESH for details why this is @@ -1234,10 +1236,13 @@ AlterSubscription(ParseState *pstate, AlterSubscriptionStmt *stmt, */ if (sub->twophasestate == LOGICALREP_TWOPHASE_STATE_ENABLED && opts.copy_data) ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), + (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("ALTER SUBSCRIPTION with refresh and copy_data is not allowed when two_phase is enabled"), - errhint("Use ALTER SUBSCRIPTION ... SET PUBLICATION with refresh = false, or with copy_data = false" - ", or use DROP/CREATE SUBSCRIPTION."))); + /* translator: %s is an SQL ALTER command */ + errhint("Use %s with refresh = false, or with copy_data = false" + ", or use DROP/CREATE SUBSCRIPTION.", + isadd ? "ALTER SUBSCRIPTION ... ADD PUBLICATION" + : "ALTER SUBSCRIPTION ... DROP PUBLICATION"))); PreventInTransactionBlock(isTopLevel, "ALTER SUBSCRIPTION with refresh"); -- 2.7.2.windows.1