Skip to content

Commit 6012189

Browse files
committed
pg_dump: reject combination of "only" and "with"
Reviewed-by: Álvaro Herrera <alvherre@kurilemu.de> Discussion: https://postgr.es/m/8ce896d1a05040905cc1a3afbc04e94d8e95669a.camel@j-davis.com Backpatch-through: 18
1 parent 42b1480 commit 6012189

File tree

3 files changed

+39
-17
lines changed

3 files changed

+39
-17
lines changed

src/bin/pg_dump/pg_dump.c

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -852,6 +852,17 @@ main(int argc, char **argv)
852852
if (with_statistics && no_statistics)
853853
pg_fatal("options --with-statistics and --no-statistics cannot be used together");
854854

855+
/* reject conflicting "-only" and "with-" options */
856+
if (data_only && (with_schema || with_statistics))
857+
pg_fatal("options %s and %s cannot be used together",
858+
"-a/--data-only", with_schema ? "--with-schema" : "--with-statistics");
859+
if (schema_only && (with_data || with_statistics))
860+
pg_fatal("options %s and %s cannot be used together",
861+
"-s/--schema-only", with_data ? "--with-data" : "--with-statistics");
862+
if (statistics_only && (with_data || with_schema))
863+
pg_fatal("options %s and %s cannot be used together",
864+
"--statistics-only", with_data ? "--with-data" : "--with-schema");
865+
855866
if (schema_only && foreign_servers_include_patterns.head != NULL)
856867
pg_fatal("options -s/--schema-only and --include-foreign-data cannot be used together");
857868

@@ -865,11 +876,9 @@ main(int argc, char **argv)
865876
pg_fatal("option --if-exists requires option -c/--clean");
866877

867878
/*
868-
* Set derivative flags. An "-only" option may be overridden by an
869-
* explicit "with-" option; e.g. "--schema-only --with-statistics" will
870-
* include schema and statistics. Other ambiguous or nonsensical
871-
* combinations, e.g. "--schema-only --no-schema", will have already
872-
* caused an error in one of the checks above.
879+
* Set derivative flags. Ambiguous or nonsensical combinations, e.g.
880+
* "--schema-only --no-schema", will have already caused an error in one
881+
* of the checks above.
873882
*/
874883
dopt.dumpData = ((dopt.dumpData && !schema_only && !statistics_only) ||
875884
(data_only || with_data)) && !no_data;

src/bin/pg_dump/pg_restore.c

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,17 @@ main(int argc, char **argv)
381381
if (with_statistics && no_statistics)
382382
pg_fatal("options --with-statistics and --no-statistics cannot be used together");
383383

384+
/* reject conflicting "only-" and "with-" options */
385+
if (data_only && (with_schema || with_statistics))
386+
pg_fatal("options %s and %s cannot be used together",
387+
"-a/--data-only", with_schema ? "--with-schema" : "--with-statistics");
388+
if (schema_only && (with_data || with_statistics))
389+
pg_fatal("options %s and %s cannot be used together",
390+
"-s/--schema-only", with_data ? "--with-data" : "--with-statistics");
391+
if (statistics_only && (with_data || with_schema))
392+
pg_fatal("options %s and %s cannot be used together",
393+
"--statistics-only", with_data ? "--with-data" : "--with-schema");
394+
384395
if (data_only && opts->dropSchema)
385396
pg_fatal("options -c/--clean and -a/--data-only cannot be used together");
386397

@@ -399,11 +410,9 @@ main(int argc, char **argv)
399410
pg_fatal("cannot specify both --single-transaction and multiple jobs");
400411

401412
/*
402-
* Set derivative flags. An "-only" option may be overridden by an
403-
* explicit "with-" option; e.g. "--schema-only --with-statistics" will
404-
* include schema and statistics. Other ambiguous or nonsensical
405-
* combinations, e.g. "--schema-only --no-schema", will have already
406-
* caused an error in one of the checks above.
413+
* Set derivative flags. Ambiguous or nonsensical combinations, e.g.
414+
* "--schema-only --no-schema", will have already caused an error in one
415+
* of the checks above.
407416
*/
408417
opts->dumpData = ((opts->dumpData && !schema_only && !statistics_only) ||
409418
(data_only || with_data)) && !no_data;

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

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -799,13 +799,6 @@
799799
'postgres',
800800
],
801801
},
802-
schema_only_with_statistics => {
803-
dump_cmd => [
804-
'pg_dump', '--no-sync',
805-
"--file=$tempdir/schema_only_with_statistics.sql",
806-
'--schema-only', '--with-statistics', 'postgres',
807-
],
808-
},
809802
no_schema => {
810803
dump_cmd => [
811804
'pg_dump', '--no-sync',
@@ -5205,6 +5198,17 @@
52055198
qr/\Qpg_dump: error: no matching schemas were found for pattern\E/,
52065199
'no matching schemas');
52075200
5201+
command_fails_like(
5202+
[
5203+
'pg_dump',
5204+
'--port' => $port,
5205+
'--strict-names',
5206+
'--schema-only',
5207+
'--with-statistics',
5208+
],
5209+
qr/\Qpg_dump: error: options -s\/--schema-only and --with-statistics cannot be used together\E/,
5210+
'cannot use --schema-only and --with-statistics together');
5211+
52085212
command_fails_like(
52095213
[
52105214
'pg_dump',

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy