Since I needed this feature badly, I added the -n / --schema switch to
authorBruce Momjian <bruce@momjian.us>
Thu, 9 Jun 2005 17:56:51 +0000 (17:56 +0000)
committerBruce Momjian <bruce@momjian.us>
Thu, 9 Jun 2005 17:56:51 +0000 (17:56 +0000)
pg_restore. It restores the given schemaname only. It can be used in
conjunction with the -t and other switches to make the selection very
fine grained.

Richard van den Bergg, CISSP

doc/src/sgml/ref/pg_restore.sgml
src/bin/pg_dump/pg_backup.h
src/bin/pg_dump/pg_backup_archiver.c
src/bin/pg_dump/pg_restore.c

index c4017091651825bffef4089e1bf34318180eceb4..54afdb154d9fe1ecdc38c3c968ff4435ebeb354d 100644 (file)
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/ref/pg_restore.sgml,v 1.51 2005/05/29 03:32:18 momjian Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/ref/pg_restore.sgml,v 1.52 2005/06/09 17:56:51 momjian Exp $ -->
 
 <refentry id="APP-PGRESTORE">
  <refmeta>
       </listitem>
      </varlistentry>
 
+     <varlistentry>
+      <term><option>-n <replaceable class="parameter">namespace</replaceable></option></term>
+      <term><option>--schema=<replaceable class="parameter">schema</replaceable></option></term>
+      <listitem>
+       <para>
+        Restore only definitions and/or data in the named schema. Not to be
+        confused with the <option>-s</option> option.  This can be combined with
+        <option>-t</option> option.
+       </para>
+      </listitem>
+     </varlistentry>
+
      <varlistentry>
       <term><option>-O</option></term>
       <term><option>--no-owner</option></term>
index d606024f451e34956ae485d7395d1331497222af..6a04cf14b388001956c2c92b56b257d09bb5b3db 100644 (file)
@@ -15,7 +15,7 @@
  *
  *
  * IDENTIFICATION
- *     $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup.h,v 1.34 2004/11/06 19:36:01 tgl Exp $
+ *     $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup.h,v 1.35 2005/06/09 17:56:51 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -98,6 +98,7 @@ typedef struct _restoreOptions
    char       *indexNames;
    char       *functionNames;
    char       *tableNames;
+   char       *schemaNames;
    char       *triggerNames;
 
    int         useDB;
index be12cc4e592b0815ac0efb3ad7f8c44c75a5613c..8afe0fc8c54d4312b2ebc6d44b2c8007abff21cf 100644 (file)
@@ -15,7 +15,7 @@
  *
  *
  * IDENTIFICATION
- *     $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.109 2005/05/17 17:30:29 tgl Exp $
+ *     $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.110 2005/06/09 17:56:51 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1997,6 +1997,14 @@ _tocEntryRequired(TocEntry *te, RestoreOptions *ropt, bool include_acls)
    /* Check if tablename only is wanted */
    if (ropt->selTypes)
    {
+       if (ropt->schemaNames)
+       {
+           /* If no namespace is specified, it means all. */
+           if (!te->namespace)
+               return 0;
+           if(strcmp(ropt->schemaNames, te->namespace) != 0)
+               return 0;
+       }
        if ((strcmp(te->desc, "TABLE") == 0) || (strcmp(te->desc, "TABLE DATA") == 0))
        {
            if (!ropt->selTable)
index b99e3b7adad03b5e2dcabbd7ea0742fa85b7ceaa..24f286fac588f0177a0fb6298778a864bab4723e 100644 (file)
@@ -34,7 +34,7 @@
  *
  *
  * IDENTIFICATION
- *     $PostgreSQL: pgsql/src/bin/pg_dump/pg_restore.c,v 1.70 2005/04/29 07:08:06 neilc Exp $
+ *     $PostgreSQL: pgsql/src/bin/pg_dump/pg_restore.c,v 1.71 2005/06/09 17:56:51 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -103,6 +103,7 @@ main(int argc, char **argv)
        {"no-reconnect", 0, NULL, 'R'},
        {"port", 1, NULL, 'p'},
        {"password", 0, NULL, 'W'},
+       {"schema", 1, NULL, 'n'},
        {"schema-only", 0, NULL, 's'},
        {"superuser", 1, NULL, 'S'},
        {"table", 1, NULL, 't'},
@@ -141,7 +142,7 @@ main(int argc, char **argv)
        }
    }
 
-   while ((c = getopt_long(argc, argv, "acCd:ef:F:h:iI:lL:Op:P:RsS:t:T:uU:vWxX:",
+   while ((c = getopt_long(argc, argv, "acCd:ef:F:h:iI:lL:n:Op:P:RsS:t:T:uU:vWxX:",
                            cmdopts, NULL)) != -1)
    {
        switch (c)
@@ -223,6 +224,11 @@ main(int argc, char **argv)
                opts->tableNames = strdup(optarg);
                break;
 
+           case 'n':           /* Dump data for this schema only */
+               opts->selTypes = 1;
+               opts->schemaNames = strdup(optarg);
+               break;
+
            case 'u':
                opts->requirePassword = true;
                opts->username = simple_prompt("User name: ", 100, true);
@@ -375,6 +381,7 @@ usage(const char *progname)
    printf(_("  -I, --index=NAME         restore named index\n"));
    printf(_("  -L, --use-list=FILENAME  use specified table of contents for ordering\n"
             "                           output from this file\n"));
+   printf(_("  -n, --schema=NAME        restore only objects in this schema\n"));
    printf(_("  -O, --no-owner           skip restoration of object ownership\n"));
    printf(_("  -P, --function=NAME(args)\n"
             "                           restore named function\n"));