From d37881fd908e286d0c7b942ee13331c203f12eb1 Mon Sep 17 00:00:00 2001 From: Bruce Momjian <bruce@momjian.us> Date: Thu, 25 Jan 2007 02:46:33 +0000 Subject: [PATCH] Allow pg_dumpall to specify a database name rather than the default 'template1'. Dave Page --- doc/src/sgml/ref/pg_dumpall.sgml | 19 ++++++++++++- src/bin/pg_dump/pg_dumpall.c | 46 +++++++++++++++++++++++++++----- 2 files changed, 57 insertions(+), 8 deletions(-) diff --git a/doc/src/sgml/ref/pg_dumpall.sgml b/doc/src/sgml/ref/pg_dumpall.sgml index 3f40be0f4a0..0a3b44c48ab 100644 --- a/doc/src/sgml/ref/pg_dumpall.sgml +++ b/doc/src/sgml/ref/pg_dumpall.sgml @@ -1,5 +1,5 @@ <!-- -$PostgreSQL: pgsql/doc/src/sgml/ref/pg_dumpall.sgml,v 1.60 2007/01/25 02:30:32 momjian Exp $ +$PostgreSQL: pgsql/doc/src/sgml/ref/pg_dumpall.sgml,v 1.61 2007/01/25 02:46:33 momjian Exp $ PostgreSQL documentation --> @@ -313,6 +313,7 @@ PostgreSQL documentation <variablelist> <varlistentry> <term>-h <replaceable>host</replaceable></term> + <term>--host=<replaceable>host</replaceable></term> <listitem> <para> Specifies the host name of the machine on which the database @@ -323,9 +324,23 @@ PostgreSQL documentation </para> </listitem> </varlistentry> + + <varlistentry> + <term>-l <replaceable>dbname</replaceable></term> + <term>--database=<replaceable>dbname</replaceable></term> + <listitem> + <para> + Specifies the name of the database to connect to to dump global + objects and discover what other databases should be dumped. If + not specified, the <quote>postgres</quote> database will be used, + and if that does not exist, <quote>template1</quote> will be used. + </para> + </listitem> + </varlistentry> <varlistentry> <term>-p <replaceable>port</replaceable></term> + <term>--port=<replaceable>port</replaceable></term> <listitem> <para> Specifies the TCP port or local Unix domain socket file @@ -338,6 +353,7 @@ PostgreSQL documentation <varlistentry> <term>-U <replaceable>username</replaceable></term> + <term>--username=<replaceable>username</replaceable></term> <listitem> <para> Connect as the given user. @@ -347,6 +363,7 @@ PostgreSQL documentation <varlistentry> <term>-W</term> + <term>--password</term> <listitem> <para> Force a password prompt. This should happen automatically if diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.c index 697754e7ec6..66c66d8a1a4 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.87 2007/01/25 02:30:32 momjian Exp $ + * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dumpall.c,v 1.88 2007/01/25 02:46:33 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -75,6 +75,7 @@ main(int argc, char *argv[]) char *pghost = NULL; char *pgport = NULL; char *pguser = NULL; + char *pgdb = NULL; bool force_password = false; bool data_only = false; bool globals_only = false; @@ -96,6 +97,7 @@ main(int argc, char *argv[]) {"globals-only", no_argument, NULL, 'g'}, {"host", required_argument, NULL, 'h'}, {"ignore-version", no_argument, NULL, 'i'}, + {"database", required_argument, NULL, 'l'}, {"oids", no_argument, NULL, 'o'}, {"no-owner", no_argument, NULL, 'O'}, {"port", required_argument, NULL, 'p'}, @@ -165,7 +167,7 @@ main(int argc, char *argv[]) pgdumpopts = createPQExpBuffer(); - while ((c = getopt_long(argc, argv, "acdDgh:ioOp:rsS:tU:vWxX:", long_options, &optindex)) != -1) + while ((c = getopt_long(argc, argv, "acdDgh:il:oOp:rsS:tU:vWxX:", long_options, &optindex)) != -1) { switch (c) { @@ -201,6 +203,10 @@ main(int argc, char *argv[]) ignoreVersion = true; appendPQExpBuffer(pgdumpopts, " -i"); break; + + case 'l': + pgdb = optarg; + break; case 'o': appendPQExpBuffer(pgdumpopts, " -o"); @@ -337,15 +343,40 @@ main(int argc, char *argv[]) } /* - * First try to connect to database "postgres", and failing that + * If there was a database specified on the command line, use that, + * otherwise try to connect to database "postgres", and failing that * "template1". "postgres" is the preferred choice for 8.1 and later * servers, but it usually will not exist on older ones. */ - conn = connectDatabase("postgres", pghost, pgport, pguser, + if (pgdb) + { + conn = connectDatabase(pgdb, pghost, pgport, pguser, + force_password, false); + + if (!conn) + { + fprintf(stderr, _("%s: could not connect to database \"%s\"\n"), + progname, pgdb); + exit(1); + } + } + else + { + conn = connectDatabase("postgres", pghost, pgport, pguser, force_password, false); - if (!conn) - conn = connectDatabase("template1", pghost, pgport, pguser, - force_password, true); + if (!conn) + conn = connectDatabase("template1", pghost, pgport, pguser, + force_password, true); + + if (!conn) + { + fprintf(stderr, _("%s: could not connect to databases \"postgres\" or \"template1\". Please specify an alternative database\n"), + progname); + fprintf(stderr, _("Try \"%s --help\" for more information.\n"), + progname); + exit(1); + } + } /* * Get the active encoding and the standard_conforming_strings setting, so @@ -444,6 +475,7 @@ help(void) printf(_("\nConnection options:\n")); printf(_(" -h, --host=HOSTNAME database server host or socket directory\n")); + printf(_(" -l, --database=dbname specify an alternate default database\n")); printf(_(" -p, --port=PORT database server port number\n")); printf(_(" -U, --username=NAME connect as specified database user\n")); printf(_(" -W, --password force password prompt (should happen automatically)\n")); -- GitLab