On Wed, Mar 19, 2025 at 2:55 PM Shubham Khanna wrote:
>
> I have merged the changes and prepared the latest patch. The attached
> patch contains the suggested changes.
Thanks for updating the patch. Here are few comments:
1.
pg_log_error("object type \"%s\" is
specified more than once for --remove", optarg);
exit(1);
Consider using pg_fatal for simplicity.
2.
+ /* Fetch all publication names */
+ res = PQexec(conn, "SELECT pubname FROM
pg_catalog.pg_publication;");
+ if (PQresultStatus(res) != PGRES_TUPLES_OK)
+ {
+ pg_log_error("could not obtain publication information:
%s",
+ PQresultErrorMessage(res));
+ PQclear(res);
+ disconnect_database(conn, false);
+ return;
+ }
I think we should exit here for consistency, as performed in similar cases.
3.
+ pg_log_info("dropped all publications in database \"%s\"",
dbinfo->dbname);
This message may be misleading if some publications were not dropped
successfully, as drop_publication does not exit on a drop failure.
4.
if (opt.remove_objects.head != NULL)
{
for (SimpleStringListCell *cell = opt.remove_objects.head;
cell; cell = cell->next)
{
I think the first null test is redundant.
I have attached a patch with the proposed changes. If you agree with these
modifications, please merge them.
Best Regards,
Hou zj
From ca4a2950ceb62709e5642eb2dbf05b08f4d2220d Mon Sep 17 00:00:00 2001
From: Hou Zhijie <[email protected]>
Date: Wed, 19 Mar 2025 15:10:26 +0800
Subject: [PATCH] Some fixes
---
src/bin/pg_basebackup/pg_createsubscriber.c | 26 +++++++--------------
1 file changed, 9 insertions(+), 17 deletions(-)
diff --git a/src/bin/pg_basebackup/pg_createsubscriber.c
b/src/bin/pg_basebackup/pg_createsubscriber.c
index d0e637d041f..1d31a7ebae2 100644
--- a/src/bin/pg_basebackup/pg_createsubscriber.c
+++ b/src/bin/pg_basebackup/pg_createsubscriber.c
@@ -1742,8 +1742,7 @@ check_and_drop_publications(PGconn *conn, struct
LogicalRepInfo *dbinfo)
pg_log_error("could not obtain publication information:
%s",
PQresultErrorMessage(res));
PQclear(res);
- disconnect_database(conn, false);
- return;
+ disconnect_database(conn, true);
}
/* Drop each publication */
@@ -1752,7 +1751,6 @@ check_and_drop_publications(PGconn *conn, struct
LogicalRepInfo *dbinfo)
&dbinfo->made_publication);
PQclear(res);
- pg_log_info("dropped all publications in database \"%s\"",
dbinfo->dbname);
}
else
drop_publication(conn, dbinfo->pubname, dbinfo->dbname,
@@ -2081,10 +2079,7 @@ main(int argc, char **argv)
if
(!simple_string_list_member(&opt.objecttypes_to_remove, optarg))
simple_string_list_append(&opt.objecttypes_to_remove, optarg);
else
- {
- pg_log_error("object type \"%s\" is
specified more than once for --remove", optarg);
- exit(1);
- }
+ pg_fatal("object type \"%s\" is
specified more than once for --remove", optarg);
break;
case 's':
opt.socket_dir = pg_strdup(optarg);
@@ -2251,18 +2246,15 @@ main(int argc, char **argv)
}
/* Verify the object types specified for removal from the subscriber */
- if (opt.objecttypes_to_remove.head != NULL)
+ for (SimpleStringListCell *cell = opt.objecttypes_to_remove.head; cell;
cell = cell->next)
{
- for (SimpleStringListCell *cell =
opt.objecttypes_to_remove.head; cell; cell = cell->next)
+ if (pg_strcasecmp(cell->val, "publications") == 0)
+ dbinfos.objecttypes_to_remove |=
OBJECTTYPE_PUBLICATIONS;
+ else
{
- if (pg_strcasecmp(cell->val, "publications") == 0)
- dbinfos.objecttypes_to_remove |=
OBJECTTYPE_PUBLICATIONS;
- else
- {
- pg_log_error("invalid object type \"%s\"
specified for --remove", cell->val);
- pg_log_error_hint("The valid option is:
\"publications\"");
- exit(1);
- }
+ pg_log_error("invalid object type \"%s\" specified for
--remove", cell->val);
+ pg_log_error_hint("The valid option is:
\"publications\"");
+ exit(1);
}
}
--
2.30.0.windows.2