Tom Lane wrote:
> Dave Page <[EMAIL PROTECTED]> writes:
>> pg_dumpall -g  -- Dump roles and tablespaces per current behaviour
>> pg_dumpall -gr -- Dump roles only (or users and groups)
>> pg_dumpall -gt -- Dump tablespaces only
> 
> This seems a bit ugly, mainly because (1) it doesn't have a natural
> translation to long-form switches, and (2) it screws up the usual
> habit of merging multiple single-letter switches into one argument.
> Perhaps something like
> 
>       --roles-only
>       --tablespaces-only
>       --globals-only
> 
> Not sure if there are free single-letter codes for the first two,
> but on the whole I'm more interested in having sane long-form names
> than sane short ones ...

Revised patch attached - it now has

-r --roles-only
-t --tablespaces-only
-g --globals-only

Regards, Dave.

Index: doc/src/sgml/ref/pg_dumpall.sgml
===================================================================
RCS file: /projects/cvsroot/pgsql/doc/src/sgml/ref/pg_dumpall.sgml,v
retrieving revision 1.58
diff -c -r1.58 pg_dumpall.sgml
*** doc/src/sgml/ref/pg_dumpall.sgml    7 Oct 2006 20:59:04 -0000       1.58
--- doc/src/sgml/ref/pg_dumpall.sgml    15 Jan 2007 09:10:31 -0000
***************
*** 134,140 ****
        <term><option>--globals-only</option></term>
        <listitem>
         <para>
!         Dump only global objects (users and groups), no databases.
         </para>
        </listitem>
       </varlistentry>
--- 134,140 ----
        <term><option>--globals-only</option></term>
        <listitem>
         <para>
!         Dump only global objects (roles and tablespaces), no databases.
         </para>
        </listitem>
       </varlistentry>
***************
*** 194,199 ****
--- 194,209 ----
       </varlistentry>
  
       <varlistentry>
+       <term><option>-r</option></term>
+       <term><option>--roles-only</option></term>
+       <listitem>
+        <para>
+         Dump only roles, no databases or tablespaces.
+        </para>
+       </listitem>
+      </varlistentry>
+ 
+      <varlistentry>
        <term><option>-s</option></term>
        <term><option>--schema-only</option></term>
        <listitem>
***************
*** 217,222 ****
--- 227,242 ----
       </varlistentry>
  
       <varlistentry>
+       <term><option>-t</option></term>
+       <term><option>--tablespaces-only</option></term>
+       <listitem>
+        <para>
+         Dump only tablespaces, no databases or roles.
+        </para>
+       </listitem>
+      </varlistentry>
+ 
+      <varlistentry>
        <term><option>-v</></term>
        <term><option>--verbose</></term>
        <listitem>
Index: src/bin/pg_dump/pg_dumpall.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/bin/pg_dump/pg_dumpall.c,v
retrieving revision 1.86
diff -c -r1.86 pg_dumpall.c
*** src/bin/pg_dump/pg_dumpall.c        5 Jan 2007 22:19:48 -0000       1.86
--- src/bin/pg_dump/pg_dumpall.c        15 Jan 2007 09:10:33 -0000
***************
*** 78,83 ****
--- 78,85 ----
        bool            force_password = false;
        bool            data_only = false;
        bool            globals_only = false;
+       bool            roles_only = false;
+       bool            tablespaces_only = false;
        bool            schema_only = false;
        PGconn     *conn;
        int                     encoding;
***************
*** 97,107 ****
                {"oids", no_argument, NULL, 'o'},
                {"no-owner", no_argument, NULL, 'O'},
                {"port", required_argument, NULL, 'p'},
!               {"password", no_argument, NULL, 'W'},
                {"schema-only", no_argument, NULL, 's'},
                {"superuser", required_argument, NULL, 'S'},
                {"username", required_argument, NULL, 'U'},
                {"verbose", no_argument, NULL, 'v'},
                {"no-privileges", no_argument, NULL, 'x'},
                {"no-acl", no_argument, NULL, 'x'},
  
--- 99,111 ----
                {"oids", no_argument, NULL, 'o'},
                {"no-owner", no_argument, NULL, 'O'},
                {"port", required_argument, NULL, 'p'},
!               {"roles-only", no_argument, NULL, 'r'},
                {"schema-only", no_argument, NULL, 's'},
                {"superuser", required_argument, NULL, 'S'},
+               {"tablespaces-only", no_argument, NULL, 't'},
                {"username", required_argument, NULL, 'U'},
                {"verbose", no_argument, NULL, 'v'},
+               {"password", no_argument, NULL, 'W'},
                {"no-privileges", no_argument, NULL, 'x'},
                {"no-acl", no_argument, NULL, 'x'},
  
***************
*** 161,167 ****
  
        pgdumpopts = createPQExpBuffer();
  
!       while ((c = getopt_long(argc, argv, "acdDgh:ioOp:sS:U:vWxX:", 
long_options, &optindex)) != -1)
        {
                switch (c)
                {
--- 165,171 ----
  
        pgdumpopts = createPQExpBuffer();
  
!       while ((c = getopt_long(argc, argv, "acdDgh:ioOp:rsS:tU:vWxX:", 
long_options, &optindex)) != -1)
        {
                switch (c)
                {
***************
*** 214,219 ****
--- 218,227 ----
                                appendPQExpBuffer(pgdumpopts, " -p \"%s\"", 
pgport);
  #endif
                                break;
+                               
+                       case 'r':
+                               roles_only = true;
+                               break;
  
                        case 's':
                                schema_only = true;
***************
*** 227,232 ****
--- 235,244 ----
                                appendPQExpBuffer(pgdumpopts, " -S \"%s\"", 
optarg);
  #endif
                                break;
+                               
+                       case 't':
+                               tablespaces_only = true;
+                               break;
  
                        case 'U':
                                pguser = optarg;
***************
*** 295,300 ****
--- 307,340 ----
                                progname);
                exit(1);
        }
+       
+       /* Make sure the user hasn't specified a mix of globals-only options */
+       if (globals_only && roles_only)
+       {
+               fprintf(stderr, _("%s: --globals-only and --roles-only cannot 
be used together\n"),
+                               progname);
+               fprintf(stderr, _("Try \"%s --help\" for more information.\n"),
+                               progname);
+               exit(1);
+       }
+       
+       if (globals_only && tablespaces_only)
+       {
+               fprintf(stderr, _("%s: --globals-only and --tablespaces-only 
cannot be used together\n"),
+                               progname);
+               fprintf(stderr, _("Try \"%s --help\" for more information.\n"),
+                               progname);
+               exit(1);
+       }
+       
+       if (roles_only && tablespaces_only)
+       {
+               fprintf(stderr, _("%s: --roles-only and --tablespaces-only 
cannot be used together\n"),
+                               progname);
+               fprintf(stderr, _("Try \"%s --help\" for more information.\n"),
+                               progname);
+               exit(1);
+       }
  
        /*
         * First try to connect to database "postgres", and failing that
***************
*** 332,356 ****
                        printf("SET escape_string_warning = 'off';\n");
                printf("\n");
  
!               /* Dump roles (users) */
!               dumpRoles(conn);
  
!               /* Dump role memberships --- need different method for pre-8.1 
*/
!               if (server_version >= 80100)
!                       dumpRoleMembership(conn);
!               else
!                       dumpGroups(conn);
  
!               /* Dump tablespaces */
!               if (server_version >= 80000)
!                       dumpTablespaces(conn);
  
                /* Dump CREATE DATABASE commands */
!               if (!globals_only)
                        dumpCreateDB(conn);
        }
  
!       if (!globals_only)
                dumpDatabases(conn);
  
        PQfinish(conn);
--- 372,402 ----
                        printf("SET escape_string_warning = 'off';\n");
                printf("\n");
  
!               if (!tablespaces_only)
!               {
!                       /* Dump roles (users) */
!                       dumpRoles(conn);
  
!                       /* Dump role memberships --- need different method for 
pre-8.1 */
!                       if (server_version >= 80100)
!                               dumpRoleMembership(conn);
!                       else
!                               dumpGroups(conn);
!               }
  
!               if (!roles_only)
!               {
!                       /* Dump tablespaces */
!                       if (server_version >= 80000)
!                               dumpTablespaces(conn);
!               }
  
                /* Dump CREATE DATABASE commands */
!               if (!globals_only && !roles_only && !tablespaces_only)
                        dumpCreateDB(conn);
        }
  
!       if (!globals_only && !roles_only && !tablespaces_only)
                dumpDatabases(conn);
  
        PQfinish(conn);
***************
*** 381,391 ****
        printf(_("  -c, --clean              clean (drop) databases prior to 
create\n"));
        printf(_("  -d, --inserts            dump data as INSERT, rather than 
COPY, commands\n"));
        printf(_("  -D, --column-inserts     dump data as INSERT commands with 
column names\n"));
!       printf(_("  -g, --globals-only       dump only global objects, no 
databases\n"));
        printf(_("  -o, --oids               include OIDs in dump\n"));
        printf(_("  -O, --no-owner           skip restoration of object 
ownership\n"));
        printf(_("  -s, --schema-only        dump only the schema, no data\n"));
        printf(_("  -S, --superuser=NAME     specify the superuser user name to 
use in the dump\n"));
        printf(_("  -x, --no-privileges      do not dump privileges 
(grant/revoke)\n"));
        printf(_("  --disable-dollar-quoting\n"
                         "                           disable dollar quoting, 
use SQL standard quoting\n"));
--- 427,439 ----
        printf(_("  -c, --clean              clean (drop) databases prior to 
create\n"));
        printf(_("  -d, --inserts            dump data as INSERT, rather than 
COPY, commands\n"));
        printf(_("  -D, --column-inserts     dump data as INSERT commands with 
column names\n"));
!       printf(_("  -g, --globals-only       dump only global objects, no 
databases.\n"));
        printf(_("  -o, --oids               include OIDs in dump\n"));
        printf(_("  -O, --no-owner           skip restoration of object 
ownership\n"));
+       printf(_("  -r, --roles-only         dump only roles, no databases or 
tablespaces.\n"));
        printf(_("  -s, --schema-only        dump only the schema, no data\n"));
        printf(_("  -S, --superuser=NAME     specify the superuser user name to 
use in the dump\n"));
+       printf(_("  -t, --tablespaces-only   dump only tablespaces, no 
databases or roles.\n"));
        printf(_("  -x, --no-privileges      do not dump privileges 
(grant/revoke)\n"));
        printf(_("  --disable-dollar-quoting\n"
                         "                           disable dollar quoting, 
use SQL standard quoting\n"));
---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings

Reply via email to