v1-0001-pg_createsubscriber-allow-duplicate-publication-n.patch
application/octet-stream
Filename: v1-0001-pg_createsubscriber-allow-duplicate-publication-n.patch
Type: application/octet-stream
Part: 0
Patch
Format: format-patch
Series: patch v1-0001
Subject: pg_createsubscriber: allow duplicate publication names
| File | + | − |
|---|---|---|
| src/bin/pg_basebackup/pg_createsubscriber.c | 2 | 7 |
| src/bin/pg_basebackup/t/040_pg_createsubscriber.pl | 4 | 15 |
From c9a8b2c3f871f7c06ab13eea9a009a6fbea0973a Mon Sep 17 00:00:00 2001
From: "Chao Li (Evan)" <lic@highgo.com>
Date: Mon, 1 Jun 2026 20:52:35 +0800
Subject: [PATCH v1] pg_createsubscriber: allow duplicate publication names
Publication names are scoped to individual databases, so the same name can
validly be used for multiple databases. However, pg_createsubscriber rejected
duplicate --publication values while parsing command-line options.
Allow duplicate publication names while continuing to require one publication
name per specified database. Adjust the TAP test to exercise the same
publication name for two databases.
Author: Chao Li <lic@highgo.com>
---
src/bin/pg_basebackup/pg_createsubscriber.c | 9 ++-------
.../t/040_pg_createsubscriber.pl | 19 ++++---------------
2 files changed, 6 insertions(+), 22 deletions(-)
diff --git a/src/bin/pg_basebackup/pg_createsubscriber.c b/src/bin/pg_basebackup/pg_createsubscriber.c
index cb16a608002..4d705778454 100644
--- a/src/bin/pg_basebackup/pg_createsubscriber.c
+++ b/src/bin/pg_basebackup/pg_createsubscriber.c
@@ -2381,13 +2381,8 @@ main(int argc, char **argv)
opt.config_file = pg_strdup(optarg);
break;
case 2:
- if (!simple_string_list_member(&opt.pub_names, optarg))
- {
- simple_string_list_append(&opt.pub_names, optarg);
- num_pubs++;
- }
- else
- pg_fatal("publication \"%s\" specified more than once for --publication", optarg);
+ simple_string_list_append(&opt.pub_names, optarg);
+ num_pubs++;
break;
case 3:
if (!simple_string_list_member(&opt.replslot_names, optarg))
diff --git a/src/bin/pg_basebackup/t/040_pg_createsubscriber.pl b/src/bin/pg_basebackup/t/040_pg_createsubscriber.pl
index 858082c70df..9252d1c3c5c 100644
--- a/src/bin/pg_basebackup/t/040_pg_createsubscriber.pl
+++ b/src/bin/pg_basebackup/t/040_pg_createsubscriber.pl
@@ -67,18 +67,6 @@ command_fails(
'--database' => 'pg1',
],
'duplicate database name');
-command_fails(
- [
- 'pg_createsubscriber',
- '--verbose',
- '--pgdata' => $datadir,
- '--publisher-server' => 'port=5432',
- '--publication' => 'foo1',
- '--publication' => 'foo1',
- '--database' => 'pg1',
- '--database' => 'pg2',
- ],
- 'duplicate publication name');
command_fails(
[
'pg_createsubscriber',
@@ -346,7 +334,8 @@ is($node_s->safe_psql($db1, "SELECT COUNT(*) FROM pg_publication"),
$node_s->stop;
-# dry run mode on node S
+# dry run mode on node S. Use the same publication name for different
+# databases, since publication names are database-local.
command_ok(
[
'pg_createsubscriber',
@@ -357,8 +346,8 @@ command_ok(
'--publisher-server' => $node_p->connstr($db1),
'--socketdir' => $node_s->host,
'--subscriber-port' => $node_s->port,
- '--publication' => 'pub1',
- '--publication' => 'pub2',
+ '--publication' => 'same_pub',
+ '--publication' => 'same_pub',
'--subscription' => 'sub1',
'--subscription' => 'sub2',
'--database' => $db1,
--
2.50.1 (Apple Git-155)