aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2005-04-18 23:48:01 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2005-04-18 23:48:01 +0000
commit92645c42c8d6cfb078cec109d35494b4dfb11570 (patch)
tree910ae5a842d2710319f2a52686de068155372527
parent1186365c3c7d53412f8e8a5252649b3509691654 (diff)
downloadpostgresql-92645c42c8d6cfb078cec109d35494b4dfb11570.tar.gz
postgresql-92645c42c8d6cfb078cec109d35494b4dfb11570.zip
pg_dumpall should enforce the server version check for itself, rather
than simply passing it down to pg_dump. Else, version-related failures in pg_dumpall itself generate unhelpful error messages.
-rw-r--r--src/bin/pg_dump/pg_dumpall.c35
1 files changed, 31 insertions, 4 deletions
diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.c
index a85843a32db..272fad04ba7 100644
--- a/src/bin/pg_dump/pg_dumpall.c
+++ b/src/bin/pg_dump/pg_dumpall.c
@@ -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.57 2004/12/31 22:03:09 pgsql Exp $
+ * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dumpall.c,v 1.57.4.1 2005/04/18 23:48:01 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -64,6 +64,7 @@ PQExpBuffer pgdumpopts;
bool output_clean = false;
bool skip_acls = false;
bool verbose = false;
+static bool ignoreVersion = false;
int server_version;
/* flags for -X long options */
@@ -194,11 +195,13 @@ main(int argc, char *argv[])
break;
-
-
case 'i':
+ ignoreVersion = true;
+ appendPQExpBuffer(pgdumpopts, " -i");
+ break;
+
case 'o':
- appendPQExpBuffer(pgdumpopts, " -%c", c);
+ appendPQExpBuffer(pgdumpopts, " -o");
break;
case 'O':
@@ -936,6 +939,7 @@ connectDatabase(const char *dbname, const char *pghost, const char *pgport,
char *password = NULL;
bool need_pass = false;
const char *remoteversion_str;
+ int my_version;
if (require_password)
password = simple_prompt("Password: ", 100, false);
@@ -993,6 +997,29 @@ connectDatabase(const char *dbname, const char *pghost, const char *pgport,
exit(1);
}
+ my_version = parse_version(PG_VERSION);
+ if (my_version < 0)
+ {
+ fprintf(stderr, _("%s: could not parse version \"%s\"\n"),
+ progname, PG_VERSION);
+ exit(1);
+ }
+
+ if (my_version != server_version
+ && (server_version < 70000 /* we can handle back to 7.0 */
+ || server_version > my_version))
+ {
+ fprintf(stderr, _("server version: %s; %s version: %s\n"),
+ remoteversion_str, progname, PG_VERSION);
+ if (ignoreVersion)
+ fprintf(stderr, _("proceeding despite version mismatch\n"));
+ else
+ {
+ fprintf(stderr, _("aborting because of version mismatch (Use the -i option to proceed anyway.)\n"));
+ exit(1);
+ }
+ }
+
return conn;
}