Re: Add support for specifying tables in pg_createsubscriber.

From: Peter Smith <smithpb2250(at)gmail(dot)com>
To: Shubham Khanna <khannashubham1197(at)gmail(dot)com>
Cc: "Zhijie Hou (Fujitsu)" <houzj(dot)fnst(at)fujitsu(dot)com>, vignesh C <vignesh21(at)gmail(dot)com>, "Hayato Kuroda (Fujitsu)" <kuroda(dot)hayato(at)fujitsu(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: Add support for specifying tables in pg_createsubscriber.
Date: 2025-09-15 00:30:56
Message-ID: CAHut+PuJ21hY8LMsjQ0Gr9OLbg5KoK00799+JAcDyQr+s8O1uw@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi Shubham,

IIUC the v6 will be rewritten to remove the new option, in favour of
just redefining the --publication option behaviour.

So, much of the current v6 will become obsolete. The below comment is
just for one piece of code that I thought will survive the rewrite.

======
src/bin/pg_basebackup/pg_createsubscriber.c

setup_publisher:

1.
+ /*
+ * Check if publication already exists when
+ * --reuse-existing-publications is specified
+ */
+ if (opt->reuse_existing_pubs && check_publication_exists(conn,
dbinfo[i].pubname, dbinfo[i].dbname))
+ {
+ pg_log_info("using existing publication \"%s\" in database \"%s\"",
+ dbinfo[i].pubname, dbinfo[i].dbname);
+ make_pub = false;
+ }
+
/*
* Create publication on publisher. This step should be executed
* *before* promoting the subscriber to avoid any transactions between
* consistent LSN and the new publication rows (such transactions
* wouldn't see the new publication rows resulting in an error).
*/
- create_publication(conn, &dbinfo[i]);
+ if (make_pub)
+ {
+ create_publication(conn, &dbinfo[i]);
+ dbinfo[i].made_publication = true;
+ if (opt->reuse_existing_pubs)
+ pg_log_info("created publication \"%s\" in database \"%s\"",
+ dbinfo[i].pubname, dbinfo[i].dbname);
+ }
+ else
+ dbinfo[i].made_publication = false;

I think there are still too many if/else here. This logic can be
simplified like below:

if (check_publication_exists(...))
{
pg_log_info("using existing publication...");
dbinfo[i].made_publication = false;
}
else
{
create_publication(conn, &dbinfo[i]);
pg_log_info("created publication ...");
dbinfo[i].made_publication = true;
}

======
Kind Regards,
Peter Smith
Fujitsu Australia

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Chao Li 2025-09-15 01:49:22 Re: Fix missing EvalPlanQual recheck for TID scans
Previous Message Chao Li 2025-09-15 00:18:52 Re: remove unnecessary include in src/backend/commands/policy.c