Allow pg_dumpall to work with previous releases again. Don't pass the -c

option down to pg_dump, where it's useless, and clarify the meaning of -c
in the documentation.
This commit is contained in:
Peter Eisentraut 2002-09-07 16:14:33 +00:00
parent 123baf8310
commit 40853dd445
7 changed files with 95 additions and 72 deletions

View File

@ -1,5 +1,5 @@
<!--
$Header: /cvsroot/pgsql/doc/src/sgml/ref/pg_dump.sgml,v 1.50 2002/09/06 21:58:36 petere Exp $
$Header: /cvsroot/pgsql/doc/src/sgml/ref/pg_dump.sgml,v 1.51 2002/09/07 16:14:33 petere Exp $
PostgreSQL documentation
-->
@ -289,14 +289,17 @@ PostgreSQL documentation
<term><option>--ignore-version</></term>
<listitem>
<para>
Ignore version mismatch between <command>pg_dump</command>
and the database server. Since <command>pg_dump</command>
knows a great deal about system catalogs, any given version of
<command>pg_dump</command> is only intended to work with
the corresponding release of the database server. Use this option
if you need to override the version check (and if
<command>pg_dump</command> then fails, don't
say you weren't warned).
Ignore version mismatch between
<application>pg_dump</application> and the database server.
</para>
<para>
<application>pg_dump</application> can handle databases from
previous releases of PostgreSQL, but very old versions are not
supported anymore (currently prior to 7.0). Use this option
if you need to override the version check (and if
<application>pg_dump</application> then fails, don't say you
weren't warned).
</para>
</listitem>
</varlistentry>

View File

@ -1,5 +1,5 @@
<!--
$Header: /cvsroot/pgsql/doc/src/sgml/ref/pg_dumpall.sgml,v 1.33 2002/09/05 22:05:50 momjian Exp $
$Header: /cvsroot/pgsql/doc/src/sgml/ref/pg_dumpall.sgml,v 1.34 2002/09/07 16:14:33 petere Exp $
PostgreSQL documentation
-->
@ -79,13 +79,12 @@ PostgreSQL documentation
<variablelist>
<varlistentry>
<term>-c, --clean</term>
<term><option>-c</option></term>
<term><option>--clean</option></term>
<listitem>
<para>
Include SQL commands to clean (drop) database objects before
recreating them. (This option is fairly useless, since the
output script expects to create the databases themselves;
they would always be empty upon creation.)
Include SQL commands to clean (drop) the databases before
recreating them.
</para>
</listitem>
</varlistentry>
@ -120,10 +119,11 @@ PostgreSQL documentation
</varlistentry>
<varlistentry>
<term>-g, --globals-only</term>
<term><option>-g</option></term>
<term><option>--globals-only</option></term>
<listitem>
<para>
Only dump global objects (users and groups), no databases.
Dump only global objects (users and groups), no databases.
</para>
</listitem>
</varlistentry>
@ -135,11 +135,13 @@ PostgreSQL documentation
<para>
Ignore version mismatch between
<application>pg_dumpall</application> and the database server.
Since <application>pg_dumpall</application> knows a great deal
about system catalogs, any given version of
<application>pg_dumpall</application> is only intended to work
with the corresponding release of the database server. Use
this option if you need to override the version check (and if
</para>
<para>
<application>pg_dumpall</application> can handle databases
from previous releases of PostgreSQL, but very old versions
are not supported anymore (currently prior to 7.0). Use this
option if you need to override the version check (and if
<application>pg_dumpall</application> then fails, don't say
you weren't warned).
</para>

View File

@ -6,7 +6,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
*
* $Header: /cvsroot/pgsql/src/bin/pg_dump/dumputils.c,v 1.2 2002/09/04 20:31:34 momjian Exp $
* $Header: /cvsroot/pgsql/src/bin/pg_dump/dumputils.c,v 1.3 2002/09/07 16:14:33 petere Exp $
*
*-------------------------------------------------------------------------
*/
@ -131,3 +131,24 @@ appendStringLiteral(PQExpBuffer buf, const char *str, bool escapeAll)
}
appendPQExpBufferChar(buf, '\'');
}
int
parse_version(const char *versionString)
{
int cnt;
int vmaj,
vmin,
vrev;
cnt = sscanf(versionString, "%d.%d.%d", &vmaj, &vmin, &vrev);
if (cnt < 2)
return -1;
if (cnt == 2)
vrev = 0;
return (100 * vmaj + vmin) * 100 + vrev;
}

View File

@ -6,7 +6,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
*
* $Header: /cvsroot/pgsql/src/bin/pg_dump/dumputils.h,v 1.3 2002/09/04 20:31:34 momjian Exp $
* $Header: /cvsroot/pgsql/src/bin/pg_dump/dumputils.h,v 1.4 2002/09/07 16:14:33 petere Exp $
*
*-------------------------------------------------------------------------
*/
@ -22,5 +22,6 @@ extern char *simple_prompt(const char *prompt, int maxlen, bool echo);
extern const char *fmtId(const char *identifier);
extern void appendStringLiteral(PQExpBuffer buf, const char *str, bool escapeAll);
extern int parse_version(const char *versionString);
#endif /* DUMPUTILS_H */

View File

@ -5,7 +5,7 @@
* Implements the basic DB functions used by the archiver.
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_db.c,v 1.40 2002/09/04 20:31:34 momjian Exp $
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_db.c,v 1.41 2002/09/07 16:14:33 petere Exp $
*
*-------------------------------------------------------------------------
*/
@ -41,20 +41,13 @@ static char *_sendCopyLine(ArchiveHandle *AH, char *qry, char *eos);
static int
_parse_version(ArchiveHandle *AH, const char *versionString)
{
int cnt;
int vmaj,
vmin,
vrev;
int v;
cnt = sscanf(versionString, "%d.%d.%d", &vmaj, &vmin, &vrev);
if (cnt < 2)
v = parse_version(versionString);
if (v < 0)
die_horribly(AH, modulename, "unable to parse version string \"%s\"\n", versionString);
if (cnt == 2)
vrev = 0;
return (100 * vmaj + vmin) * 100 + vrev;
return v;
}
static void

View File

@ -22,7 +22,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.297 2002/09/04 20:31:34 momjian Exp $
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.298 2002/09/07 16:14:33 petere Exp $
*
*-------------------------------------------------------------------------
*/
@ -75,7 +75,6 @@ typedef struct _dumpContext
} DumpContext;
static void help(const char *progname);
static int parse_version(const char *versionString);
static NamespaceInfo *findNamespace(const char *nsoid, const char *objoid);
static void dumpClasses(const TableInfo *tblinfo, const int numTables,
Archive *fout, const bool oids);
@ -535,12 +534,18 @@ main(int argc, char **argv)
/* Let the archiver know how noisy to be */
g_fout->verbose = g_verbose;
g_fout->minRemoteVersion = 70000; /* we can handle back to 7.0 */
g_fout->maxRemoteVersion = parse_version(PG_VERSION);
if (g_fout->maxRemoteVersion < 0)
{
write_msg(NULL, "unable to parse version string \"%s\"\n", PG_VERSION);
exit(1);
}
/*
* Open the database using the Archiver, so it knows about it. Errors
* mean death.
*/
g_fout->minRemoteVersion = 70000; /* we can handle back to 7.0 */
g_fout->maxRemoteVersion = parse_version(PG_VERSION);
g_conn = ConnectDatabase(g_fout, dbname, pghost, pgport, username, force_password, ignore_version);
/*
@ -726,28 +731,6 @@ help(const char *progname)
printf(_("Report bugs to <pgsql-bugs@postgresql.org>.\n"));
}
static int
parse_version(const char *versionString)
{
int cnt;
int vmaj,
vmin,
vrev;
cnt = sscanf(versionString, "%d.%d.%d", &vmaj, &vmin, &vrev);
if (cnt < 2)
{
write_msg(NULL, "unable to parse version string \"%s\"\n", versionString);
exit(1);
}
if (cnt == 2)
vrev = 0;
return (100 * vmaj + vmin) * 100 + vrev;
}
void
exit_nicely(void)
{

View File

@ -6,7 +6,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
*
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dumpall.c,v 1.6 2002/09/04 20:31:35 momjian Exp $
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dumpall.c,v 1.7 2002/09/07 16:14:33 petere Exp $
*
*-------------------------------------------------------------------------
*/
@ -56,6 +56,7 @@ char *pgdumploc;
PQExpBuffer pgdumpopts;
bool output_clean = false;
bool verbose = false;
int server_version;
@ -127,7 +128,6 @@ main(int argc, char *argv[])
{
case 'c':
output_clean = true;
appendPQExpBuffer(pgdumpopts, " -c");
break;
case 'd':
@ -217,10 +217,10 @@ help(void)
printf(_("Options:\n"));
#ifdef HAVE_GETOPT_LONG
printf(_(" -c, --clean clean (drop) schema prior to create\n"));
printf(_(" -c, --clean clean (drop) databases prior to create\n"));
printf(_(" -d, --inserts dump data as INSERT, rather than COPY, commands\n"));
printf(_(" -D, --column-inserts dump data as INSERT commands with column names\n"));
printf(_(" -g, --globals-only only dump global objects, no databases\n"));
printf(_(" -g, --globals-only dump only global objects, no databases\n"));
printf(_(" -h, --host=HOSTNAME database server host name\n"));
printf(_(" -i, --ignore-version proceed even when server version mismatches\n"
" pg_dumpall version\n"));
@ -230,10 +230,10 @@ help(void)
printf(_(" -v, --verbose verbose mode\n"));
printf(_(" -W, --password force password prompt (should happen automatically)\n"));
#else /* not HAVE_GETOPT_LONG */
printf(_(" -c clean (drop) schema prior to create\n"));
printf(_(" -c clean (drop) databases prior to create\n"));
printf(_(" -d dump data as INSERT, rather than COPY, commands\n"));
printf(_(" -D dump data as INSERT commands with column names\n"));
printf(_(" -g only dump global objects, no databases\n"));
printf(_(" -g dump only global objects, no databases\n"));
printf(_(" -h HOSTNAME database server host name\n"));
printf(_(" -i proceed even when server version mismatches\n"
" pg_dumpall version\n"));
@ -301,7 +301,8 @@ dumpUsers(PGconn *conn)
printf("%s", buf->data);
destroyPQExpBuffer(buf);
dumpUserConfig(conn, username);
if (server_version >= 70300)
dumpUserConfig(conn, username);
}
PQclear(res);
@ -431,7 +432,8 @@ dumpCreateDB(PGconn *conn)
printf("%s", buf->data);
destroyPQExpBuffer(buf);
dumpDatabaseConfig(conn, dbname);
if (server_version >= 70300)
dumpDatabaseConfig(conn, dbname);
}
PQclear(res);
@ -609,6 +611,7 @@ connectDatabase(const char *dbname, const char *pghost, const char *pgport,
PGconn *conn;
char *password = NULL;
bool need_pass = false;
PGresult *res;
if (require_password)
password = simple_prompt("Password: ", 100, false);
@ -626,7 +629,7 @@ connectDatabase(const char *dbname, const char *pghost, const char *pgport,
{
fprintf(stderr, _("%s: could not connect to database %s\n"),
progname, dbname);
exit(0);
exit(1);
}
if (PQstatus(conn) == CONNECTION_BAD &&
@ -649,7 +652,24 @@ connectDatabase(const char *dbname, const char *pghost, const char *pgport,
{
fprintf(stderr, _("%s: could not connect to database %s: %s\n"),
progname, dbname, PQerrorMessage(conn));
exit(0);
exit(1);
}
res = executeQuery(conn, "SELECT version();");
if (PQntuples(res) != 1)
{
fprintf(stderr, _("%s: could not get server version\n"), progname);
exit(1);
}
else
{
char *val = PQgetvalue(res, 0, 0);
server_version = parse_version(val + strcspn(val, "0123456789"));
if (server_version < 0)
{
fprintf(stderr, _("%s: could not parse server version \"%s\"\n"), progname, val);
exit(1);
}
}
return conn;