Commit da85fb47 authored by Heikki Linnakangas's avatar Heikki Linnakangas

Accept multiple -I, -P, -T and -n options in pg_restore.

We already did this for -t (--table) in 9.3, but missed the other similar
options. For consistency, allow all of them to be specified multiple times.

Unfortunately it's too late to sneak this into 9.3, so commit to master
only.
parent e246cfc9
...@@ -230,7 +230,8 @@ ...@@ -230,7 +230,8 @@
<term><option>--index=<replaceable class="parameter">index</replaceable></option></term> <term><option>--index=<replaceable class="parameter">index</replaceable></option></term>
<listitem> <listitem>
<para> <para>
Restore definition of named index only. Restore definition of named index only. Multiple indexes
may be specified with multiple <option>-I</> switches.
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
...@@ -314,7 +315,8 @@ ...@@ -314,7 +315,8 @@
<term><option>--schema=<replaceable class="parameter">schema</replaceable></option></term> <term><option>--schema=<replaceable class="parameter">schema</replaceable></option></term>
<listitem> <listitem>
<para> <para>
Restore only objects that are in the named schema. This can be Restore only objects that are in the named schema. Multiple schemas
may be specified with multiple <option>-n</> switches. This can be
combined with the <option>-t</option> option to restore just a combined with the <option>-t</option> option to restore just a
specific table. specific table.
</para> </para>
...@@ -348,7 +350,8 @@ ...@@ -348,7 +350,8 @@
<para> <para>
Restore the named function only. Be careful to spell the function Restore the named function only. Be careful to spell the function
name and arguments exactly as they appear in the dump file's table name and arguments exactly as they appear in the dump file's table
of contents. of contents. Multiple functions may be specified with multiple
<option>-P</> switches.
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
...@@ -413,7 +416,8 @@ ...@@ -413,7 +416,8 @@
<term><option>--trigger=<replaceable class="parameter">trigger</replaceable></option></term> <term><option>--trigger=<replaceable class="parameter">trigger</replaceable></option></term>
<listitem> <listitem>
<para> <para>
Restore named trigger only. Restore named trigger only. Multiple triggers may be specified with
multiple <option>-T</> switches.
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
......
...@@ -129,10 +129,10 @@ typedef struct _restoreOptions ...@@ -129,10 +129,10 @@ typedef struct _restoreOptions
int selFunction; int selFunction;
int selTrigger; int selTrigger;
int selTable; int selTable;
char *indexNames; SimpleStringList indexNames;
char *functionNames; SimpleStringList functionNames;
char *schemaNames; SimpleStringList schemaNames;
char *triggerNames; SimpleStringList triggerNames;
SimpleStringList tableNames; SimpleStringList tableNames;
int useDB; int useDB;
......
...@@ -2456,12 +2456,12 @@ _tocEntryRequired(TocEntry *te, teSection curSection, RestoreOptions *ropt) ...@@ -2456,12 +2456,12 @@ _tocEntryRequired(TocEntry *te, teSection curSection, RestoreOptions *ropt)
} }
/* Check options for selective dump/restore */ /* Check options for selective dump/restore */
if (ropt->schemaNames) if (ropt->schemaNames.head != NULL)
{ {
/* If no namespace is specified, it means all. */ /* If no namespace is specified, it means all. */
if (!te->namespace) if (!te->namespace)
return 0; return 0;
if (strcmp(ropt->schemaNames, te->namespace) != 0) if (!(simple_string_list_member(&ropt->schemaNames, te->namespace)))
return 0; return 0;
} }
...@@ -2479,21 +2479,21 @@ _tocEntryRequired(TocEntry *te, teSection curSection, RestoreOptions *ropt) ...@@ -2479,21 +2479,21 @@ _tocEntryRequired(TocEntry *te, teSection curSection, RestoreOptions *ropt)
{ {
if (!ropt->selIndex) if (!ropt->selIndex)
return 0; return 0;
if (ropt->indexNames && strcmp(ropt->indexNames, te->tag) != 0) if (ropt->indexNames.head != NULL && (!(simple_string_list_member(&ropt->indexNames, te->tag))))
return 0; return 0;
} }
else if (strcmp(te->desc, "FUNCTION") == 0) else if (strcmp(te->desc, "FUNCTION") == 0)
{ {
if (!ropt->selFunction) if (!ropt->selFunction)
return 0; return 0;
if (ropt->functionNames && strcmp(ropt->functionNames, te->tag) != 0) if (ropt->functionNames.head != NULL && (!(simple_string_list_member(&ropt->functionNames, te->tag))))
return 0; return 0;
} }
else if (strcmp(te->desc, "TRIGGER") == 0) else if (strcmp(te->desc, "TRIGGER") == 0)
{ {
if (!ropt->selTrigger) if (!ropt->selTrigger)
return 0; return 0;
if (ropt->triggerNames && strcmp(ropt->triggerNames, te->tag) != 0) if (ropt->triggerNames.head != NULL && (!(simple_string_list_member(&ropt->triggerNames, te->tag))))
return 0; return 0;
} }
else else
......
...@@ -196,7 +196,7 @@ main(int argc, char **argv) ...@@ -196,7 +196,7 @@ main(int argc, char **argv)
break; break;
case 'n': /* Dump data for this schema only */ case 'n': /* Dump data for this schema only */
opts->schemaNames = pg_strdup(optarg); simple_string_list_append(&opts->schemaNames, optarg);
break; break;
case 'O': case 'O':
...@@ -213,17 +213,17 @@ main(int argc, char **argv) ...@@ -213,17 +213,17 @@ main(int argc, char **argv)
case 'P': /* Function */ case 'P': /* Function */
opts->selTypes = 1; opts->selTypes = 1;
opts->selFunction = 1; opts->selFunction = 1;
opts->functionNames = pg_strdup(optarg); simple_string_list_append(&opts->functionNames, optarg);
break; break;
case 'I': /* Index */ case 'I': /* Index */
opts->selTypes = 1; opts->selTypes = 1;
opts->selIndex = 1; opts->selIndex = 1;
opts->indexNames = pg_strdup(optarg); simple_string_list_append(&opts->indexNames, optarg);
break; break;
case 'T': /* Trigger */ case 'T': /* Trigger */
opts->selTypes = 1; opts->selTypes = 1;
opts->selTrigger = 1; opts->selTrigger = 1;
opts->triggerNames = pg_strdup(optarg); simple_string_list_append(&opts->triggerNames, optarg);
break; break;
case 's': /* dump schema only */ case 's': /* dump schema only */
opts->schemaOnly = 1; opts->schemaOnly = 1;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment