v24-0014-address-comments-from-Vignesh-1.patch
application/octet-stream
Filename: v24-0014-address-comments-from-Vignesh-1.patch
Type: application/octet-stream
Part: 13
Message:
RE: speed up a logical replica setup
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch v24-0014
Subject: address comments from Vignesh #1
| File | + | − |
|---|---|---|
| doc/src/sgml/ref/pg_createsubscriber.sgml | 7 | 0 |
| src/bin/pg_basebackup/pg_createsubscriber.c | 16 | 1 |
From 6dfad1816c9aaf213b3239490802227beff0d4cc Mon Sep 17 00:00:00 2001
From: Hayato Kuroda <kuroda.hayato@fujitsu.com>
Date: Thu, 22 Feb 2024 10:00:02 +0000
Subject: [PATCH v24 14/18] address comments from Vignesh #1
---
doc/src/sgml/ref/pg_createsubscriber.sgml | 7 +++++++
src/bin/pg_basebackup/pg_createsubscriber.c | 17 ++++++++++++++++-
2 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/doc/src/sgml/ref/pg_createsubscriber.sgml b/doc/src/sgml/ref/pg_createsubscriber.sgml
index 579e50a0a0..4579495089 100644
--- a/doc/src/sgml/ref/pg_createsubscriber.sgml
+++ b/doc/src/sgml/ref/pg_createsubscriber.sgml
@@ -135,6 +135,13 @@ PostgreSQL documentation
would be removed from a primary instance.
</para>
+ <para>
+ Executing DDL commands while running <application>pg_createsubscriber</application>
+ is not recommended. Because if the physical standby has already been
+ converted to the subscriber, it would not be replicated, so an error
+ would occur.
+ </para>
+
<para>
The <application>pg_createsubscriber</application> focuses on large-scale
systems that contain more data than 1GB. For smaller systems, initial data
diff --git a/src/bin/pg_basebackup/pg_createsubscriber.c b/src/bin/pg_basebackup/pg_createsubscriber.c
index 4a28dfb81c..a51943106a 100644
--- a/src/bin/pg_basebackup/pg_createsubscriber.c
+++ b/src/bin/pg_basebackup/pg_createsubscriber.c
@@ -1226,9 +1226,13 @@ wait_for_end_recovery(const char *conninfo, const char *pg_ctl_path,
if (conn == NULL)
exit(1);
+#define NUM_ACCEPTABLE_DISCONNECTION 15
+
for (;;)
{
bool in_recovery;
+ PGresult *res;
+ int count = 0;
in_recovery = server_is_in_recovery(conn);
@@ -1243,6 +1247,16 @@ wait_for_end_recovery(const char *conninfo, const char *pg_ctl_path,
break;
}
+ res = PQexec(conn,
+ "SELECT count(1) FROM pg_catalog.pg_stat_wal_receiver;");
+
+ if (atoi(PQgetvalue(res, 0, 0)) == 0 &&
+ count++ > NUM_ACCEPTABLE_DISCONNECTION)
+ {
+ stop_standby_server(pg_ctl_path, opt->subscriber_dir);
+ pg_fatal("standby disconnected from the primary");
+ }
+
/* Bail out after recovery_timeout seconds if this option is set */
if (opt->recovery_timeout > 0 && timer >= opt->recovery_timeout)
{
@@ -1251,6 +1265,7 @@ wait_for_end_recovery(const char *conninfo, const char *pg_ctl_path,
}
/* Keep waiting */
+ PQclear(res);
pg_usleep(WAIT_INTERVAL * USEC_PER_SEC);
timer += WAIT_INTERVAL;
@@ -1342,7 +1357,7 @@ drop_publication(PGconn *conn, LogicalRepInfo *dbinfo)
pg_log_info("dropping publication \"%s\" on database \"%s\"",
dbinfo->pubname, dbinfo->dbname);
- appendPQExpBuffer(str, "DROP PUBLICATION %s", dbinfo->pubname);
+ appendPQExpBuffer(str, "DROP PUBLICATION IF EXISTS %s", dbinfo->pubname);
pg_log_debug("command is: %s", str->data);
--
2.43.0