aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Eisentraut <peter_e@gmx.net>2016-09-20 12:00:00 -0400
committerPeter Eisentraut <peter_e@gmx.net>2016-09-20 12:00:00 -0400
commit46b55e7f853dc0ef60ae3b1042b883fa4ffac95f (patch)
tree3b0dc6a4221e701d08bfcdfc951adb1d8826558f
parent16d1adb35cf887325b7c5dbf473632d557065171 (diff)
downloadpostgresql-46b55e7f853dc0ef60ae3b1042b883fa4ffac95f.tar.gz
postgresql-46b55e7f853dc0ef60ae3b1042b883fa4ffac95f.zip
pg_restore: Add -N option to exclude schemas
This is similar to the -N option in pg_dump, except that it doesn't take a pattern, just like the existing -n option in pg_restore. From: Michael Banck <michael.banck@credativ.de>
-rw-r--r--doc/src/sgml/ref/pg_restore.sgml18
-rw-r--r--src/bin/pg_dump/pg_backup.h1
-rw-r--r--src/bin/pg_dump/pg_backup_archiver.c5
-rw-r--r--src/bin/pg_dump/pg_restore.c8
4 files changed, 30 insertions, 2 deletions
diff --git a/doc/src/sgml/ref/pg_restore.sgml b/doc/src/sgml/ref/pg_restore.sgml
index c9069193afc..bd5b4053145 100644
--- a/doc/src/sgml/ref/pg_restore.sgml
+++ b/doc/src/sgml/ref/pg_restore.sgml
@@ -302,7 +302,7 @@
</varlistentry>
<varlistentry>
- <term><option>-n <replaceable class="parameter">namespace</replaceable></option></term>
+ <term><option>-n <replaceable class="parameter">schema</replaceable></option></term>
<term><option>--schema=<replaceable class="parameter">schema</replaceable></option></term>
<listitem>
<para>
@@ -315,6 +315,22 @@
</varlistentry>
<varlistentry>
+ <term><option>-N <replaceable class="parameter">schema</replaceable></option></term>
+ <term><option>--exclude-schema=<replaceable class="parameter">schema</replaceable></option></term>
+ <listitem>
+ <para>
+ Do not restore objects that are in the named schema. Multiple schemas
+ to be excluded may be specified with multiple <option>-N</> switches.
+ </para>
+
+ <para>
+ When both <option>-n</> and <option>-N</> are given for the same
+ schema name, the <option>-N</> switch wins and the schema is excluded.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term><option>-O</option></term>
<term><option>--no-owner</option></term>
<listitem>
diff --git a/src/bin/pg_dump/pg_backup.h b/src/bin/pg_dump/pg_backup.h
index 4afa92f5f67..0a28124cf60 100644
--- a/src/bin/pg_dump/pg_backup.h
+++ b/src/bin/pg_dump/pg_backup.h
@@ -99,6 +99,7 @@ typedef struct _restoreOptions
SimpleStringList indexNames;
SimpleStringList functionNames;
SimpleStringList schemaNames;
+ SimpleStringList schemaExcludeNames;
SimpleStringList triggerNames;
SimpleStringList tableNames;
diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c
index 05bdbdbf02a..a69b06f6d76 100644
--- a/src/bin/pg_dump/pg_backup_archiver.c
+++ b/src/bin/pg_dump/pg_backup_archiver.c
@@ -2751,6 +2751,11 @@ _tocEntryRequired(TocEntry *te, teSection curSection, RestoreOptions *ropt)
return 0;
}
+ if (ropt->schemaExcludeNames.head != NULL
+ && te->namespace
+ && simple_string_list_member(&ropt->schemaExcludeNames, te->namespace))
+ return 0;
+
if (ropt->selTypes)
{
if (strcmp(te->desc, "TABLE") == 0 ||
diff --git a/src/bin/pg_dump/pg_restore.c b/src/bin/pg_dump/pg_restore.c
index fb08e6bb8ef..b21fd263b07 100644
--- a/src/bin/pg_dump/pg_restore.c
+++ b/src/bin/pg_dump/pg_restore.c
@@ -85,6 +85,7 @@ main(int argc, char **argv)
{"data-only", 0, NULL, 'a'},
{"dbname", 1, NULL, 'd'},
{"exit-on-error", 0, NULL, 'e'},
+ {"exclude-schema", 1, NULL, 'N'},
{"file", 1, NULL, 'f'},
{"format", 1, NULL, 'F'},
{"function", 1, NULL, 'P'},
@@ -148,7 +149,7 @@ main(int argc, char **argv)
}
}
- while ((c = getopt_long(argc, argv, "acCd:ef:F:h:I:j:lL:n:Op:P:RsS:t:T:U:vwWx1",
+ while ((c = getopt_long(argc, argv, "acCd:ef:F:h:I:j:lL:n:N:Op:P:RsS:t:T:U:vwWx1",
cmdopts, NULL)) != -1)
{
switch (c)
@@ -196,6 +197,10 @@ main(int argc, char **argv)
simple_string_list_append(&opts->schemaNames, optarg);
break;
+ case 'N': /* Do not dump data for this schema */
+ simple_string_list_append(&opts->schemaExcludeNames, optarg);
+ break;
+
case 'O':
opts->noOwner = 1;
break;
@@ -456,6 +461,7 @@ usage(const char *progname)
printf(_(" -L, --use-list=FILENAME use table of contents from this file for\n"
" selecting/ordering output\n"));
printf(_(" -n, --schema=NAME restore only objects in this schema\n"));
+ printf(_(" -N, --exclude-schema=NAME do not restore objects in this schema\n"));
printf(_(" -O, --no-owner skip restoration of object ownership\n"));
printf(_(" -P, --function=NAME(args) restore named function\n"));
printf(_(" -s, --schema-only restore only the schema, no data\n"));