Re: [pgsql-patches] pg_dumpall default database

2007-01-24 Thread Bruce Momjian

Patch applied.  Thanks.

---

Dave Page wrote:
 Tom Lane wrote:
  Dave Page [EMAIL PROTECTED] 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 replaceablehost/replaceable/term
 +   term--host=replaceablehost/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 replaceabledbname/replaceable/term
 +   term--database=replaceabledbname/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 quotepostgres/quote database will be used,
 +  and if that does not exist, quotetemplate1/quote will be used.
 +/para
 +   /listitem
 +  /varlistentry
   
varlistentry
 term-p replaceableport/replaceable/term
 +   term--port=replaceableport/replaceable/term
 listitem
  para
   Specifies the TCP port or local Unix domain socket file
 ***
 *** 338,343 
 --- 353,359 
   
varlistentry
 term-U replaceableusername/replaceable/term
 +   term--username=replaceableusername/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;
   boolforce_password = false;
   booldata_only = false;
   boolglobals_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 

Re: [pgsql-patches] pg_dumpall default database

2007-01-16 Thread Dave Page
Tom Lane wrote:
 Dave Page [EMAIL PROTECTED] 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.sgmlTue Jan 16 09:23:19 2007
***
*** 313,318 
--- 313,319 
 variablelist
   varlistentry
term-h replaceablehost/replaceable/term
+   term--host=replaceablehost/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 replaceabledbname/replaceable/term
+   term--database=replaceabledbname/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 quotepostgres/quote database will be used,
+  and if that does not exist, quotetemplate1/quote will be used.
+/para
+   /listitem
+  /varlistentry
  
   varlistentry
term-p replaceableport/replaceable/term
+   term--port=replaceableport/replaceable/term
listitem
 para
  Specifies the TCP port or local Unix domain socket file
***
*** 338,343 
--- 353,359 
  
   varlistentry
term-U replaceableusername/replaceable/term
+   term--username=replaceableusername/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.cTue Jan 16 09:26:03 2007
***
*** 75,80 
--- 75,81 
char   *pghost = NULL;
char   *pgport = NULL;
char   *pguser = NULL;
+   char   *pgdb = NULL;
boolforce_password = false;
booldata_only = false;
boolglobals_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,
!* 

[pgsql-patches] pg_dumpall default database

2007-01-15 Thread 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]

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
diff -c -r pgsql.orig/doc/src/sgml/ref/pg_dumpall.sgml 
pgsql/doc/src/sgml/ref/pg_dumpall.sgml
*** pgsql.orig/doc/src/sgml/ref/pg_dumpall.sgml Mon Jan 15 13:26:07 2007
--- pgsql/doc/src/sgml/ref/pg_dumpall.sgml  Mon Jan 15 13:34:31 2007
***
*** 23,28 
--- 23,29 
cmdsynopsis
 commandpg_dumpall/command
 arg rep=repeatreplaceableoption/replaceable/arg
+argreplaceabledbname/replaceable/arg
/cmdsynopsis
   /refsynopsisdiv
  
***
*** 354,359 
--- 355,372 
 /para
/listitem
   /varlistentry
+ 
+  varlistentry
+   termreplaceable class=parameterdbname/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 quotepostgres/quote database will be used,
+  and if that does not exist, quotetemplate1/quote will be used.
+/para
+   /listitem
+  /varlistentry
 /variablelist
/para
   /refsect1
diff -c -r pgsql.orig/src/bin/pg_dump/pg_dumpall.c 
pgsql/src/bin/pg_dump/pg_dumpall.c
*** pgsql.orig/src/bin/pg_dump/pg_dumpall.c Mon Jan 15 13:26:07 2007
--- pgsql/src/bin/pg_dump/pg_dumpall.c  Mon Jan 15 12:52:34 2007
***
*** 75,80 
--- 75,81 
char   *pghost = NULL;
char   *pgport = NULL;
char   *pguser = NULL;
+   char   *pgdb = NULL;
boolforce_password = false;
booldata_only = false;
boolglobals_only = false;
***
*** 299,304 
--- 300,312 
if (use_setsessauth)
appendPQExpBuffer(pgdumpopts,  
--use-set-session-authorization);
  
+ /* If there is an argument left, assume it's a database name */
+   if (optind  argc)
+   {
+   pgdb = argv[optind];
+   optind++;
+   }
+ 
if (optind  argc)
{
fprintf(stderr, _(%s: too many command-line arguments (first 
is \%s\)\n),
***
*** 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
--- 345,384 
}
  
/*
!* 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);
!   }
!   }
  
  

Re: [pgsql-patches] pg_dumpall default database

2007-01-15 Thread Peter Eisentraut
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/

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


Re: [pgsql-patches] pg_dumpall default database

2007-01-15 Thread Dave Page
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.

---(end of broadcast)---
TIP 6: explain analyze is your friend


Re: [pgsql-patches] pg_dumpall default database

2007-01-15 Thread Neil Conway
On Mon, 2007-01-15 at 17:07 +, 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



---(end of broadcast)---
TIP 1: if posting/reading through Usenet, please send an appropriate
   subscribe-nomail command to [EMAIL PROTECTED] so that your
   message can get through to the mailing list cleanly


Re: [pgsql-patches] pg_dumpall default database

2007-01-15 Thread Tom Lane
Dave Page [EMAIL PROTECTED] 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

---(end of broadcast)---
TIP 4: Have you searched our list archives?

   http://archives.postgresql.org


Re: [pgsql-patches] pg_dumpall default database

2007-01-15 Thread Albe Laurenz
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

---(end of broadcast)---
TIP 3: Have you checked our extensive FAQ?

   http://www.postgresql.org/docs/faq