summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFujii Masao <fujii@postgresql.org>2025-09-16 10:38:09 +0900
committerFujii Masao <fujii@postgresql.org>2025-09-16 10:38:09 +0900
commitc8ed1605056435bd617d661c87d02d64d8dde3ba (patch)
treeb5a5308aa55b010317e08efabc4580308e4a8bab
parent4529861cc40886ec57de185fa0fa55f2a0c08c25 (diff)
pg_restore: Fix comment handling with --no-publications / --no-subscriptions.
Previously, pg_restore did not skip comments on publications or subscriptions even when --no-publications or --no-subscriptions was specified. As a result, it could issue COMMENT commands for objects that were never created, causing those commands to fail. This commit fixes the issue by ensuring that comments on publications and subscriptions are also skipped when the corresponding options are used. Backpatch to all supported versions. Author: Jian He <jian.universality@gmail.com> Co-authored-by: Fujii Masao <masao.fujii@gmail.com> Discussion: https://postgr.es/m/CACJufxHCt00pR9h51AVu6+yPD5J7JQn=7dQXxqacj0XyDhc-fA@mail.gmail.com Backpatch-through: 13
-rw-r--r--src/bin/pg_dump/pg_backup_archiver.c14
-rw-r--r--src/bin/pg_dump/t/002_pg_dump.pl37
2 files changed, 51 insertions, 0 deletions
diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c
index b81788f72cb..61beeea77cb 100644
--- a/src/bin/pg_dump/pg_backup_archiver.c
+++ b/src/bin/pg_dump/pg_backup_archiver.c
@@ -2876,6 +2876,20 @@ _tocEntryRequired(TocEntry *te, teSection curSection, ArchiveHandle *AH)
return 0;
/*
+ * If it's a comment on a publication or a subscription, maybe ignore it.
+ */
+ if (strcmp(te->desc, "COMMENT") == 0)
+ {
+ if (ropt->no_publications &&
+ strncmp(te->tag, "PUBLICATION", strlen("PUBLICATION")) == 0)
+ return 0;
+
+ if (ropt->no_subscriptions &&
+ strncmp(te->tag, "SUBSCRIPTION", strlen("SUBSCRIPTION")) == 0)
+ return 0;
+ }
+
+ /*
* If it's a publication or a table part of a publication, maybe ignore
* it.
*/
diff --git a/src/bin/pg_dump/t/002_pg_dump.pl b/src/bin/pg_dump/t/002_pg_dump.pl
index 70d2922db3d..bef145c3382 100644
--- a/src/bin/pg_dump/t/002_pg_dump.pl
+++ b/src/bin/pg_dump/t/002_pg_dump.pl
@@ -336,6 +336,29 @@ my %pgdump_runs = (
'postgres',
],
},
+ no_subscriptions => {
+ dump_cmd => [
+ 'pg_dump', '--no-sync',
+ '--file' => "$tempdir/no_subscriptions.sql",
+ '--no-subscriptions',
+ 'postgres',
+ ],
+ },
+ no_subscriptions_restore => {
+ dump_cmd => [
+ 'pg_dump', '--no-sync',
+ '--format' => 'custom',
+ '--file' => "$tempdir/no_subscriptions_restore.dump",
+ 'postgres',
+ ],
+ restore_cmd => [
+ 'pg_restore',
+ '--format' => 'custom',
+ '--file' => "$tempdir/no_subscriptions_restore.sql",
+ '--no-subscriptions',
+ "$tempdir/no_subscriptions_restore.dump",
+ ],
+ },
no_table_access_method => {
dump_cmd => [
'pg_dump', '--no-sync',
@@ -496,6 +519,8 @@ my %full_runs = (
no_blobs => 1,
no_owner => 1,
no_privs => 1,
+ no_subscriptions => 1,
+ no_subscriptions_restore => 1,
no_table_access_method => 1,
pg_dumpall_dbprivs => 1,
pg_dumpall_exclude => 1,
@@ -1245,6 +1270,10 @@ my %tests = (
regexp =>
qr/^COMMENT ON SUBSCRIPTION sub1 IS 'comment on subscription';/m,
like => { %full_runs, section_post_data => 1, },
+ unlike => {
+ no_subscriptions => 1,
+ no_subscriptions_restore => 1,
+ },
},
'COMMENT ON TEXT SEARCH CONFIGURATION dump_test.alt_ts_conf1' => {
@@ -2557,6 +2586,10 @@ my %tests = (
\QCREATE SUBSCRIPTION sub1 CONNECTION 'dbname=doesnotexist' PUBLICATION pub1 WITH (connect = false, slot_name = 'sub1');\E
/xm,
like => { %full_runs, section_post_data => 1, },
+ unlike => {
+ no_subscriptions => 1,
+ no_subscriptions_restore => 1,
+ },
},
'ALTER PUBLICATION pub1 ADD TABLE test_table' => {
@@ -3251,6 +3284,8 @@ my %tests = (
no_blobs => 1,
no_privs => 1,
no_owner => 1,
+ no_subscriptions => 1,
+ no_subscriptions_restore => 1,
no_table_access_method => 1,
only_dump_test_schema => 1,
pg_dumpall_dbprivs => 1,
@@ -3324,6 +3359,8 @@ my %tests = (
no_blobs => 1,
no_privs => 1,
no_owner => 1,
+ no_subscriptions => 1,
+ no_subscriptions_restore => 1,
no_table_access_method => 1,
pg_dumpall_dbprivs => 1,
pg_dumpall_exclude => 1,