Commit e4155c84 authored by Tom Lane's avatar Tom Lane

Fix pg_restore to complain if any arguments remain after parsing the switches

and input file name, per bug #5617 from Leo Shklovskii.  Rearrange the
corresponding code in pg_dump and pg_dumpall so that all three programs
handle this in a consistent, straightforward fashion.

Back-patch to 9.0, but no further.  Although this is certainly a bug, it's
possible that people have scripts that will be broken by the added error
check, so it seems better not to change the behavior in stable branches.
parent 9b0a8686
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
* http://archives.postgresql.org/pgsql-bugs/2010-02/msg00187.php * http://archives.postgresql.org/pgsql-bugs/2010-02/msg00187.php
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.584 2010/08/03 19:24:04 tgl Exp $ * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.585 2010/08/13 14:38:03 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -480,19 +480,20 @@ main(int argc, char **argv) ...@@ -480,19 +480,20 @@ main(int argc, char **argv)
} }
} }
if (optind < (argc - 1)) /* Get database name from command line */
if (optind < argc)
dbname = argv[optind++];
/* Complain if any arguments remain */
if (optind < argc)
{ {
fprintf(stderr, _("%s: too many command-line arguments (first is \"%s\")\n"), fprintf(stderr, _("%s: too many command-line arguments (first is \"%s\")\n"),
progname, argv[optind + 1]); progname, argv[optind]);
fprintf(stderr, _("Try \"%s --help\" for more information.\n"), fprintf(stderr, _("Try \"%s --help\" for more information.\n"),
progname); progname);
exit(1); exit(1);
} }
/* Get database name from command line */
if (optind < argc)
dbname = argv[optind];
/* --column-inserts implies --inserts */ /* --column-inserts implies --inserts */
if (column_inserts) if (column_inserts)
dump_inserts = 1; dump_inserts = 1;
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* *
* $PostgreSQL: pgsql/src/bin/pg_dump/pg_dumpall.c,v 1.137 2010/08/03 19:24:05 tgl Exp $ * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dumpall.c,v 1.138 2010/08/13 14:38:04 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -316,24 +316,7 @@ main(int argc, char *argv[]) ...@@ -316,24 +316,7 @@ main(int argc, char *argv[])
} }
} }
/* Add long options to the pg_dump argument list */ /* Complain if any arguments remain */
if (binary_upgrade)
appendPQExpBuffer(pgdumpopts, " --binary-upgrade");
if (column_inserts)
appendPQExpBuffer(pgdumpopts, " --column-inserts");
if (disable_dollar_quoting)
appendPQExpBuffer(pgdumpopts, " --disable-dollar-quoting");
if (disable_triggers)
appendPQExpBuffer(pgdumpopts, " --disable-triggers");
if (inserts)
appendPQExpBuffer(pgdumpopts, " --inserts");
if (no_tablespaces)
appendPQExpBuffer(pgdumpopts, " --no-tablespaces");
if (quote_all_identifiers)
appendPQExpBuffer(pgdumpopts, " --quote-all-identifiers");
if (use_setsessauth)
appendPQExpBuffer(pgdumpopts, " --use-set-session-authorization");
if (optind < argc) if (optind < argc)
{ {
fprintf(stderr, _("%s: too many command-line arguments (first is \"%s\")\n"), fprintf(stderr, _("%s: too many command-line arguments (first is \"%s\")\n"),
...@@ -371,6 +354,24 @@ main(int argc, char *argv[]) ...@@ -371,6 +354,24 @@ main(int argc, char *argv[])
exit(1); exit(1);
} }
/* Add long options to the pg_dump argument list */
if (binary_upgrade)
appendPQExpBuffer(pgdumpopts, " --binary-upgrade");
if (column_inserts)
appendPQExpBuffer(pgdumpopts, " --column-inserts");
if (disable_dollar_quoting)
appendPQExpBuffer(pgdumpopts, " --disable-dollar-quoting");
if (disable_triggers)
appendPQExpBuffer(pgdumpopts, " --disable-triggers");
if (inserts)
appendPQExpBuffer(pgdumpopts, " --inserts");
if (no_tablespaces)
appendPQExpBuffer(pgdumpopts, " --no-tablespaces");
if (quote_all_identifiers)
appendPQExpBuffer(pgdumpopts, " --quote-all-identifiers");
if (use_setsessauth)
appendPQExpBuffer(pgdumpopts, " --use-set-session-authorization");
/* /*
* If there was a database specified on the command line, use that, * If there was a database specified on the command line, use that,
* otherwise try to connect to database "postgres", and failing that * otherwise try to connect to database "postgres", and failing that
......
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/bin/pg_dump/pg_restore.c,v 1.102 2010/05/15 21:41:16 tgl Exp $ * $PostgreSQL: pgsql/src/bin/pg_dump/pg_restore.c,v 1.103 2010/08/13 14:38:04 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -295,11 +295,22 @@ main(int argc, char **argv) ...@@ -295,11 +295,22 @@ main(int argc, char **argv)
} }
} }
/* Get file name from command line */
if (optind < argc) if (optind < argc)
inputFileSpec = argv[optind]; inputFileSpec = argv[optind++];
else else
inputFileSpec = NULL; inputFileSpec = NULL;
/* Complain if any arguments remain */
if (optind < argc)
{
fprintf(stderr, _("%s: too many command-line arguments (first is \"%s\")\n"),
progname, argv[optind]);
fprintf(stderr, _("Try \"%s --help\" for more information.\n"),
progname);
exit(1);
}
/* Should get at most one of -d and -f, else user is confused */ /* Should get at most one of -d and -f, else user is confused */
if (opts->dbname) if (opts->dbname)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment