postgres.git / summary / log / commit / refs
commit 2ddbfede0c615c009bbbb0f8dfcaa848da5d2376
Author: Fujii Masao <fujii@postgresql.org>
Date: Tue Sep 16 02:54:23 2025 +0000
First released in: 18.0
pg_restore: Fix comment handling with --no-policies.
Previously, pg_restore did not skip comments on policies even when
--no-policies was specified. As a result, it could issue COMMENT commands
for policies that were never created, causing those commands to fail.
This commit fixes the issue by ensuring that comments on policies
are also skipped when --no-policies is used.
Backpatch to v18, where --no-policies was added in pg_restore.
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: 18
src/bin/pg_dump/pg_backup_archiver.c | 7 +++++-
src/bin/pg_dump/t/002_pg_dump.pl | 46 ++++++++++++++++++++++++++++++++++++
2 files changed, 52 insertions(+), 1 deletion(-)
diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c
index 7299ffa6619..beb4d299b52 100644
--- a/src/bin/pg_dump/pg_backup_archiver.c
+++ b/src/bin/pg_dump/pg_backup_archiver.c
@@ -3034,10 +3034,15 @@ _tocEntryRequired(TocEntry *te, teSection curSection, ArchiveHandle *AH)
return 0;
/*
- * If it's a comment on a publication or a subscription, maybe ignore it.
+ * If it's a comment on a policy, a publication, or a subscription, maybe
+ * ignore it.
*/
if (strcmp(te->desc, "COMMENT") == 0)
{
+ if (ropt->no_policies &&
+ strncmp(te->tag, "POLICY", strlen("POLICY")) == 0)
+ return 0;
+
if (ropt->no_publications &&
strncmp(te->tag, "PUBLICATION", strlen("PUBLICATION")) == 0)
return 0;
diff --git a/src/bin/pg_dump/t/002_pg_dump.pl b/src/bin/pg_dump/t/002_pg_dump.pl
index a626d24b573..e5e55e9a21c 100644
--- a/src/bin/pg_dump/t/002_pg_dump.pl
+++ b/src/bin/pg_dump/t/002_pg_dump.pl
@@ -632,6 +632,23 @@ my %pgdump_runs = (
'postgres',
],
},
+ no_policies_restore => {
+ dump_cmd => [
+ 'pg_dump', '--no-sync',
+ '--format' => 'custom',
+ '--file' => "$tempdir/no_policies_restore.dump",
+ '--statistics',
+ 'postgres',
+ ],
+ restore_cmd => [
+ 'pg_restore',
+ '--format' => 'custom',
+ '--file' => "$tempdir/no_policies_restore.sql",
+ '--no-policies',
+ '--statistics',
+ "$tempdir/no_policies_restore.dump",
+ ],
+ },
no_privs => {
dump_cmd => [
'pg_dump', '--no-sync',
@@ -897,6 +914,7 @@ my %full_runs = (
no_large_objects => 1,
no_owner => 1,
no_policies => 1,
+ no_policies_restore => 1,
no_privs => 1,
no_statistics => 1,
no_subscriptions => 1,
@@ -1539,6 +1557,7 @@ my %tests = (
exclude_dump_test_schema => 1,
exclude_test_table => 1,
no_policies => 1,
+ no_policies_restore => 1,
only_dump_measurement => 1,
},
},
@@ -1856,6 +1875,27 @@ my %tests = (
},
},
+ 'COMMENT ON POLICY p1' => {
+ create_order => 55,
+ create_sql => 'COMMENT ON POLICY p1 ON dump_test.test_table
+ IS \'comment on policy\';',
+ regexp =>
+ qr/^COMMENT ON POLICY p1 ON dump_test.test_table IS 'comment on policy';/m,
+ like => {
+ %full_runs,
+ %dump_test_schema_runs,
+ only_dump_test_table => 1,
+ section_post_data => 1,
+ },
+ unlike => {
+ exclude_dump_test_schema => 1,
+ exclude_test_table => 1,
+ no_policies => 1,
+ no_policies_restore => 1,
+ only_dump_measurement => 1,
+ },
+ },
+
'COMMENT ON PUBLICATION pub1' => {
create_order => 55,
create_sql => 'COMMENT ON PUBLICATION pub1
@@ -3222,6 +3262,7 @@ my %tests = (
exclude_dump_test_schema => 1,
exclude_test_table => 1,
no_policies => 1,
+ no_policies_restore => 1,
only_dump_measurement => 1,
},
},
@@ -3244,6 +3285,7 @@ my %tests = (
exclude_dump_test_schema => 1,
exclude_test_table => 1,
no_policies => 1,
+ no_policies_restore => 1,
only_dump_measurement => 1,
},
},
@@ -3266,6 +3308,7 @@ my %tests = (
exclude_dump_test_schema => 1,
exclude_test_table => 1,
no_policies => 1,
+ no_policies_restore => 1,
only_dump_measurement => 1,
},
},
@@ -3288,6 +3331,7 @@ my %tests = (
exclude_dump_test_schema => 1,
exclude_test_table => 1,
no_policies => 1,
+ no_policies_restore => 1,
only_dump_measurement => 1,
},
},
@@ -3310,6 +3354,7 @@ my %tests = (
exclude_dump_test_schema => 1,
exclude_test_table => 1,
no_policies => 1,
+ no_policies_restore => 1,
only_dump_measurement => 1,
},
},
@@ -3332,6 +3377,7 @@ my %tests = (
exclude_dump_test_schema => 1,
exclude_test_table => 1,
no_policies => 1,
+ no_policies_restore => 1,
only_dump_measurement => 1,
},
},
[parent: 77d2b155caf7]