Improve pg_restore's -t switch to match all types of relations.

-t will now match views, foreign tables, materialized views, and sequences,
not only plain tables.  This is more useful, and also more consistent with
the behavior of pg_dump's -t switch, which has always matched all relation
types.

We're still not there on matching pg_dump's behavior entirely, so mention
that in the docs.

Craig Ringer, reviewed by Pavel Stehule
This commit is contained in:
Tom Lane 2015-07-02 18:13:34 -04:00
parent a5d489ccb7
commit 5671aaca87
4 changed files with 46 additions and 9 deletions

View File

@ -497,8 +497,10 @@ PostgreSQL documentation
<term><option>--table=<replaceable class="parameter">table</replaceable></option></term> <term><option>--table=<replaceable class="parameter">table</replaceable></option></term>
<listitem> <listitem>
<para> <para>
Dump only tables (or views or sequences or foreign tables) matching Dump only tables with names matching
<replaceable class="parameter">table</replaceable>. Multiple tables <replaceable class="parameter">table</replaceable>.
For this purpose, <quote>table</> includes views, materialized views,
sequences, and foreign tables. Multiple tables
can be selected by writing multiple <option>-t</> switches. Also, the can be selected by writing multiple <option>-t</> switches. Also, the
<replaceable class="parameter">table</replaceable> parameter is <replaceable class="parameter">table</replaceable> parameter is
interpreted as a pattern according to the same rules used by interpreted as a pattern according to the same rules used by

View File

@ -395,10 +395,39 @@
<term><option>--table=<replaceable class="parameter">table</replaceable></option></term> <term><option>--table=<replaceable class="parameter">table</replaceable></option></term>
<listitem> <listitem>
<para> <para>
Restore definition and/or data of named table only. Multiple tables Restore definition and/or data of only the named table.
may be specified with multiple <option>-t</> switches. This can be For this purpose, <quote>table</> includes views, materialized views,
combined with the <option>-n</option> option to specify a schema. sequences, and foreign tables. Multiple tables
can be selected by writing multiple <option>-t</> switches.
This option can be combined with the <option>-n</option> option to
specify table(s) in a particular schema.
</para> </para>
<note>
<para>
When <option>-t</option> is specified, <application>pg_restore</>
makes no attempt to restore any other database objects that the
selected table(s) might depend upon. Therefore, there is no
guarantee that a specific-table restore into a clean database will
succeed.
</para>
</note>
<note>
<para>
This flag does not behave identically to the <option>-t</option>
flag of <application>pg_dump</application>. There is not currently
any provision for wild-card matching in <application>pg_restore</>,
nor can you include a schema name within its <option>-t</>.
</para>
</note>
<note>
<para>
In versions prior to <productname>PostgreSQL</> 9.6, this flag
matched only tables, not any other type of relation.
</para>
</note>
</listitem> </listitem>
</varlistentry> </varlistentry>
@ -494,7 +523,7 @@
fail if the user does not have the right to insert the rows from the fail if the user does not have the right to insert the rows from the
dump into the table. dump into the table.
</para> </para>
<para> <para>
Note that this option currently also requires the dump be in INSERT Note that this option currently also requires the dump be in INSERT
format as COPY TO does not support row security. format as COPY TO does not support row security.

View File

@ -2663,7 +2663,13 @@ _tocEntryRequired(TocEntry *te, teSection curSection, RestoreOptions *ropt)
if (ropt->selTypes) if (ropt->selTypes)
{ {
if (strcmp(te->desc, "TABLE") == 0 || if (strcmp(te->desc, "TABLE") == 0 ||
strcmp(te->desc, "TABLE DATA") == 0) strcmp(te->desc, "TABLE DATA") == 0 ||
strcmp(te->desc, "VIEW") == 0 ||
strcmp(te->desc, "FOREIGN TABLE") == 0 ||
strcmp(te->desc, "MATERIALIZED VIEW") == 0 ||
strcmp(te->desc, "MATERIALIZED VIEW DATA") == 0 ||
strcmp(te->desc, "SEQUENCE") == 0 ||
strcmp(te->desc, "SEQUENCE SET") == 0)
{ {
if (!ropt->selTable) if (!ropt->selTable)
return 0; return 0;

View File

@ -227,7 +227,7 @@ main(int argc, char **argv)
if (strlen(optarg) != 0) if (strlen(optarg) != 0)
opts->superuser = pg_strdup(optarg); opts->superuser = pg_strdup(optarg);
break; break;
case 't': /* Dump data for this table only */ case 't': /* Dump specified table(s) only */
opts->selTypes = 1; opts->selTypes = 1;
opts->selTable = 1; opts->selTable = 1;
simple_string_list_append(&opts->tableNames, optarg); simple_string_list_append(&opts->tableNames, optarg);
@ -455,7 +455,7 @@ usage(const char *progname)
printf(_(" -P, --function=NAME(args) restore named function\n")); printf(_(" -P, --function=NAME(args) restore named function\n"));
printf(_(" -s, --schema-only restore only the schema, no data\n")); printf(_(" -s, --schema-only restore only the schema, no data\n"));
printf(_(" -S, --superuser=NAME superuser user name to use for disabling triggers\n")); printf(_(" -S, --superuser=NAME superuser user name to use for disabling triggers\n"));
printf(_(" -t, --table=NAME restore named table\n")); printf(_(" -t, --table=NAME restore named relation (table, view, etc)\n"));
printf(_(" -T, --trigger=NAME restore named trigger\n")); printf(_(" -T, --trigger=NAME restore named trigger\n"));
printf(_(" -x, --no-privileges skip restoration of access privileges (grant/revoke)\n")); printf(_(" -x, --no-privileges skip restoration of access privileges (grant/revoke)\n"));
printf(_(" -1, --single-transaction restore as a single transaction\n")); printf(_(" -1, --single-transaction restore as a single transaction\n"));