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

Mik*_*eck 60 postgresql pg-dump pg-restore

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

pg_dump --format=c --exclude-table=log --file=/path/to/output my_db
Run Code Online (Sandbox Code Playgroud)

然后我将创建的文件ftp到我的本地Windows 7计算机,并尝试使用以下命令将文件恢复到我的本地Postgres 8.4实例:

pg_restore --create --exit-on-error --verbose c:\path\to\file
Run Code Online (Sandbox Code Playgroud)

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

在尝试进行故障排除时,我尝试了以下命令:

pg_restore --create --exit-on-error --verbose --host=blahblah --username=no_one c:\path\to\file
Run Code Online (Sandbox Code Playgroud)

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

有没有人遇到这个或知道什么可以导致这个?

Mat*_*ood 109

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

pg_restore --create --exit-on-error --verbose --dbname=postgres <backup_file>
Run Code Online (Sandbox Code Playgroud)

  • 为什么不在pg_restore文档中提到大胖红?! (54认同)
  • +1.那肯定是一个很好的"陷阱". (20认同)
  • 6年后,我遇到了同样的问题,最后偶然发现了这个修复它的答案.我无法相信文档仍然没有修复,或者命令输出中没有任何东西让用户知道它实际上没有做任何事情.试图接收PostgreSQL的新人的严重可用性问题. (6认同)
  • @YoLudke因为posgres文档是世界上最糟糕的文档 (5认同)
  • 好吧,我以为只有我觉得文档难以理解 (3认同)
  • 告诉我怎么回事儿。两个小时(至少)就这样白费了。公平地说:手册页的第二段是这么说的。 (2认同)

tgu*_*unr 10

这仍然令人困惑,我试图执行这个 --dbname 应该是我想要创建的数据库的事情。

pg_restore --create --exit-on-error --verbose --dbname=jiradb jiradb.tar
Run Code Online (Sandbox Code Playgroud)

错误的!!

它应该字面上是--dbname=postgres,--create 然后将从文件中的名称创建真正的数据库。就我而言,我从 tar 备份中恢复了

pg_restore --create --exit-on-error --verbose --dbname=postgres jiradb.tar
Run Code Online (Sandbox Code Playgroud)