Allow pg_dumpall to specify a database name rather than the default
authorBruce Momjian
Thu, 25 Jan 2007 02:46:33 +0000 (02:46 +0000)
committerBruce Momjian
Thu, 25 Jan 2007 02:46:33 +0000 (02:46 +0000)
'template1'.

Dave Page

doc/src/sgml/ref/pg_dumpall.sgml
src/bin/pg_dump/pg_dumpall.c

index 3f40be0f4a0c6445b9c6a13f9a6186356031d682..0a3b44c48ab620789bea0477ebf50e42e86a30a4 100644 (file)
@@ -1,5 +1,5 @@
 
 
@@ -313,6 +313,7 @@ PostgreSQL documentation
    
      
       -h host
+      --host=host
       
        
         Specifies the host name of the machine on which the database
@@ -323,9 +324,23 @@ PostgreSQL documentation
        
       
      
+    
+     
+      -l dbname
+      --database=dbname
+      
+       
+         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 postgres database will be used,
+         and if that does not exist, template1 will be used.
+       
+      
+     
 
      
       -p port
+      --port=port
       
        
         Specifies the TCP port or local Unix domain socket file
@@ -338,6 +353,7 @@ PostgreSQL documentation
 
      
       -U username
+      --username=username
       
        
         Connect as the given user.
@@ -347,6 +363,7 @@ PostgreSQL documentation
 
      
       -W
+       --password
       
        
         Force a password prompt.  This should happen automatically if
index 697754e7ec675ecb8b1d698842dfbc7718cd83c1..66c66d8a1a45f5ebd7a4a5c4bd6a795692dbff89 100644 (file)
@@ -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"));