mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +03:00
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.
This commit is contained in:
@ -25,7 +25,7 @@
|
||||
* http://archives.postgresql.org/pgsql-bugs/2010-02/msg00187.php
|
||||
*
|
||||
* 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)
|
||||
}
|
||||
}
|
||||
|
||||
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"),
|
||||
progname, argv[optind + 1]);
|
||||
progname, argv[optind]);
|
||||
fprintf(stderr, _("Try \"%s --help\" for more information.\n"),
|
||||
progname);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* Get database name from command line */
|
||||
if (optind < argc)
|
||||
dbname = argv[optind];
|
||||
|
||||
/* --column-inserts implies --inserts */
|
||||
if (column_inserts)
|
||||
dump_inserts = 1;
|
||||
|
@ -6,7 +6,7 @@
|
||||
* 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[])
|
||||
}
|
||||
}
|
||||
|
||||
/* 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");
|
||||
|
||||
/* Complain if any arguments remain */
|
||||
if (optind < argc)
|
||||
{
|
||||
fprintf(stderr, _("%s: too many command-line arguments (first is \"%s\")\n"),
|
||||
@ -371,6 +354,24 @@ main(int argc, char *argv[])
|
||||
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,
|
||||
* otherwise try to connect to database "postgres", and failing that
|
||||
|
@ -34,7 +34,7 @@
|
||||
*
|
||||
*
|
||||
* 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)
|
||||
}
|
||||
}
|
||||
|
||||
/* Get file name from command line */
|
||||
if (optind < argc)
|
||||
inputFileSpec = argv[optind];
|
||||
inputFileSpec = argv[optind++];
|
||||
else
|
||||
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 */
|
||||
if (opts->dbname)
|
||||
{
|
||||
|
Reference in New Issue
Block a user