From ebc8649892d02a9c6991e00d3e273670ca46fe56 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Thu, 9 Jun 2005 17:56:51 +0000 Subject: [PATCH] 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. Richard van den Bergg, CISSP --- doc/src/sgml/ref/pg_restore.sgml | 14 +++++++++++++- src/bin/pg_dump/pg_backup.h | 3 ++- src/bin/pg_dump/pg_backup_archiver.c | 10 +++++++++- src/bin/pg_dump/pg_restore.c | 11 +++++++++-- 4 files changed, 33 insertions(+), 5 deletions(-) diff --git a/doc/src/sgml/ref/pg_restore.sgml b/doc/src/sgml/ref/pg_restore.sgml index c401709165..54afdb154d 100644 --- a/doc/src/sgml/ref/pg_restore.sgml +++ b/doc/src/sgml/ref/pg_restore.sgml @@ -1,4 +1,4 @@ - + @@ -239,6 +239,18 @@ + + + + + + Restore only definitions and/or data in the named schema. Not to be + confused with the option. This can be combined with + option. + + + + diff --git a/src/bin/pg_dump/pg_backup.h b/src/bin/pg_dump/pg_backup.h index d606024f45..6a04cf14b3 100644 --- a/src/bin/pg_dump/pg_backup.h +++ b/src/bin/pg_dump/pg_backup.h @@ -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; diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c index be12cc4e59..8afe0fc8c5 100644 --- a/src/bin/pg_dump/pg_backup_archiver.c +++ b/src/bin/pg_dump/pg_backup_archiver.c @@ -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) diff --git a/src/bin/pg_dump/pg_restore.c b/src/bin/pg_dump/pg_restore.c index b99e3b7ada..24f286fac5 100644 --- a/src/bin/pg_dump/pg_restore.c +++ b/src/bin/pg_dump/pg_restore.c @@ -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")); -- 2.40.0