On 2025/05/22 21:21, Amit Kapila wrote:
On Wed, May 21, 2025 at 6:04 PM Fujii Masao <masao.fu...@oss.nttdata.com> wrote:
On 2025/05/20 18:13, vignesh C wrote:
If we set the wal_receiver_timeout configuration using ALTER ROLE for
the subscription owner's role, the apply worker will start with that
value. However, any changes made via ALTER ROLE ... SET
wal_receiver_timeout will not take effect for an already running apply
worker unless the subscription is disabled and re-enabled. In
contrast, this is handled automatically during CREATE SUBSCRIPTION,
where parameter changes are detected.
Yes, this is one of the limitations of the user-settable wal_receiver_timeout
approach. If we want to change the timeout used by the apply worker without
restarting it, storing the value in pg_subscription (similar to how
synchronous_commit is handled) would be a better solution.
In that case, for example, we could set the default value of
pg_subscription.wal_receiver_timeout to -1, meaning the apply worker should
use the global wal_receiver_timeout from postgresql.conf. If the value is 0
or higher, the apply worker would use the value stored in pg_subscription.
Yeah, I had a similar idea in my mind.
OK, I've implemented two patches:
- 0001 makes the wal_receiver_timeout GUC user-settable.
- 0002 adds support for setting wal_receiver_timeout per subscription.
It depends on the changes in 0001.
With both patches applied, wal_receiver_timeout can be set per role or
per database using ALTER ROLE or ALTER DATABASE (from 0001), and also
per subscription using CREATE SUBSCRIPTION or ALTER SUBSCRIPTION (from 0002).
The per-subscription value is stored in pg_subscription.subwalrcvtimeout,
and it overrides the global setting of wal_receiver_timeout for that
subscription's apply worker. The default is -1, meaning the global setting
(from server config, command line, role, or database) is used.
I'll add this to the next CommitFest.
On further thought, another downside of the user-settable approach is that
it doesn't work for parameters like wal_retrieve_retry_interval, which is
used by the logical replication launcher not the apply worker. So if we
want to support per-subscription control for non-apply workers, storing
the settings in pg_subscription might be more appropriate.
Yeah, that could be an option, but one might not want to keep such
variables different for each subscription. Do you think one would like
to prefer specifying variables that only apply to the subscriber-node
in a way other than GUC? I always have this question whenever I see
GUCs like max_sync_workers_per_subscription, which are specific to
only subscriber nodes.
I like still using the xxx_per_subscription GUC as the default,
and also allowing it to be overridden per subscription. This seems
intuitive for some users and adds useful flexibility.
Regards,
--
Fujii Masao
NTT DATA Japan Corporation
From 2802e79a06d87ca59be5a440b266738c91442129 Mon Sep 17 00:00:00 2001
From: Fujii Masao <fu...@postgresql.org>
Date: Mon, 26 May 2025 20:00:40 +0900
Subject: [PATCH v1 1/2] Make GUC wal_receiver_timeout user-settable.
When multiple subscribers connect to different publisher servers,
it can be useful to set different wal_receiver_timeout values for
each connection to better detect failures. However, previously
this wasn't possible, which limited flexibility in managing subscriptions.
This commit changes wal_receiver_timeout to be user-settable,
allowing different values to be assigned using ALTER ROLE SET for
each subscription owner. This effectively enables per-subscription
configuration.
---
doc/src/sgml/config.sgml | 3 ---
src/backend/utils/misc/guc_tables.c | 2 +-
2 files changed, 1 insertion(+), 4 deletions(-)
diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml
index ca2a567b2b1..4f37fbfe114 100644
--- a/doc/src/sgml/config.sgml
+++ b/doc/src/sgml/config.sgml
@@ -5147,9 +5147,6 @@ ANY <replaceable class="parameter">num_sync</replaceable>
( <replaceable class="
If this value is specified without units, it is taken as milliseconds.
The default value is 60 seconds.
A value of zero disables the timeout mechanism.
- This parameter can only be set in
- the <filename>postgresql.conf</filename> file or on the server
- command line.
</para>
</listitem>
</varlistentry>
diff --git a/src/backend/utils/misc/guc_tables.c
b/src/backend/utils/misc/guc_tables.c
index 2f8cbd86759..4b5f7e8561b 100644
--- a/src/backend/utils/misc/guc_tables.c
+++ b/src/backend/utils/misc/guc_tables.c
@@ -2308,7 +2308,7 @@ struct config_int ConfigureNamesInt[] =
},
{
- {"wal_receiver_timeout", PGC_SIGHUP, REPLICATION_STANDBY,
+ {"wal_receiver_timeout", PGC_USERSET, REPLICATION_STANDBY,
gettext_noop("Sets the maximum wait time to receive
data from the sending server."),
gettext_noop("0 disables the timeout."),
GUC_UNIT_MS
--
2.49.0
From 69ef2751f3e13e30a28f73c9defdbaaf2f62aa5e Mon Sep 17 00:00:00 2001
From: Fujii Masao <fu...@postgresql.org>
Date: Mon, 26 May 2025 20:02:51 +0900
Subject: [PATCH v1 2/2] Add per-subscription wal_receiver_timeout setting.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This commit allows setting wal_receiver_timeout per subscription
using the CREATE SUBSCRIPTION and ALTER SUBSCRIPTION commands.
The value is stored in the subwalrcvtimeout column of the pg_subscription
catalog.
When set, this value overrides the global wal_receiver_timeout for
the subscription’s apply worker. The default is -1, which means the
global setting (from the server configuration, command line, role,
or database) remains in effect.
This feature is useful for configuring different timeout values for
each subscription, especially when connecting to multiple publisher
servers, to improve failure detection.
Bump catalog version.
---
doc/src/sgml/catalogs.sgml | 10 ++
doc/src/sgml/ref/alter_subscription.sgml | 5 +-
doc/src/sgml/ref/create_subscription.sgml | 15 +-
src/backend/catalog/pg_subscription.c | 6 +
src/backend/commands/subscriptioncmds.c | 48 ++++++-
src/backend/replication/logical/worker.c | 39 ++++++
src/bin/pg_dump/pg_dump.c | 17 ++-
src/bin/pg_dump/pg_dump.h | 1 +
src/bin/psql/describe.c | 8 +-
src/include/catalog/pg_subscription.h | 4 +
src/test/regress/expected/subscription.out | 156 +++++++++++----------
src/test/regress/sql/subscription.sql | 3 +
12 files changed, 228 insertions(+), 84 deletions(-)
diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml
index cbd4e40a320..626c5f76192 100644
--- a/doc/src/sgml/catalogs.sgml
+++ b/doc/src/sgml/catalogs.sgml
@@ -8118,6 +8118,16 @@ SCRAM-SHA-256$<replaceable><iteration
count></replaceable>:<replaceable>&l
</para></entry>
</row>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>subwalrcvtimeout</structfield> <type>text</type>
+ </para>
+ <para>
+ The <varname>wal_receiver_timeout</varname>
+ setting for the subscription's workers to use
+ </para></entry>
+ </row>
+
<row>
<entry role="catalog_table_entry"><para role="column_definition">
<structfield>subpublications</structfield> <type>text[]</type>
diff --git a/doc/src/sgml/ref/alter_subscription.sgml
b/doc/src/sgml/ref/alter_subscription.sgml
index fdc648d007f..c26f369f315 100644
--- a/doc/src/sgml/ref/alter_subscription.sgml
+++ b/doc/src/sgml/ref/alter_subscription.sgml
@@ -235,8 +235,9 @@ ALTER SUBSCRIPTION <replaceable
class="parameter">name</replaceable> RENAME TO <
<link
linkend="sql-createsubscription-params-with-password-required"><literal>password_required</literal></link>,
<link
linkend="sql-createsubscription-params-with-run-as-owner"><literal>run_as_owner</literal></link>,
<link
linkend="sql-createsubscription-params-with-origin"><literal>origin</literal></link>,
- <link
linkend="sql-createsubscription-params-with-failover"><literal>failover</literal></link>,
and
- <link
linkend="sql-createsubscription-params-with-two-phase"><literal>two_phase</literal></link>.
+ <link
linkend="sql-createsubscription-params-with-failover"><literal>failover</literal></link>,
+ <link
linkend="sql-createsubscription-params-with-two-phase"><literal>two_phase</literal></link>,
and
+ <link
linkend="sql-createsubscription-params-with-wal-receiver-timeout"><literal>wal_receiver_timeout</literal></link>.
Only a superuser can set <literal>password_required = false</literal>.
</para>
diff --git a/doc/src/sgml/ref/create_subscription.sgml
b/doc/src/sgml/ref/create_subscription.sgml
index 57dec28a5df..08a6e88e5d1 100644
--- a/doc/src/sgml/ref/create_subscription.sgml
+++ b/doc/src/sgml/ref/create_subscription.sgml
@@ -435,8 +435,21 @@ CREATE SUBSCRIPTION <replaceable
class="parameter">subscription_name</replaceabl
</para>
</listitem>
</varlistentry>
- </variablelist></para>
+ <varlistentry
id="sql-createsubscription-params-with-wal-receiver-timeout">
+ <term><literal>wal_receiver_timeout</literal>
(<type>text</type>)</term>
+ <listitem>
+ <para>
+ The value of this parameter overrides the
+ <xref linkend="guc-wal-receiver-timeout"/> setting within this
+ subscription's apply worker processes. The default value is
+ <literal>-1</literal>, which means it does not override the global
setting,
+ i.e., the value from the server configuration, command line, role or
+ database settings will be used instead.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist></para>
</listitem>
</varlistentry>
</variablelist>
diff --git a/src/backend/catalog/pg_subscription.c
b/src/backend/catalog/pg_subscription.c
index 1395032413e..deb8a281e86 100644
--- a/src/backend/catalog/pg_subscription.c
+++ b/src/backend/catalog/pg_subscription.c
@@ -126,6 +126,12 @@ GetSubscription(Oid subid, bool missing_ok)
Anum_pg_subscription_subsynccommit);
sub->synccommit = TextDatumGetCString(datum);
+ /* Get walrcvtimeout */
+ datum = SysCacheGetAttrNotNull(SUBSCRIPTIONOID,
+ tup,
+
Anum_pg_subscription_subwalrcvtimeout);
+ sub->walrcvtimeout = TextDatumGetCString(datum);
+
/* Get publications */
datum = SysCacheGetAttrNotNull(SUBSCRIPTIONOID,
tup,
diff --git a/src/backend/commands/subscriptioncmds.c
b/src/backend/commands/subscriptioncmds.c
index 4aec73bcc6b..4800d91fabe 100644
--- a/src/backend/commands/subscriptioncmds.c
+++ b/src/backend/commands/subscriptioncmds.c
@@ -73,6 +73,7 @@
#define SUBOPT_FAILOVER 0x00002000
#define SUBOPT_LSN 0x00004000
#define SUBOPT_ORIGIN 0x00008000
+#define SUBOPT_WAL_RECEIVER_TIMEOUT 0x00010000
/* check if the 'val' has 'bits' set */
#define IsSet(val, bits) (((val) & (bits)) == (bits))
@@ -100,6 +101,7 @@ typedef struct SubOpts
bool failover;
char *origin;
XLogRecPtr lsn;
+ char *wal_receiver_timeout;
} SubOpts;
static List *fetch_table_list(WalReceiverConn *wrconn, List *publications);
@@ -357,6 +359,30 @@ parse_subscription_options(ParseState *pstate, List
*stmt_options,
opts->specified_opts |= SUBOPT_LSN;
opts->lsn = lsn;
}
+ else if (IsSet(supported_opts, SUBOPT_WAL_RECEIVER_TIMEOUT) &&
+ strcmp(defel->defname, "wal_receiver_timeout")
== 0)
+ {
+ bool parsed;
+ int val;
+
+ if (IsSet(opts->specified_opts,
SUBOPT_WAL_RECEIVER_TIMEOUT))
+ errorConflictingDefElem(defel, pstate);
+
+ opts->specified_opts |= SUBOPT_WAL_RECEIVER_TIMEOUT;
+ opts->wal_receiver_timeout = defGetString(defel);
+
+ /*
+ * Test if the given value is valid for
wal_receiver_timeeout GUC.
+ * Skip this test if the value is -1, since -1 is
allowed for the
+ * wal_receiver_timeout subscription option, but not
for the GUC
+ * itself.
+ */
+ parsed = parse_int(opts->wal_receiver_timeout, &val, 0,
NULL);
+ if (!parsed || val != -1)
+ (void)
set_config_option("wal_receiver_timeout", opts->wal_receiver_timeout,
+
PGC_BACKEND, PGC_S_TEST, GUC_ACTION_SET,
+
false, 0, false);
+ }
else
ereport(ERROR,
(errcode(ERRCODE_SYNTAX_ERROR),
@@ -563,7 +589,8 @@ CreateSubscription(ParseState *pstate,
CreateSubscriptionStmt *stmt,
SUBOPT_SYNCHRONOUS_COMMIT |
SUBOPT_BINARY |
SUBOPT_STREAMING |
SUBOPT_TWOPHASE_COMMIT |
SUBOPT_DISABLE_ON_ERR |
SUBOPT_PASSWORD_REQUIRED |
- SUBOPT_RUN_AS_OWNER | SUBOPT_FAILOVER
| SUBOPT_ORIGIN);
+ SUBOPT_RUN_AS_OWNER | SUBOPT_FAILOVER
| SUBOPT_ORIGIN |
+ SUBOPT_WAL_RECEIVER_TIMEOUT);
parse_subscription_options(pstate, stmt->options, supported_opts,
&opts);
/*
@@ -638,6 +665,14 @@ CreateSubscription(ParseState *pstate,
CreateSubscriptionStmt *stmt,
if (opts.synchronous_commit == NULL)
opts.synchronous_commit = "off";
+ /*
+ * The default for wal_receiver_timeout of subscriptions is -1, which
+ * means the value is inherited from the server configuration, command
+ * line, or role/database settings.
+ */
+ if (opts.wal_receiver_timeout == NULL)
+ opts.wal_receiver_timeout = "-1";
+
conninfo = stmt->conninfo;
publications = stmt->publication;
@@ -679,6 +714,8 @@ CreateSubscription(ParseState *pstate,
CreateSubscriptionStmt *stmt,
nulls[Anum_pg_subscription_subslotname - 1] = true;
values[Anum_pg_subscription_subsynccommit - 1] =
CStringGetTextDatum(opts.synchronous_commit);
+ values[Anum_pg_subscription_subwalrcvtimeout - 1] =
+ CStringGetTextDatum(opts.wal_receiver_timeout);
values[Anum_pg_subscription_subpublications - 1] =
publicationListToArray(publications);
values[Anum_pg_subscription_suborigin - 1] =
@@ -1165,7 +1202,7 @@ AlterSubscription(ParseState *pstate,
AlterSubscriptionStmt *stmt,
SUBOPT_DISABLE_ON_ERR |
SUBOPT_PASSWORD_REQUIRED |
SUBOPT_RUN_AS_OWNER | SUBOPT_FAILOVER |
-
SUBOPT_ORIGIN);
+ SUBOPT_ORIGIN
| SUBOPT_WAL_RECEIVER_TIMEOUT);
parse_subscription_options(pstate,
stmt->options,
supported_opts, &opts);
@@ -1332,6 +1369,13 @@ AlterSubscription(ParseState *pstate,
AlterSubscriptionStmt *stmt,
replaces[Anum_pg_subscription_suborigin
- 1] = true;
}
+ if (IsSet(opts.specified_opts,
SUBOPT_WAL_RECEIVER_TIMEOUT))
+ {
+
values[Anum_pg_subscription_subwalrcvtimeout - 1] =
+
CStringGetTextDatum(opts.wal_receiver_timeout);
+
replaces[Anum_pg_subscription_subwalrcvtimeout - 1] = true;
+ }
+
update_tuple = true;
break;
}
diff --git a/src/backend/replication/logical/worker.c
b/src/backend/replication/logical/worker.c
index 4151a4b2a96..5d0e3f82153 100644
--- a/src/backend/replication/logical/worker.c
+++ b/src/backend/replication/logical/worker.c
@@ -414,6 +414,8 @@ static inline void reset_apply_error_context_info(void);
static TransApplyAction get_transaction_apply_action(TransactionId xid,
ParallelApplyWorkerInfo **winfo);
+static void set_wal_receiver_timeout(void);
+
static void replorigin_reset(int code, Datum arg);
/*
@@ -4084,12 +4086,46 @@ maybe_reread_subscription(void)
SetConfigOption("synchronous_commit", MySubscription->synccommit,
PGC_BACKEND, PGC_S_OVERRIDE);
+ /* Change wal_receiver_timeout according to the user's wishes */
+ set_wal_receiver_timeout();
+
if (started_tx)
CommitTransactionCommand();
MySubscriptionValid = true;
}
+/*
+ * Change wal_receiver_timeout to MySubscription->walrcvtimeout.
+ */
+static void
+set_wal_receiver_timeout(void)
+{
+ bool parsed;
+ int val;
+
+ /*
+ * Set the wal_receiver_timeout GUC to MySubscription->walrcvtimeout,
+ * which comes from the subscription's wal_receiver_timeout option. If
the
+ * value is -1, reset the GUC to its default, meaning it will inherit
from
+ * the server config, command line, or role/database settings.
+ */
+ parsed = parse_int(MySubscription->walrcvtimeout, &val, 0, NULL);
+ if (parsed && val == -1)
+ SetConfigOption("wal_receiver_timeout", NULL,
+ PGC_BACKEND, PGC_S_SESSION);
+ else
+ SetConfigOption("wal_receiver_timeout",
MySubscription->walrcvtimeout,
+ PGC_BACKEND, PGC_S_SESSION);
+
+ /*
+ * Log the current wal_receiver_timeout GUC value (in milliseconds) as a
+ * debug message to verify it was set correctly.
+ */
+ elog(DEBUG1, "logical replication worker for subscription \"%s\"
wal_receiver_timeout: %d ms",
+ MySubscription->name, wal_receiver_timeout);
+}
+
/*
* Callback from subscription syscache invalidation.
*/
@@ -4711,6 +4747,9 @@ InitializeLogRepWorker(void)
SetConfigOption("synchronous_commit", MySubscription->synccommit,
PGC_BACKEND, PGC_S_OVERRIDE);
+ /* Change wal_receiver_timeout according to the user's wishes */
+ set_wal_receiver_timeout();
+
/*
* Keep us informed about subscription or role changes. Note that the
* role's superuser privilege can be revoked.
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index 37432e66efd..06a7124f931 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -4955,6 +4955,7 @@ getSubscriptions(Archive *fout)
int i_subconninfo;
int i_subslotname;
int i_subsynccommit;
+ int i_subwalrcvtimeout;
int i_subpublications;
int i_suborigin;
int i_suboriginremotelsn;
@@ -5032,10 +5033,16 @@ getSubscriptions(Archive *fout)
if (fout->remoteVersion >= 170000)
appendPQExpBufferStr(query,
- " s.subfailover\n");
+ " s.subfailover,\n");
else
appendPQExpBufferStr(query,
- " false AS
subfailover\n");
+ " false AS
subfailover,\n");
+
+ /* 180000 should be changed to 190000 */
+ if (fout->remoteVersion >= 180000)
+ appendPQExpBufferStr(query, " s.subwalrcvtimeout\n");
+ else
+ appendPQExpBufferStr(query, " '-1' AS subwalrcvtimeout\n");
appendPQExpBufferStr(query,
"FROM pg_subscription s\n");
@@ -5072,6 +5079,7 @@ getSubscriptions(Archive *fout)
i_subconninfo = PQfnumber(res, "subconninfo");
i_subslotname = PQfnumber(res, "subslotname");
i_subsynccommit = PQfnumber(res, "subsynccommit");
+ i_subwalrcvtimeout = PQfnumber(res, "subwalrcvtimeout");
i_subpublications = PQfnumber(res, "subpublications");
i_suborigin = PQfnumber(res, "suborigin");
i_suboriginremotelsn = PQfnumber(res, "suboriginremotelsn");
@@ -5111,6 +5119,8 @@ getSubscriptions(Archive *fout)
pg_strdup(PQgetvalue(res, i, i_subslotname));
subinfo[i].subsynccommit =
pg_strdup(PQgetvalue(res, i, i_subsynccommit));
+ subinfo[i].subwalrcvtimeout =
+ pg_strdup(PQgetvalue(res, i, i_subwalrcvtimeout));
subinfo[i].subpublications =
pg_strdup(PQgetvalue(res, i, i_subpublications));
subinfo[i].suborigin = pg_strdup(PQgetvalue(res, i,
i_suborigin));
@@ -5363,6 +5373,9 @@ dumpSubscription(Archive *fout, const SubscriptionInfo
*subinfo)
if (strcmp(subinfo->subsynccommit, "off") != 0)
appendPQExpBuffer(query, ", synchronous_commit = %s",
fmtId(subinfo->subsynccommit));
+ if (strcmp(subinfo->subwalrcvtimeout, "-1") != 0)
+ appendPQExpBuffer(query, ", wal_receiver_timeout = %s",
fmtId(subinfo->subwalrcvtimeout));
+
if (pg_strcasecmp(subinfo->suborigin, LOGICALREP_ORIGIN_ANY) != 0)
appendPQExpBuffer(query, ", origin = %s", subinfo->suborigin);
diff --git a/src/bin/pg_dump/pg_dump.h b/src/bin/pg_dump/pg_dump.h
index 7417eab6aef..10b6eac5c78 100644
--- a/src/bin/pg_dump/pg_dump.h
+++ b/src/bin/pg_dump/pg_dump.h
@@ -711,6 +711,7 @@ typedef struct _SubscriptionInfo
char *subconninfo;
char *subslotname;
char *subsynccommit;
+ char *subwalrcvtimeout;
char *subpublications;
char *suborigin;
char *suboriginremotelsn;
diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c
index 1d08268393e..53bebb2a81c 100644
--- a/src/bin/psql/describe.c
+++ b/src/bin/psql/describe.c
@@ -6745,7 +6745,7 @@ describeSubscriptions(const char *pattern, bool verbose)
printQueryOpt myopt = pset.popt;
static const bool translate_columns[] = {false, false, false, false,
false, false, false, false, false, false, false, false, false,
false,
- false};
+ false, false};
if (pset.sversion < 100000)
{
@@ -6820,6 +6820,12 @@ describeSubscriptions(const char *pattern, bool verbose)
gettext_noop("Synchronous
commit"),
gettext_noop("Conninfo"));
+ /* 180000 should be changed to 190000 */
+ if (pset.sversion >= 180000)
+ appendPQExpBuffer(&buf,
+ ", subwalrcvtimeout
AS \"%s\"\n",
+
gettext_noop("Receiver timeout"));
+
/* Skip LSN is only supported in v15 and higher */
if (pset.sversion >= 150000)
appendPQExpBuffer(&buf,
diff --git a/src/include/catalog/pg_subscription.h
b/src/include/catalog/pg_subscription.h
index 20fc329992d..2e0158726e3 100644
--- a/src/include/catalog/pg_subscription.h
+++ b/src/include/catalog/pg_subscription.h
@@ -88,6 +88,9 @@ CATALOG(pg_subscription,6100,SubscriptionRelationId)
BKI_SHARED_RELATION BKI_ROW
/* Synchronous commit setting for worker */
text subsynccommit BKI_FORCE_NOT_NULL;
+ /* wal_receiver_timeout setting for worker */
+ text subwalrcvtimeout BKI_FORCE_NOT_NULL;
+
/* List of publications subscribed to */
text subpublications[1] BKI_FORCE_NOT_NULL;
@@ -134,6 +137,7 @@ typedef struct Subscription
char *conninfo; /* Connection string to the publisher */
char *slotname; /* Name of the replication slot */
char *synccommit; /* Synchronous commit setting for
worker */
+ char *walrcvtimeout; /* wal_receiver_timeout setting for
worker */
List *publications; /* List of publication names to
subscribe to */
char *origin; /* Only publish data
originating from the
* specified
origin */
diff --git a/src/test/regress/expected/subscription.out
b/src/test/regress/expected/subscription.out
index 1443e1d9292..dcc1a25df57 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -116,18 +116,18 @@ CREATE SUBSCRIPTION regress_testsub4 CONNECTION
'dbname=regress_doesnotexist' PU
WARNING: subscription was created, but is not connected
HINT: To initiate replication, you must manually create the replication slot,
enable the subscription, and refresh the subscription.
\dRs+ regress_testsub4
-
List of subscriptions
- Name | Owner | Enabled | Publication | Binary
| Streaming | Two-phase commit | Disable on error | Origin | Password required
| Run as owner? | Failover | Synchronous commit | Conninfo |
Skip LSN
-------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub4 | regress_subscription_user | f | {testpub} | f
| parallel | d | f | none | t
| f | f | off | dbname=regress_doesnotexist |
0/0
+
List of subscriptions
+ Name | Owner | Enabled | Publication | Binary
| Streaming | Two-phase commit | Disable on error | Origin | Password required
| Run as owner? | Failover | Synchronous commit | Conninfo |
Receiver timeout | Skip LSN
+------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------------+----------
+ regress_testsub4 | regress_subscription_user | f | {testpub} | f
| parallel | d | f | none | t
| f | f | off | dbname=regress_doesnotexist |
-1 | 0/0
(1 row)
ALTER SUBSCRIPTION regress_testsub4 SET (origin = any);
\dRs+ regress_testsub4
-
List of subscriptions
- Name | Owner | Enabled | Publication | Binary
| Streaming | Two-phase commit | Disable on error | Origin | Password required
| Run as owner? | Failover | Synchronous commit | Conninfo |
Skip LSN
-------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub4 | regress_subscription_user | f | {testpub} | f
| parallel | d | f | any | t
| f | f | off | dbname=regress_doesnotexist |
0/0
+
List of subscriptions
+ Name | Owner | Enabled | Publication | Binary
| Streaming | Two-phase commit | Disable on error | Origin | Password required
| Run as owner? | Failover | Synchronous commit | Conninfo |
Receiver timeout | Skip LSN
+------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------------+----------
+ regress_testsub4 | regress_subscription_user | f | {testpub} | f
| parallel | d | f | any | t
| f | f | off | dbname=regress_doesnotexist |
-1 | 0/0
(1 row)
DROP SUBSCRIPTION regress_testsub3;
@@ -145,10 +145,10 @@ ALTER SUBSCRIPTION regress_testsub CONNECTION 'foobar';
ERROR: invalid connection string syntax: missing "=" after "foobar" in
connection info string
\dRs+
-
List of subscriptions
- Name | Owner | Enabled | Publication | Binary
| Streaming | Two-phase commit | Disable on error | Origin | Password required
| Run as owner? | Failover | Synchronous commit | Conninfo |
Skip LSN
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f | {testpub} | f
| parallel | d | f | any | t
| f | f | off | dbname=regress_doesnotexist |
0/0
+
List of subscriptions
+ Name | Owner | Enabled | Publication | Binary
| Streaming | Two-phase commit | Disable on error | Origin | Password required
| Run as owner? | Failover | Synchronous commit | Conninfo |
Receiver timeout | Skip LSN
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------------+----------
+ regress_testsub | regress_subscription_user | f | {testpub} | f
| parallel | d | f | any | t
| f | f | off | dbname=regress_doesnotexist |
-1 | 0/0
(1 row)
ALTER SUBSCRIPTION regress_testsub SET PUBLICATION testpub2, testpub3 WITH
(refresh = false);
@@ -157,10 +157,10 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name =
'newname');
ALTER SUBSCRIPTION regress_testsub SET (password_required = false);
ALTER SUBSCRIPTION regress_testsub SET (run_as_owner = true);
\dRs+
-
List of subscriptions
- Name | Owner | Enabled | Publication |
Binary | Streaming | Two-phase commit | Disable on error | Origin | Password
required | Run as owner? | Failover | Synchronous commit | Conninfo
| Skip LSN
------------------+---------------------------+---------+---------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+------------------------------+----------
- regress_testsub | regress_subscription_user | f | {testpub2,testpub3} |
f | parallel | d | f | any | f
| t | f | off |
dbname=regress_doesnotexist2 | 0/0
+
List of subscriptions
+ Name | Owner | Enabled | Publication |
Binary | Streaming | Two-phase commit | Disable on error | Origin | Password
required | Run as owner? | Failover | Synchronous commit | Conninfo
| Receiver timeout | Skip LSN
+-----------------+---------------------------+---------+---------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+------------------------------+------------------+----------
+ regress_testsub | regress_subscription_user | f | {testpub2,testpub3} |
f | parallel | d | f | any | f
| t | f | off |
dbname=regress_doesnotexist2 | -1 | 0/0
(1 row)
ALTER SUBSCRIPTION regress_testsub SET (password_required = true);
@@ -176,10 +176,10 @@ ERROR: unrecognized subscription parameter: "create_slot"
-- ok
ALTER SUBSCRIPTION regress_testsub SKIP (lsn = '0/12345');
\dRs+
-
List of subscriptions
- Name | Owner | Enabled | Publication |
Binary | Streaming | Two-phase commit | Disable on error | Origin | Password
required | Run as owner? | Failover | Synchronous commit | Conninfo
| Skip LSN
------------------+---------------------------+---------+---------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+------------------------------+----------
- regress_testsub | regress_subscription_user | f | {testpub2,testpub3} |
f | parallel | d | f | any | t
| f | f | off |
dbname=regress_doesnotexist2 | 0/12345
+
List of subscriptions
+ Name | Owner | Enabled | Publication |
Binary | Streaming | Two-phase commit | Disable on error | Origin | Password
required | Run as owner? | Failover | Synchronous commit | Conninfo
| Receiver timeout | Skip LSN
+-----------------+---------------------------+---------+---------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+------------------------------+------------------+----------
+ regress_testsub | regress_subscription_user | f | {testpub2,testpub3} |
f | parallel | d | f | any | t
| f | f | off |
dbname=regress_doesnotexist2 | -1 | 0/12345
(1 row)
-- ok - with lsn = NONE
@@ -188,10 +188,10 @@ ALTER SUBSCRIPTION regress_testsub SKIP (lsn = NONE);
ALTER SUBSCRIPTION regress_testsub SKIP (lsn = '0/0');
ERROR: invalid WAL location (LSN): 0/0
\dRs+
-
List of subscriptions
- Name | Owner | Enabled | Publication |
Binary | Streaming | Two-phase commit | Disable on error | Origin | Password
required | Run as owner? | Failover | Synchronous commit | Conninfo
| Skip LSN
------------------+---------------------------+---------+---------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+------------------------------+----------
- regress_testsub | regress_subscription_user | f | {testpub2,testpub3} |
f | parallel | d | f | any | t
| f | f | off |
dbname=regress_doesnotexist2 | 0/0
+
List of subscriptions
+ Name | Owner | Enabled | Publication |
Binary | Streaming | Two-phase commit | Disable on error | Origin | Password
required | Run as owner? | Failover | Synchronous commit | Conninfo
| Receiver timeout | Skip LSN
+-----------------+---------------------------+---------+---------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+------------------------------+------------------+----------
+ regress_testsub | regress_subscription_user | f | {testpub2,testpub3} |
f | parallel | d | f | any | t
| f | f | off |
dbname=regress_doesnotexist2 | -1 | 0/0
(1 row)
BEGIN;
@@ -222,11 +222,15 @@ ALTER SUBSCRIPTION regress_testsub_foo SET
(synchronous_commit = local);
ALTER SUBSCRIPTION regress_testsub_foo SET (synchronous_commit = foobar);
ERROR: invalid value for parameter "synchronous_commit": "foobar"
HINT: Available values: local, remote_write, remote_apply, on, off.
+ALTER SUBSCRIPTION regress_testsub_foo SET (wal_receiver_timeout = '-1');
+ALTER SUBSCRIPTION regress_testsub_foo SET (wal_receiver_timeout = '80s');
+ALTER SUBSCRIPTION regress_testsub_foo SET (wal_receiver_timeout = 'foobar');
+ERROR: invalid value for parameter "wal_receiver_timeout": "foobar"
\dRs+
-
List of subscriptions
- Name | Owner | Enabled | Publication
| Binary | Streaming | Two-phase commit | Disable on error | Origin |
Password required | Run as owner? | Failover | Synchronous commit |
Conninfo | Skip LSN
----------------------+---------------------------+---------+---------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+------------------------------+----------
- regress_testsub_foo | regress_subscription_user | f |
{testpub2,testpub3} | f | parallel | d | f
| any | t | f | f | local |
dbname=regress_doesnotexist2 | 0/0
+
List of subscriptions
+ Name | Owner | Enabled | Publication
| Binary | Streaming | Two-phase commit | Disable on error | Origin |
Password required | Run as owner? | Failover | Synchronous commit |
Conninfo | Receiver timeout | Skip LSN
+---------------------+---------------------------+---------+---------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+------------------------------+------------------+----------
+ regress_testsub_foo | regress_subscription_user | f |
{testpub2,testpub3} | f | parallel | d | f
| any | t | f | f | local |
dbname=regress_doesnotexist2 | 80s | 0/0
(1 row)
-- rename back to keep the rest simple
@@ -255,19 +259,19 @@ CREATE SUBSCRIPTION regress_testsub CONNECTION
'dbname=regress_doesnotexist' PUB
WARNING: subscription was created, but is not connected
HINT: To initiate replication, you must manually create the replication slot,
enable the subscription, and refresh the subscription.
\dRs+
-
List of subscriptions
- Name | Owner | Enabled | Publication | Binary
| Streaming | Two-phase commit | Disable on error | Origin | Password required
| Run as owner? | Failover | Synchronous commit | Conninfo |
Skip LSN
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f | {testpub} | t
| parallel | d | f | any | t
| f | f | off | dbname=regress_doesnotexist |
0/0
+
List of subscriptions
+ Name | Owner | Enabled | Publication | Binary
| Streaming | Two-phase commit | Disable on error | Origin | Password required
| Run as owner? | Failover | Synchronous commit | Conninfo |
Receiver timeout | Skip LSN
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------------+----------
+ regress_testsub | regress_subscription_user | f | {testpub} | t
| parallel | d | f | any | t
| f | f | off | dbname=regress_doesnotexist |
-1 | 0/0
(1 row)
ALTER SUBSCRIPTION regress_testsub SET (binary = false);
ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
\dRs+
-
List of subscriptions
- Name | Owner | Enabled | Publication | Binary
| Streaming | Two-phase commit | Disable on error | Origin | Password required
| Run as owner? | Failover | Synchronous commit | Conninfo |
Skip LSN
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f | {testpub} | f
| parallel | d | f | any | t
| f | f | off | dbname=regress_doesnotexist |
0/0
+
List of subscriptions
+ Name | Owner | Enabled | Publication | Binary
| Streaming | Two-phase commit | Disable on error | Origin | Password required
| Run as owner? | Failover | Synchronous commit | Conninfo |
Receiver timeout | Skip LSN
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------------+----------
+ regress_testsub | regress_subscription_user | f | {testpub} | f
| parallel | d | f | any | t
| f | f | off | dbname=regress_doesnotexist |
-1 | 0/0
(1 row)
DROP SUBSCRIPTION regress_testsub;
@@ -279,27 +283,27 @@ CREATE SUBSCRIPTION regress_testsub CONNECTION
'dbname=regress_doesnotexist' PUB
WARNING: subscription was created, but is not connected
HINT: To initiate replication, you must manually create the replication slot,
enable the subscription, and refresh the subscription.
\dRs+
-
List of subscriptions
- Name | Owner | Enabled | Publication | Binary
| Streaming | Two-phase commit | Disable on error | Origin | Password required
| Run as owner? | Failover | Synchronous commit | Conninfo |
Skip LSN
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f | {testpub} | f
| on | d | f | any | t
| f | f | off | dbname=regress_doesnotexist |
0/0
+
List of subscriptions
+ Name | Owner | Enabled | Publication | Binary
| Streaming | Two-phase commit | Disable on error | Origin | Password required
| Run as owner? | Failover | Synchronous commit | Conninfo |
Receiver timeout | Skip LSN
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------------+----------
+ regress_testsub | regress_subscription_user | f | {testpub} | f
| on | d | f | any | t
| f | f | off | dbname=regress_doesnotexist |
-1 | 0/0
(1 row)
ALTER SUBSCRIPTION regress_testsub SET (streaming = parallel);
\dRs+
-
List of subscriptions
- Name | Owner | Enabled | Publication | Binary
| Streaming | Two-phase commit | Disable on error | Origin | Password required
| Run as owner? | Failover | Synchronous commit | Conninfo |
Skip LSN
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f | {testpub} | f
| parallel | d | f | any | t
| f | f | off | dbname=regress_doesnotexist |
0/0
+
List of subscriptions
+ Name | Owner | Enabled | Publication | Binary
| Streaming | Two-phase commit | Disable on error | Origin | Password required
| Run as owner? | Failover | Synchronous commit | Conninfo |
Receiver timeout | Skip LSN
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------------+----------
+ regress_testsub | regress_subscription_user | f | {testpub} | f
| parallel | d | f | any | t
| f | f | off | dbname=regress_doesnotexist |
-1 | 0/0
(1 row)
ALTER SUBSCRIPTION regress_testsub SET (streaming = false);
ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
\dRs+
-
List of subscriptions
- Name | Owner | Enabled | Publication | Binary
| Streaming | Two-phase commit | Disable on error | Origin | Password required
| Run as owner? | Failover | Synchronous commit | Conninfo |
Skip LSN
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f | {testpub} | f
| off | d | f | any | t
| f | f | off | dbname=regress_doesnotexist |
0/0
+
List of subscriptions
+ Name | Owner | Enabled | Publication | Binary
| Streaming | Two-phase commit | Disable on error | Origin | Password required
| Run as owner? | Failover | Synchronous commit | Conninfo |
Receiver timeout | Skip LSN
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------------+----------
+ regress_testsub | regress_subscription_user | f | {testpub} | f
| off | d | f | any | t
| f | f | off | dbname=regress_doesnotexist |
-1 | 0/0
(1 row)
-- fail - publication already exists
@@ -314,10 +318,10 @@ ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION
testpub1, testpub2 WITH (refr
ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH
(refresh = false);
ERROR: publication "testpub1" is already in subscription "regress_testsub"
\dRs+
-
List of subscriptions
- Name | Owner | Enabled | Publication
| Binary | Streaming | Two-phase commit | Disable on error | Origin |
Password required | Run as owner? | Failover | Synchronous commit |
Conninfo | Skip LSN
------------------+---------------------------+---------+-----------------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f |
{testpub,testpub1,testpub2} | f | off | d | f
| any | t | f | f | off
| dbname=regress_doesnotexist | 0/0
+
List of subscriptions
+ Name | Owner | Enabled | Publication
| Binary | Streaming | Two-phase commit | Disable on error | Origin |
Password required | Run as owner? | Failover | Synchronous commit |
Conninfo | Receiver timeout | Skip LSN
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------------+----------
+ regress_testsub | regress_subscription_user | f |
{testpub,testpub1,testpub2} | f | off | d | f
| any | t | f | f | off
| dbname=regress_doesnotexist | -1 | 0/0
(1 row)
-- fail - publication used more than once
@@ -332,10 +336,10 @@ ERROR: publication "testpub3" is not in subscription
"regress_testsub"
-- ok - delete publications
ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH
(refresh = false);
\dRs+
-
List of subscriptions
- Name | Owner | Enabled | Publication | Binary
| Streaming | Two-phase commit | Disable on error | Origin | Password required
| Run as owner? | Failover | Synchronous commit | Conninfo |
Skip LSN
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f | {testpub} | f
| off | d | f | any | t
| f | f | off | dbname=regress_doesnotexist |
0/0
+
List of subscriptions
+ Name | Owner | Enabled | Publication | Binary
| Streaming | Two-phase commit | Disable on error | Origin | Password required
| Run as owner? | Failover | Synchronous commit | Conninfo |
Receiver timeout | Skip LSN
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------------+----------
+ regress_testsub | regress_subscription_user | f | {testpub} | f
| off | d | f | any | t
| f | f | off | dbname=regress_doesnotexist |
-1 | 0/0
(1 row)
DROP SUBSCRIPTION regress_testsub;
@@ -371,19 +375,19 @@ CREATE SUBSCRIPTION regress_testsub CONNECTION
'dbname=regress_doesnotexist' PUB
WARNING: subscription was created, but is not connected
HINT: To initiate replication, you must manually create the replication slot,
enable the subscription, and refresh the subscription.
\dRs+
-
List of subscriptions
- Name | Owner | Enabled | Publication | Binary
| Streaming | Two-phase commit | Disable on error | Origin | Password required
| Run as owner? | Failover | Synchronous commit | Conninfo |
Skip LSN
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f | {testpub} | f
| parallel | p | f | any | t
| f | f | off | dbname=regress_doesnotexist |
0/0
+
List of subscriptions
+ Name | Owner | Enabled | Publication | Binary
| Streaming | Two-phase commit | Disable on error | Origin | Password required
| Run as owner? | Failover | Synchronous commit | Conninfo |
Receiver timeout | Skip LSN
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------------+----------
+ regress_testsub | regress_subscription_user | f | {testpub} | f
| parallel | p | f | any | t
| f | f | off | dbname=regress_doesnotexist |
-1 | 0/0
(1 row)
-- we can alter streaming when two_phase enabled
ALTER SUBSCRIPTION regress_testsub SET (streaming = true);
\dRs+
-
List of subscriptions
- Name | Owner | Enabled | Publication | Binary
| Streaming | Two-phase commit | Disable on error | Origin | Password required
| Run as owner? | Failover | Synchronous commit | Conninfo |
Skip LSN
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f | {testpub} | f
| on | p | f | any | t
| f | f | off | dbname=regress_doesnotexist |
0/0
+
List of subscriptions
+ Name | Owner | Enabled | Publication | Binary
| Streaming | Two-phase commit | Disable on error | Origin | Password required
| Run as owner? | Failover | Synchronous commit | Conninfo |
Receiver timeout | Skip LSN
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------------+----------
+ regress_testsub | regress_subscription_user | f | {testpub} | f
| on | p | f | any | t
| f | f | off | dbname=regress_doesnotexist |
-1 | 0/0
(1 row)
ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
@@ -393,10 +397,10 @@ CREATE SUBSCRIPTION regress_testsub CONNECTION
'dbname=regress_doesnotexist' PUB
WARNING: subscription was created, but is not connected
HINT: To initiate replication, you must manually create the replication slot,
enable the subscription, and refresh the subscription.
\dRs+
-
List of subscriptions
- Name | Owner | Enabled | Publication | Binary
| Streaming | Two-phase commit | Disable on error | Origin | Password required
| Run as owner? | Failover | Synchronous commit | Conninfo |
Skip LSN
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f | {testpub} | f
| on | p | f | any | t
| f | f | off | dbname=regress_doesnotexist |
0/0
+
List of subscriptions
+ Name | Owner | Enabled | Publication | Binary
| Streaming | Two-phase commit | Disable on error | Origin | Password required
| Run as owner? | Failover | Synchronous commit | Conninfo |
Receiver timeout | Skip LSN
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------------+----------
+ regress_testsub | regress_subscription_user | f | {testpub} | f
| on | p | f | any | t
| f | f | off | dbname=regress_doesnotexist |
-1 | 0/0
(1 row)
ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
@@ -409,18 +413,18 @@ CREATE SUBSCRIPTION regress_testsub CONNECTION
'dbname=regress_doesnotexist' PUB
WARNING: subscription was created, but is not connected
HINT: To initiate replication, you must manually create the replication slot,
enable the subscription, and refresh the subscription.
\dRs+
-
List of subscriptions
- Name | Owner | Enabled | Publication | Binary
| Streaming | Two-phase commit | Disable on error | Origin | Password required
| Run as owner? | Failover | Synchronous commit | Conninfo |
Skip LSN
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f | {testpub} | f
| parallel | d | f | any | t
| f | f | off | dbname=regress_doesnotexist |
0/0
+
List of subscriptions
+ Name | Owner | Enabled | Publication | Binary
| Streaming | Two-phase commit | Disable on error | Origin | Password required
| Run as owner? | Failover | Synchronous commit | Conninfo |
Receiver timeout | Skip LSN
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------------+----------
+ regress_testsub | regress_subscription_user | f | {testpub} | f
| parallel | d | f | any | t
| f | f | off | dbname=regress_doesnotexist |
-1 | 0/0
(1 row)
ALTER SUBSCRIPTION regress_testsub SET (disable_on_error = true);
\dRs+
-
List of subscriptions
- Name | Owner | Enabled | Publication | Binary
| Streaming | Two-phase commit | Disable on error | Origin | Password required
| Run as owner? | Failover | Synchronous commit | Conninfo |
Skip LSN
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f | {testpub} | f
| parallel | d | t | any | t
| f | f | off | dbname=regress_doesnotexist |
0/0
+
List of subscriptions
+ Name | Owner | Enabled | Publication | Binary
| Streaming | Two-phase commit | Disable on error | Origin | Password required
| Run as owner? | Failover | Synchronous commit | Conninfo |
Receiver timeout | Skip LSN
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------------+----------
+ regress_testsub | regress_subscription_user | f | {testpub} | f
| parallel | d | t | any | t
| f | f | off | dbname=regress_doesnotexist |
-1 | 0/0
(1 row)
ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
diff --git a/src/test/regress/sql/subscription.sql
b/src/test/regress/sql/subscription.sql
index 007c9e70374..534574e43c1 100644
--- a/src/test/regress/sql/subscription.sql
+++ b/src/test/regress/sql/subscription.sql
@@ -139,6 +139,9 @@ RESET ROLE;
ALTER SUBSCRIPTION regress_testsub RENAME TO regress_testsub_foo;
ALTER SUBSCRIPTION regress_testsub_foo SET (synchronous_commit = local);
ALTER SUBSCRIPTION regress_testsub_foo SET (synchronous_commit = foobar);
+ALTER SUBSCRIPTION regress_testsub_foo SET (wal_receiver_timeout = '-1');
+ALTER SUBSCRIPTION regress_testsub_foo SET (wal_receiver_timeout = '80s');
+ALTER SUBSCRIPTION regress_testsub_foo SET (wal_receiver_timeout = 'foobar');
\dRs+
--
2.49.0