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

问题描述 投票:0回答:3

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

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

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

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

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

有人以前遇到过这个问题或者知道是什么原因造成的吗?

postgresql pg-dump pg-restore
3个回答
137
投票

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

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

11
投票

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

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

错了!!

它的字面意思应该是 --dbname=postgres,然后 --create 将根据文件中的名称创建真正的数据库。就我而言,我使用

从 tar 备份中恢复
pg_restore --create --exit-on-error --verbose --dbname=postgres jiradb.tar

0
投票

您实际上可以使用以下命令创建要插入的数据库:

createdb new-db -h HOST -p PORT -U USER

但这可能无法解决问题。

您必须确保要恢复的数据库与您备份的数据库(使用 pg_dump)具有相同的名称。

对我来说,备份数据库的名称实际上是默认数据库名称,即

postgres
。再次确保数据库的名称(-d 标志)与您备份的数据库的名称相同。

所以这个命令对我有用:

pg_restore -vFd -d postgres backups/location -j 5 --create -h HOST -p PORT -U USERNAME
© www.soinside.com 2019 - 2024. All rights reserved.