pg_dumpall default database

Started by Dave Pageover 19 years ago9 messagespatches
Jump to latest
#1Dave Page
dpage@pgadmin.org

Per discussion on -hackers, the attached patch allow the default
database to be specified on the pg_dumpall command line, eg.

pg_dumpall [options...] [dbname]

If dbname is not specified, postgres/template1 are used per current
behaviour. If a connection cannot be made to dbname, an error is
returned and pg_dumpall exits. I've also added a similar error handler
to catch failures to connect to postgres and pg_dumpall (currently, the
dump will still be attempted).

This patch should be applied on top of my previous patch
(pg_dumpall_global_objects2.diff)

Regards, Dave

Attachments:

pg_dumpall_default_database.difftext/plain; name=pg_dumpall_default_database.diff; x-mac-creator=0; x-mac-type=0Download+56-35
#2Peter Eisentraut
peter_e@gmx.net
In reply to: Dave Page (#1)
Re: pg_dumpall default database

Am Montag, 15. Januar 2007 14:44 schrieb Dave Page:

Per discussion on -hackers, the attached patch allow the default
database to be specified on the pg_dumpall command line, eg.

pg_dumpall [options...] [dbname]

I think this should be a separate option. Otherwise it would be too easy to
confuse this with how pg_dump treats the argument.
--
Peter Eisentraut
http://developer.postgresql.org/~petere/

#3Dave Page
dpage@pgadmin.org
In reply to: Peter Eisentraut (#2)
Re: pg_dumpall default database

Peter Eisentraut wrote:

Am Montag, 15. Januar 2007 14:44 schrieb Dave Page:

Per discussion on -hackers, the attached patch allow the default
database to be specified on the pg_dumpall command line, eg.

pg_dumpall [options...] [dbname]

I think this should be a separate option. Otherwise it would be too easy to
confuse this with how pg_dump treats the argument.

You're thinking the user might expect it dump all of that database? Not
sure I agree with that, but I'm not wedded to the syntax. Any other
opinions?

Regards, Dave.

#4Neil Conway
neilc@samurai.com
In reply to: Dave Page (#3)
Re: pg_dumpall default database

On Mon, 2007-01-15 at 17:07 +0000, Dave Page wrote:

You're thinking the user might expect it dump all of that database? Not
sure I agree with that, but I'm not wedded to the syntax. Any other
opinions?

I agree with Peter: specifying the database name as implemented seems
like it would be prone to confusion.

-Neil

#5Dave Page
dpage@pgadmin.org
In reply to: Neil Conway (#4)
Re: pg_dumpall default database

Neil Conway wrote:

On Mon, 2007-01-15 at 17:07 +0000, Dave Page wrote:

You're thinking the user might expect it dump all of that database? Not
sure I agree with that, but I'm not wedded to the syntax. Any other
opinions?

I agree with Peter: specifying the database name as implemented seems
like it would be prone to confusion.

OK, updated patch attached. This has

-E <dbname> or --default-database=<dbname>

Regards, Dave.

Attachments:

pg_dumpall_default_database2.difftext/plain; name=pg_dumpall_default_database2.diff; x-mac-creator=0; x-mac-type=0Download+62-37
#6Tom Lane
tgl@sss.pgh.pa.us
In reply to: Dave Page (#5)
Re: pg_dumpall default database

Dave Page <dpage@postgresql.org> writes:

OK, updated patch attached. This has

-E <dbname> or --default-database=<dbname>

Not sure that "default" database is a particularly helpful adjective;
why shouldn't the switch just be --database?

Other than that, looks fine.

regards, tom lane

#7Albe Laurenz
all@adv.magwien.gv.at
In reply to: Tom Lane (#6)
Re: pg_dumpall default database

Dave Page wrote:

I agree with Peter: specifying the database name as implemented seems
like it would be prone to confusion.

OK, updated patch attached. This has

-E <dbname> or --default-database=<dbname>

Ouch. This calls for confusion with the -E flag of pg_dump,
which means 'encoding'. Something else might be better.

It would be nice to be able to specify the encoding for
pg_dumpall, though, rather than having to set PG_CLIENTENCODING.

Yours,
Laurenz Albe

#8Dave Page
dpage@pgadmin.org
In reply to: Tom Lane (#6)
Re: pg_dumpall default database

Tom Lane wrote:

Dave Page <dpage@postgresql.org> writes:

OK, updated patch attached. This has

-E <dbname> or --default-database=<dbname>

Not sure that "default" database is a particularly helpful adjective;
why shouldn't the switch just be --database?

Other than that, looks fine.

Updated to -l, --database to address yours, and Albe's concerns.

Regards, Dave

Attachments:

pg_dumpall_default_database3.difftext/plain; name=pg_dumpall_default_database3.diff; x-mac-creator=0; x-mac-type=0Download+61-37
#9Bruce Momjian
bruce@momjian.us
In reply to: Dave Page (#8)
Re: pg_dumpall default database

Patch applied. Thanks.

---------------------------------------------------------------------------

Dave Page wrote:

Tom Lane wrote:

Dave Page <dpage@postgresql.org> writes:

OK, updated patch attached. This has

-E <dbname> or --default-database=<dbname>

Not sure that "default" database is a particularly helpful adjective;
why shouldn't the switch just be --database?

Other than that, looks fine.

Updated to -l, --database to address yours, and Albe's concerns.

Regards, Dave

diff -c -r pgsql.orig/doc/src/sgml/ref/pg_dumpall.sgml pgsql.defaultdb/doc/src/sgml/ref/pg_dumpall.sgml
*** pgsql.orig/doc/src/sgml/ref/pg_dumpall.sgml	Mon Jan 15 13:26:07 2007
--- pgsql.defaultdb/doc/src/sgml/ref/pg_dumpall.sgml	Tue Jan 16 09:23:19 2007
***************
*** 313,318 ****
--- 313,319 ----
<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,331 ****
--- 324,346 ----
</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,343 ****
--- 353,359 ----
<varlistentry>
<term>-U <replaceable>username</replaceable></term>
+       <term>--username=<replaceable>username</replaceable></term>
<listitem>
<para>
Connect as the given user.
***************
*** 347,352 ****
--- 363,369 ----
<varlistentry>
<term>-W</term>
+ 	    <term>--password</term>
<listitem>
<para>
Force a password prompt.  This should happen automatically if
diff -c -r pgsql.orig/src/bin/pg_dump/pg_dumpall.c pgsql.defaultdb/src/bin/pg_dump/pg_dumpall.c
*** pgsql.orig/src/bin/pg_dump/pg_dumpall.c	Mon Jan 15 13:26:07 2007
--- pgsql.defaultdb/src/bin/pg_dump/pg_dumpall.c	Tue Jan 16 09:26:03 2007
***************
*** 75,80 ****
--- 75,81 ----
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,101 ****
--- 97,103 ----
{"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,171 ****

pgdumpopts = createPQExpBuffer();

! 	while ((c = getopt_long(argc, argv, "acdDgh:ioOp:rsS:tU:vWxX:", long_options, &optindex)) != -1)
{
switch (c)
{
--- 167,173 ----

pgdumpopts = createPQExpBuffer();

! 	while ((c = getopt_long(argc, argv, "acdDgh:il:oOp:rsS:tU:vWxX:", long_options, &optindex)) != -1)
{
switch (c)
{
***************
*** 201,206 ****
--- 203,212 ----
ignoreVersion = true;
appendPQExpBuffer(pgdumpopts, " -i");
break;
+ 				
+ 			case 'l':
+ 				pgdb = optarg;
+ 				break;

case 'o':
appendPQExpBuffer(pgdumpopts, " -o");
***************
*** 337,351 ****
}

/*
! * First 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,
force_password, false);
! if (!conn)
! conn = connectDatabase("template1", pghost, pgport, pguser,
! force_password, true);

/*
* Get the active encoding and the standard_conforming_strings setting, so
--- 343,382 ----
}

/*
! * 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.
*/
! 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)
! {
! 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,449 ****
--- 475,481 ----

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"));

---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster

--
Bruce Momjian bruce@momjian.us
EnterpriseDB http://www.enterprisedb.com

+ If your life is a hard drive, Christ can be your backup. +