为什么pg_restore成功返回却没有真正恢复我的数据库?


71

我在使用以下命令转储的Linux服务器上有一个Postgres 8.4数据库:

pg_dump --format=c --exclude-table=log --file=/path/to/output my_db

然后,我将创建的文件通过FTP传输到本地Windows 7计算机,并尝试使用以下命令将文件还原到本地Postgres 8.4实例:

pg_restore --create --exit-on-error --verbose c:\path\to\file

restore命令会产生大量输出,声称它创建了我的数据库,并连接到该数据库,然后按预期创建了所有其他表。但是,当我通过pgAdmin查看本地计算机上的数据库时,还原的数据库根本不存在。

为了排除故障,我尝试了以下命令:

pg_restore --create --exit-on-error --verbose --host=blahblah --username=no_one c:\path\to\file

即使给出的主机名和用户名完全是胡说八道,当我运行此命令时,我仍然从命令中获得完全相同的输出,而没有任何错误。

有没有人遇到过这个问题或知道会导致什么呢?

Answers:


123

您必须添加一个有效数据库的名称才能初始连接,否则它将只是将内容转储到STDOUT:

pg_restore --create --exit-on-error --verbose --dbname=postgres <backup_file>

66
为什么在pg_restore文档中没有提到大红色?!
Yo Ludke 2014年

9
6年后,我遇到了同样的问题,最后偶然发现了这个问题,将其解决了。我不敢相信文档仍然不固定,或者命令输出中没有任何内容可以让用户知道它实际上没有做任何事情。对于尝试使用PostgreSQL的新手来说,严重的可用性问题。
詹姆斯

1
告诉我怎么回事儿。至少要花两个小时。公平地说:在手册页的第二段中是这样说的。
jnns

6
@YoLudke,因为posgres文档是世界上最糟糕的文档
Marco Prins

3
好的,我认为只有我发现文档难以理解
user798719

10

这仍然令人困惑,我试图执行该操作,即--dbname应该是我要创建的数据库。

pg_restore --create --exit-on-error --verbose --dbname=jiradb jiradb.tar

错误!!

它的字面意义应该是--dbname = postgres,然后--create将根据文件中的名称创建实际的db。就我而言,我是从tar备份还原的

pg_restore --create --exit-on-error --verbose --dbname=postgres jiradb.tar
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.