]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
pg_restore: Fix comment handling with --no-policies.
authorFujii Masao <fujii@postgresql.org>
Tue, 16 Sep 2025 02:54:23 +0000 (11:54 +0900)
committerFujii Masao <fujii@postgresql.org>
Tue, 16 Sep 2025 02:55:10 +0000 (11:55 +0900)
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
src/bin/pg_dump/t/002_pg_dump.pl

index 7299ffa661945182bf2dc3407b350294c34e87db..beb4d299b52092e69f5e9e1536368776e45a0e6b 100644 (file)
@@ -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;
index a626d24b5730cd0395cc873f6fadc0d0cb6f24e2..e5e55e9a21c4496d8e01b3c1c34e7b7ffaf4e331 100644 (file)
@@ -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,
                },
        },