为什么pg_restore成功返回但实际上没有恢复我的数据库?

时间:2011-05-05 16:09:10

标签: postgresql pg-dump pg-restore

我在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

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

之前是否有人遇到此问题或知道可能导致此问题?

2 个答案:

答案 0 :(得分:103)

您必须添加最初连接的有效数据库的名称,否则它只会将内容转储到STDOUT:

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

答案 1 :(得分:3)

这仍然令人困惑,我试图执行该操作,即--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