仅使用psql恢复Postgres数据库:pg_restore -vs-


16

我正在使用pg_dump(以纯文本格式)转储Postgres数据库,然后仅通过使用psql(带有该-f选项)将其还原。

哪个问题出了问题:我是否没有通过使用pg_restore来丢失任何东西,而pg_restore看起来像是一种专门的还原工具(与通用相比psql)?

我可以通过使用pg_dump参数来控制诸如禁用触发器之类的选项。那么,这是pg_restore做什么用的呢?非纯文本转储格式?


4
在手册中:“ pg_restore是一种实用程序,用于从pg_dump创建的非明文格式之一的存档中恢复PostgreSQL数据库
a_horse_with_no_name 2014年

Answers:


19

如果创建了SQL格式的转储,则只能使用psql

如果创建了自定义格式(pg_dump -Fc)或目录格式(pg_dump -Fd)转储,则可以并且必须使用pg_restore

与普通的SQL脚本转储相比,自定义和目录格式转储具有很多优点,我专门使用它们。您可以选择只恢复一些表/架构,可以选择是否只包括架构,只有数据还是在恢复的时候,等你要指定的选项在很多pg_dump的时间与SQL格式的转储可以选择restore-时间,如果您使用自定义格式的转储和pg_restore

如果不是因为向后兼容性我敢肯定,默认pg_dump-Fc(自定义)格式。

如果不将SQL格式的转储还原到PostgreSQL数据库,然后转储还原的数据库,则无法将其转换为自定义格式或目录格式。


是否还可以批处理重命名函数并像使用具有良好regexp的sql文件一样进行数据处理?
velop

1
不,但是如果需要,您可以pg_restore不带dbname参数将其转换为SQL格式的转储。您不能做相反的事情。
克雷格·林格

@CraigRinger使用psql与使用pg_dump进行还原是否存在速度差异?
Nikunj Sardhara '17

2
@NikunjSardhara不常见,但pg_restore支持并行还原,如果使用它,它将更快。
Craig Ringer'Mar
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.