为特定的表和条目创建数据库转储


94

我有一个包含数百个表的数据库,我需要做的是导出指定的表并将数据的插入语句插入一个sql文件。

我知道的唯一可以实现这一目标的语句是

pg_dump -D -a -t zones_seq interway > /tmp/zones_seq.sql

我应该为每个表运行此语句还是有一种方法可以运行类似的语句将所有选定的表导出到一个大sql big中。上面的pg_dump不会只导出表模式插入,我需要两个

任何帮助将不胜感激。

Answers:


160

直接来自手册:“可以通过编写多个-t开关来选择多个表

因此,您需要列出所有表格

pg_dump --column-inserts -a -t zones_seq -t interway -t table_3 ... > /tmp/zones_seq.sql  

请注意,如果您有多个具有相同前缀(或后缀)的表,则还可以使用通配符通过以下-t参数选择它们:

而且,根据psql的\ d命令使用的相同规则,将表参数解释为模式


20
-T开关的方法相同,但用于排除表。如果你需要的一切,但一个或两个表等可能是有用的
斯科特·马洛

4
-D选项似乎在PG 9.1及更高版本中已消失
Epigene

5
-D选项已在8.4版删除。您必须--column-inserts现在使用。
mlovic

1
尝试pg_dump --host 127.0.0.1 --port 5432 --username“ <username>” --column-inserts --verbose --file“ / tmp / <filename.sql>” --table“ ^ <regex> ** “” <tablename>“
Tharindu Jayasuriya

22

如果那些特定的表与特定的正则表达式匹配,则可以在pg_dump的-t选项中使用正则表达式。

pg_dump -D -a -t zones_seq -t interway -t "<regex>" -f /tmp/zones_seq.sql <DBNAME>

例如,转储以“ test”开头的表,您可以使用

pg_dump -D -a -t zones_seq -t interway -t "^test*" -f /tmp/zones_seq.sql <DBNAME>

3
如果它是一个正则表达式,^test.*不是^test*吗?
msrd0

5
它不是正则表达式,它使用postgres的“模式”,因此实际上应该是"test*"postgresql.org/docs/current/app-psql.html#APP-PSQL-PATTERNS
elliotcm

使用正则表达式并不简单,生成无效的正则表达式:限定符操作数无效错误。但是正则表达式是正确的……只有非常简单的正则表达式才有效
Peter Krauss
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.