Re: [pgsql-patches] pg_dumpall default database
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
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
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
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
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
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
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
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