Commit 5671aaca authored by Tom Lane's avatar Tom Lane

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
parent a5d489cc
...@@ -497,8 +497,10 @@ PostgreSQL documentation ...@@ -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
......
...@@ -395,10 +395,39 @@ ...@@ -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
</para> 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>
<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 @@ ...@@ -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.
......
...@@ -2663,7 +2663,13 @@ _tocEntryRequired(TocEntry *te, teSection curSection, RestoreOptions *ropt) ...@@ -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;
......
...@@ -227,7 +227,7 @@ main(int argc, char **argv) ...@@ -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) ...@@ -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"));
......
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