From 66dabc06b1b0aaadfd5be640a2e3efbeea0fcaf5 Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Tue, 16 Sep 2025 11:54:23 +0900 Subject: [PATCH] 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 Co-authored-by: Fujii Masao 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 d64ce19b673..2f92fce44f6 100644 --- a/src/bin/pg_dump/pg_backup_archiver.c +++ b/src/bin/pg_dump/pg_backup_archiver.c @@ -3049,10 +3049,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 1e8c6bbf22b..fc5b9b52f80 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, @@ -1540,6 +1558,7 @@ my %tests = ( exclude_dump_test_schema => 1, exclude_test_table => 1, no_policies => 1, + no_policies_restore => 1, only_dump_measurement => 1, }, }, @@ -1858,6 +1877,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 @@ -3224,6 +3264,7 @@ my %tests = ( exclude_dump_test_schema => 1, exclude_test_table => 1, no_policies => 1, + no_policies_restore => 1, only_dump_measurement => 1, }, }, @@ -3246,6 +3287,7 @@ my %tests = ( exclude_dump_test_schema => 1, exclude_test_table => 1, no_policies => 1, + no_policies_restore => 1, only_dump_measurement => 1, }, }, @@ -3268,6 +3310,7 @@ my %tests = ( exclude_dump_test_schema => 1, exclude_test_table => 1, no_policies => 1, + no_policies_restore => 1, only_dump_measurement => 1, }, }, @@ -3290,6 +3333,7 @@ my %tests = ( exclude_dump_test_schema => 1, exclude_test_table => 1, no_policies => 1, + no_policies_restore => 1, only_dump_measurement => 1, }, }, @@ -3312,6 +3356,7 @@ my %tests = ( exclude_dump_test_schema => 1, exclude_test_table => 1, no_policies => 1, + no_policies_restore => 1, only_dump_measurement => 1, }, }, @@ -3334,6 +3379,7 @@ my %tests = ( exclude_dump_test_schema => 1, exclude_test_table => 1, no_policies => 1, + no_policies_restore => 1, only_dump_measurement => 1, }, }, -- 2.39.5