更新: 能够在 pg_dump 命令期间排除表中的数据。比尝试不加载数据更快,因为您不必等待该数据被转储。
--exclude-table-data=event_logs
(PostgreSQL) 9.4.4
任何人都知道如何在执行时排除表格pg_restore
?我可以在做pg_dump
. 但是我不是做转储的人,也不能排除他们。
转储中有 2 个表非常大,并且在我进行还原时需要很长时间,所以我想跳过它们。
更新: 能够在 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
以下将返回所有 except table_to_ignore
(grep
选项-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 表
--表=表
仅恢复命名表的定义和/或数据。可以使用多个 -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