summaryrefslogtreecommitdiff
path: root/src/backend/commands/subscriptioncmds.c
diff options
context:
space:
mode:
authorAmit Kapila <akapila@postgresql.org>2021-08-04 07:47:06 +0530
committerAmit Kapila <akapila@postgresql.org>2021-08-04 07:47:06 +0530
commit63cf61cdeb7b0450dcf3b2f719c553177bac85a2 (patch)
tree91df5f810b6cd96ddd1d7f2f4bd1c286af0fa2dc /src/backend/commands/subscriptioncmds.c
parent6424337073589476303b10f6d7cc74f501b8d9d7 (diff)
downloadpostgresql-63cf61cdeb7b0450dcf3b2f719c553177bac85a2.tar.gz
Add prepare API support for streaming transactions in logical replication.
Commit a8fd13cab0 added support for prepared transactions to built-in logical replication via a new option "two_phase" for a subscription. The "two_phase" option was not allowed with the existing streaming option. This commit permits the combination of "streaming" and "two_phase" subscription options. It extends the pgoutput plugin and the subscriber side code to add the prepare API for streaming transactions which will apply the changes accumulated in the spool-file at prepare time. Author: Peter Smith and Ajin Cherian Reviewed-by: Vignesh C, Amit Kapila, Greg Nancarrow Tested-By: Haiying Tang Discussion: https://postgr.es/m/02DA5F5E-CECE-4D9C-8B4B-418077E2C010@postgrespro.ru Discussion: https://postgr.es/m/CAMGcDxeqEpWj3fTXwqhSwBdXd2RS9jzwWscO-XbeCfso6ts3+Q@mail.gmail.com
Diffstat (limited to 'src/backend/commands/subscriptioncmds.c')
-rw-r--r--src/backend/commands/subscriptioncmds.c25
1 files changed, 0 insertions, 25 deletions
diff --git a/src/backend/commands/subscriptioncmds.c b/src/backend/commands/subscriptioncmds.c
index 22ae982328..5157f44058 100644
--- a/src/backend/commands/subscriptioncmds.c
+++ b/src/backend/commands/subscriptioncmds.c
@@ -335,25 +335,6 @@ parse_subscription_options(ParseState *pstate, List *stmt_options,
errmsg("subscription with %s must also set %s",
"slot_name = NONE", "create_slot = false")));
}
-
- /*
- * Do additional checking for the disallowed combination of two_phase and
- * streaming. While streaming and two_phase can theoretically be
- * supported, it needs more analysis to allow them together.
- */
- if (opts->twophase &&
- IsSet(supported_opts, SUBOPT_TWOPHASE_COMMIT) &&
- IsSet(opts->specified_opts, SUBOPT_TWOPHASE_COMMIT))
- {
- if (opts->streaming &&
- IsSet(supported_opts, SUBOPT_STREAMING) &&
- IsSet(opts->specified_opts, SUBOPT_STREAMING))
- ereport(ERROR,
- (errcode(ERRCODE_SYNTAX_ERROR),
- /*- translator: both %s are strings of the form "option = value" */
- errmsg("%s and %s are mutually exclusive options",
- "two_phase = true", "streaming = true")));
- }
}
/*
@@ -933,12 +914,6 @@ AlterSubscription(ParseState *pstate, AlterSubscriptionStmt *stmt,
if (IsSet(opts.specified_opts, SUBOPT_STREAMING))
{
- if ((sub->twophasestate != LOGICALREP_TWOPHASE_STATE_DISABLED) && opts.streaming)
- ereport(ERROR,
- (errcode(ERRCODE_SYNTAX_ERROR),
- errmsg("cannot set %s for two-phase enabled subscription",
- "streaming = true")));
-
values[Anum_pg_subscription_substream - 1] =
BoolGetDatum(opts.streaming);
replaces[Anum_pg_subscription_substream - 1] = true;