在pg_restore期间排除表

cov*_*ard 17 postgresql pg-restore

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

--exclude-table-data=event_logs

(PostgreSQL) 9.4.4

有人知道如何排除表格pg_restore吗?我可以在做的时候找到怎么做pg_dump.但是我不是那个进行转储的人,也不能排除它们.

转储中有2个表非常大,当我进行恢复时会永远占用,所以我想跳过它们.

Jes*_*sen 43

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

我做的是以下内容:

pg_restore -l $pgdump_file > restore.pgdump.list
Run Code Online (Sandbox Code Playgroud)

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

;2429; 0 27550 TABLE DATA public <table_to_explore> <database>
Run Code Online (Sandbox Code Playgroud)

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

pg_restore -L restore.pgdump.list | psql
Run Code Online (Sandbox Code Playgroud)

;如果您完全想忽略特定的表,可以在具有特定表名的行前面添加一行代码.

man pg_restore 在文档的最后一个例子中也说明了这一点.

  • 谢谢你,救命啊!正如`man pg_restore`中所指出的那样,一旦您编辑了`restore.pgdump.list`文件(来自您的示例),就可以调用`pg_restore -L db.list db.dump`(在您的示例中,您可以调用pg_restore并将其通过管道传递到psql;但是,您没有指定转储文件的路径。 (2认同)

use*_*194 11

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
Run Code Online (Sandbox Code Playgroud)

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

pg_restore -l /path/to/db/dump 
Run Code Online (Sandbox Code Playgroud)

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

pg_restore -l /path/to/db/dump | grep -v 'TABLE DATA public table_to_ignore'
Run Code Online (Sandbox Code Playgroud)

这可以与需要输入待办事项列表的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
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 您需要在表名后添加一个空格,例如“TABLE DATA public (table_1|table_2|table_3) ”,否则“table_1”也会匹配“table_11”等。 (2认同)

e4c*_*4c5 9

pg_restore没有exclude table参数,它具有的是include表参数.

-t表

--table =表

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

如果你有大量的表,它确实需要一点点的输入,但它确实允许你通过将他们的名字从列表中删除来排除特定的表.

  • 谢谢。是的,我们有很多表,但我正在做一个 rake 任务来自动化这个任务,所以我只需要做一次。可以循环遍历表并有 2 个表的排除列表。 (2认同)

小智 6

这里命令不起作用:

pg_restore -L restore.pgdump.list | psql
Run Code Online (Sandbox Code Playgroud)

杰斯珀·格兰·劳尔森 (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
Run Code Online (Sandbox Code Playgroud)