]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
pg_dump: reject combination of "only" and "with"
authorJeff Davis <jdavis@postgresql.org>
Fri, 1 Aug 2025 17:06:50 +0000 (10:06 -0700)
committerJeff Davis <jdavis@postgresql.org>
Fri, 1 Aug 2025 17:06:50 +0000 (10:06 -0700)
Reviewed-by: Álvaro Herrera <alvherre@kurilemu.de>
Discussion: https://postgr.es/m/8ce896d1a05040905cc1a3afbc04e94d8e95669a.camel@j-davis.com
Backpatch-through: 18

src/bin/pg_dump/pg_dump.c
src/bin/pg_dump/pg_restore.c
src/bin/pg_dump/t/002_pg_dump.pl

index 4489022e5f52901fe7f8a55b63c17f55c91f1a5f..6c9785de04a59f1e086dfb4f3e931616b2ee7be9 100644 (file)
@@ -852,6 +852,17 @@ main(int argc, char **argv)
        if (with_statistics && no_statistics)
                pg_fatal("options --with-statistics and --no-statistics cannot be used together");
 
+       /* reject conflicting "-only" and "with-" options */
+       if (data_only && (with_schema || with_statistics))
+               pg_fatal("options %s and %s cannot be used together",
+                                "-a/--data-only", with_schema ? "--with-schema" : "--with-statistics");
+       if (schema_only && (with_data || with_statistics))
+               pg_fatal("options %s and %s cannot be used together",
+                                "-s/--schema-only", with_data ? "--with-data" : "--with-statistics");
+       if (statistics_only && (with_data || with_schema))
+               pg_fatal("options %s and %s cannot be used together",
+                                "--statistics-only", with_data ? "--with-data" : "--with-schema");
+
        if (schema_only && foreign_servers_include_patterns.head != NULL)
                pg_fatal("options -s/--schema-only and --include-foreign-data cannot be used together");
 
@@ -865,11 +876,9 @@ main(int argc, char **argv)
                pg_fatal("option --if-exists requires option -c/--clean");
 
        /*
-        * Set derivative flags. An "-only" option may be overridden by an
-        * explicit "with-" option; e.g. "--schema-only --with-statistics" will
-        * include schema and statistics. Other ambiguous or nonsensical
-        * combinations, e.g. "--schema-only --no-schema", will have already
-        * caused an error in one of the checks above.
+        * Set derivative flags. Ambiguous or nonsensical combinations, e.g.
+        * "--schema-only --no-schema", will have already caused an error in one
+        * of the checks above.
         */
        dopt.dumpData = ((dopt.dumpData && !schema_only && !statistics_only) ||
                                         (data_only || with_data)) && !no_data;
index b4e1acdb63fbb1f58280cf544263f9890f2f222d..2c727b9f1560bf2e83c7a2631fe9a5a92c030731 100644 (file)
@@ -381,6 +381,17 @@ main(int argc, char **argv)
        if (with_statistics && no_statistics)
                pg_fatal("options --with-statistics and --no-statistics cannot be used together");
 
+       /* reject conflicting "only-" and "with-" options */
+       if (data_only && (with_schema || with_statistics))
+               pg_fatal("options %s and %s cannot be used together",
+                                "-a/--data-only", with_schema ? "--with-schema" : "--with-statistics");
+       if (schema_only && (with_data || with_statistics))
+               pg_fatal("options %s and %s cannot be used together",
+                                "-s/--schema-only", with_data ? "--with-data" : "--with-statistics");
+       if (statistics_only && (with_data || with_schema))
+               pg_fatal("options %s and %s cannot be used together",
+                                "--statistics-only", with_data ? "--with-data" : "--with-schema");
+
        if (data_only && opts->dropSchema)
                pg_fatal("options -c/--clean and -a/--data-only cannot be used together");
 
@@ -399,11 +410,9 @@ main(int argc, char **argv)
                pg_fatal("cannot specify both --single-transaction and multiple jobs");
 
        /*
-        * Set derivative flags. An "-only" option may be overridden by an
-        * explicit "with-" option; e.g. "--schema-only --with-statistics" will
-        * include schema and statistics. Other ambiguous or nonsensical
-        * combinations, e.g. "--schema-only --no-schema", will have already
-        * caused an error in one of the checks above.
+        * Set derivative flags. Ambiguous or nonsensical combinations, e.g.
+        * "--schema-only --no-schema", will have already caused an error in one
+        * of the checks above.
         */
        opts->dumpData = ((opts->dumpData && !schema_only && !statistics_only) ||
                                          (data_only || with_data)) && !no_data;
index 771cdcecb604231bd3cb0da68a42cc527fc3fbfb..7f6b10888437ef873f673d0836323ffdb8f92fe5 100644 (file)
@@ -799,13 +799,6 @@ my %pgdump_runs = (
                        'postgres',
                ],
        },
-       schema_only_with_statistics => {
-               dump_cmd => [
-                       'pg_dump', '--no-sync',
-                       "--file=$tempdir/schema_only_with_statistics.sql",
-                       '--schema-only', '--with-statistics', 'postgres',
-               ],
-       },
        no_schema => {
                dump_cmd => [
                        'pg_dump', '--no-sync',
@@ -5205,6 +5198,17 @@ command_fails_like(
        qr/\Qpg_dump: error: no matching schemas were found for pattern\E/,
        'no matching schemas');
 
+command_fails_like(
+       [
+               'pg_dump',
+               '--port' => $port,
+               '--strict-names',
+               '--schema-only',
+               '--with-statistics',
+       ],
+       qr/\Qpg_dump: error: options -s\/--schema-only and --with-statistics cannot be used together\E/,
+       'cannot use --schema-only and --with-statistics together');
+
 command_fails_like(
        [
                'pg_dump',