Richard van den Berg wrote:
> Since I needed this feature badly, I added the -n / --schema switch to 
> 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.
> 
> This patches works for me, but it could use more testing.
> 
> Please Cc me in the discussion, as I am not on these lists.
> 
> I used the current CVS tree at 
> :pserver:[EMAIL PROTECTED]:/projects/cvsroot as a starting 
> point.

I have applied your patch with minor wording changes --- new version
attached.  It will appear in 8.1.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
Index: doc/src/sgml/ref/pg_restore.sgml
===================================================================
RCS file: /cvsroot/pgsql/doc/src/sgml/ref/pg_restore.sgml,v
retrieving revision 1.51
diff -c -c -r1.51 pg_restore.sgml
*** doc/src/sgml/ref/pg_restore.sgml    29 May 2005 03:32:18 -0000      1.51
--- doc/src/sgml/ref/pg_restore.sgml    9 Jun 2005 17:55:54 -0000
***************
*** 240,245 ****
--- 240,257 ----
       </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>
        <listitem>
Index: src/bin/pg_dump/pg_backup.h
===================================================================
RCS file: /cvsroot/pgsql/src/bin/pg_dump/pg_backup.h,v
retrieving revision 1.34
diff -c -c -r1.34 pg_backup.h
*** src/bin/pg_dump/pg_backup.h 6 Nov 2004 19:36:01 -0000       1.34
--- src/bin/pg_dump/pg_backup.h 9 Jun 2005 17:55:55 -0000
***************
*** 98,103 ****
--- 98,104 ----
        char       *indexNames;
        char       *functionNames;
        char       *tableNames;
+       char       *schemaNames;
        char       *triggerNames;
  
        int                     useDB;
Index: src/bin/pg_dump/pg_backup_archiver.c
===================================================================
RCS file: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_archiver.c,v
retrieving revision 1.109
diff -c -c -r1.109 pg_backup_archiver.c
*** src/bin/pg_dump/pg_backup_archiver.c        17 May 2005 17:30:29 -0000      
1.109
--- src/bin/pg_dump/pg_backup_archiver.c        9 Jun 2005 17:55:56 -0000
***************
*** 1997,2002 ****
--- 1997,2010 ----
        /* 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: src/bin/pg_dump/pg_restore.c
===================================================================
RCS file: /cvsroot/pgsql/src/bin/pg_dump/pg_restore.c,v
retrieving revision 1.70
diff -c -c -r1.70 pg_restore.c
*** src/bin/pg_dump/pg_restore.c        29 Apr 2005 07:08:06 -0000      1.70
--- src/bin/pg_dump/pg_restore.c        9 Jun 2005 17:55:57 -0000
***************
*** 103,108 ****
--- 103,109 ----
                {"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,147 ****
                }
        }
  
!       while ((c = getopt_long(argc, argv, 
"acCd:ef:F:h:iI:lL:Op:P:RsS:t:T:uU:vWxX:",
                                                        cmdopts, NULL)) != -1)
        {
                switch (c)
--- 142,148 ----
                }
        }
  
!       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,228 ****
--- 224,234 ----
                                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,380 ****
--- 381,387 ----
        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"));
---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster

Reply via email to