Thread: Allow dumping of roles or tablespaces
Per discussion on -hackers, the attached patch introduces an optional parameter to pg_dumpall's -g (--globals-only) option to allow roles or tablespaces to be dumped on their own. eg. 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 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 12 Jan 2007 14:01:10 -0000 *************** *** 130,140 **** </varlistentry> <varlistentry> ! <term><option>-g</option></term> ! <term><option>--globals-only</option></term> <listitem> <para> ! Dump only global objects (users and groups), no databases. </para> </listitem> </varlistentry> --- 130,145 ---- </varlistentry> <varlistentry> ! <term><option>-g[<replaceable class="parameter">r</replaceable>|<replaceable class="parameter">t</replaceable></option></term> ! <term><option>--globals-only[=<replaceable class="parameter">r</replaceable>|<replaceable class="parameter">t</replaceable></option></term> <listitem> <para> ! Dump only global objects (roles and/or tablespaces), no databases. ! The <replaceable class="parameter">r</replaceable> parameter will ! cause only roles to be dumped, and the ! <replaceable class="parameter">t</replaceable> parameter will cause ! only tablespaces to be dumped. If no parameter is specified, all ! global object types will be dumped. </para> </listitem> </varlistentry> 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 12 Jan 2007 14:01:12 -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; *************** *** 91,97 **** {"inserts", no_argument, NULL, 'd'}, {"attribute-inserts", no_argument, NULL, 'D'}, {"column-inserts", no_argument, NULL, 'D'}, ! {"globals-only", no_argument, NULL, 'g'}, {"host", required_argument, NULL, 'h'}, {"ignore-version", no_argument, NULL, 'i'}, {"oids", no_argument, NULL, 'o'}, --- 93,99 ---- {"inserts", no_argument, NULL, 'd'}, {"attribute-inserts", no_argument, NULL, 'D'}, {"column-inserts", no_argument, NULL, 'D'}, ! {"globals-only", optional_argument, NULL, 'g'}, {"host", required_argument, NULL, 'h'}, {"ignore-version", no_argument, NULL, 'i'}, {"oids", no_argument, NULL, 'o'}, *************** *** 161,167 **** pgdumpopts = createPQExpBuffer(); ! while ((c = getopt_long(argc, argv, "acdDgh:ioOp:sS:U:vWxX:", long_options, &optindex)) != -1) { switch (c) { --- 163,169 ---- pgdumpopts = createPQExpBuffer(); ! while ((c = getopt_long(argc, argv, "acdDg::h:ioOp:sS:U:vWxX:", long_options, &optindex)) != -1) { switch (c) { *************** *** 181,186 **** --- 183,203 ---- case 'g': globals_only = true; + if (optarg) + { + if (strcmp(optarg, "r") == 0) + roles_only = true; + else if (strcmp(optarg, "t") == 0) + tablespaces_only = true; + else + { + fprintf(stderr, + _("%s: invalid -g option -- %s\n"), + progname, optarg); + fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); + exit(1); + } + } break; case 'h': *************** *** 332,349 **** 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) --- 349,372 ---- 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) *************** *** 381,387 **** 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")); --- 404,410 ---- 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=[r|t] dump only global objects, no databases. Optionally restrict to roles or tablespaces\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"));
Dave Page <dpage@postgresql.org> 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 ... regards, tom lane
Tom Lane wrote: > Dave Page <dpage@postgresql.org> 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 ... > > > I agree. In fact, as I understand the patch it would also allow "-g r" and "-g t", and that seems ugly too. We don't have to have a short form for every long option - e.g. initdb has several like --no-locale for which there is no corresponding short form. I suggest we make the new options long form only, along the lines Tom suggests. cheers andrew
Andrew Dunstan wrote: > Tom Lane wrote: >> Dave Page <dpage@postgresql.org> 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 ... >> >> >> > > I agree. In fact, as I understand the patch it would also allow "-g r" > and "-g t", and that seems ugly too. > > We don't have to have a short form for every long option - e.g. initdb > has several like --no-locale for which there is no corresponding short > form. I suggest we make the new options long form only, along the lines > Tom suggests. OK, no probs. I'll fix it up as Tom suggests. Regards, Dave.
Am Freitag, 12. Januar 2007 15:08 schrieb Dave Page: > 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 Also note that optional argument specifications in getopt like "g::" are not portable, so this cannot be implemented in the first place. -- Peter Eisentraut http://developer.postgresql.org/~petere/
Tom Lane wrote: > Dave Page <dpage@postgresql.org> 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"));
Patch applied. Thanks. --------------------------------------------------------------------------- Dave Page wrote: > Tom Lane wrote: > > Dave Page <dpage@postgresql.org> 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 -- Bruce Momjian bruce@momjian.us EnterpriseDB http://www.enterprisedb.com + If your life is a hard drive, Christ can be your backup. +