繁体   English   中英

在 pg_restore 期间排除表

[英]Exclude Table during pg_restore

更新:能够在 pg_dump 命令期间排除表中的数据。 比尝试不加载数据更快,因为您不必等待数据被转储。

--exclude-table-data=event_logs

(PostgreSQL) 9.4.4

有人知道如何在执行pg_restore时排除表吗? 我可以在执行pg_dump时找到如何做到这一点。 但是,我不是进行转储的人,也不能排除它们。

转储中有 2 个表,它们非常大,并且在我进行恢复时需要花费很长时间,所以我想跳过它们。

我有同样的问题。 一个长表列表,我想从几个表中排除数据。

我所做的是以下内容:

运行

pg_restore -l $pgdump_file > restore.pgdump.list

在编辑器中打开该restore.pgdump.list文件,并插入一个; 在行前说

;2429; 0 27550 TABLE DATA public <table_to_explore> <database>

保存该文件后,它现在可以用于导入,其中所有行都以;开头; 被忽略。

pg_restore -L restore.pgdump.list | psql

你可以做一个单行添加; 在具有特定表名的行之前,如果您完全想忽略特定表。

man pg_restore也在文档末尾的示例中讲述了这一点。

TL;DR 单线

pg_restore -L <(pg_restore -l /path/to/db/dump | grep -v 'TABLE DATA public table_to_ignore') -d db_name_where_to_restore /path/to/db/dump

以下返回还原的“待办事项列表”:

pg_restore -l /path/to/db/dump 

以下将返回除table_to_ignore之外的所有table_to_ignoregrep选项-v使其反向匹配):

pg_restore -l /path/to/db/dump | grep -v 'TABLE DATA public table_to_ignore'

这可以与pg_restore选项-L结合使用,该选项需要输入待办事项列表:

pg_restore -L <(pg_restore -l /path/to/db/dump | grep -v 'TABLE DATA public table_to_ignore') -d db_name_where_to_restore /path/to/db/dump

如果你有几个表要忽略,你可以 grep 到:

pg_restore -l /path/to/db/dump | grep -vE 'TABLE DATA public (table_1|table_2|table_3)'

请注意-E选项的存在,用于grep使用扩展的正则表达式。

pg_restore没有排除表参数,它有一个包含表参数。

-t 表

--table=table

仅恢复命名表的定义和/或数据。 可以使用多个 -t 开关指定多个表。 这可以与 -n 选项结合使用来指定模式。

如果您有大量表格,它确实需要一点点输入,但它确实允许您通过将特定表格的名称排除在列表之外来排除它们。

这里命令不起作用:

pg_restore -L restore.pgdump.list | psql

由 Jesper Grann Laursen 回答!

这里它按照以下顺序工作:

pg_restore -l $pgdump_file > restore.pgdump.list

;2429; 0 27550 TABLE DATA public <table_to_explore> <database>

pg_restore -v -L restore.pgdump.list -d dbname pgdump.file

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM