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

发布于 2024-11-05 00:40:44 字数 658 浏览 1 评论 0原文

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

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

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

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

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

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

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

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

有没有人以前遇到过这个问题或者知道什么可能导致这个问题?

I have a Postgres 8.4 database on a linux server that I have dumped using the following command:

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

I then ftp the created file to my local Windows 7 machine and attempt to restore the file to my local Postgres 8.4 instance using the following command:

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

The restore command generates plenty of output claiming it created my database, connected to it, and then created all the other tables as expected. However, when I view the databases on my local machine through pgAdmin the restored database doesn't exist at all.

In an attempt to troubleshoot I tried the following command:

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

When I run this command even though the host and username given are complete nonsense I still get the exact same output from the command without any errors.

Has anyone run into this before or know what could by causing this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

金兰素衣 2024-11-12 00:40:44

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

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

You have to add the name of a valid database to initially connect to or it will just dump the contents to STDOUT:

pg_restore --create --exit-on-error --verbose --dbname=postgres <backup_file>
糖果控 2024-11-12 00:40:44

这仍然令人困惑,我尝试执行这个 --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

This is still confusing, I attempted to execute this thing that the --dbname should be the db I want to create.

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

WRONG!!

It should literally be --dbname=postgres, the --create then will create the real db from the name in the file. In my case, I restored from a tar backup with

pg_restore --create --exit-on-error --verbose --dbname=postgres jiradb.tar
聚集的泪 2024-11-12 00:40:44

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

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

You can actually create the db you are trying to insert into using:

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

But this is probably not going to solve the issue.

You have have to make sure that the database you are restoring to has the same name as the database you made the backup of (using pg_dump).

For me the name of the backup database was actually the default database name which is just postgres. Again, make sure that the name of the database (-d flag) is the same as the name of the database you made a backup of.

So this command worked for me:

pg_restore -vFd -d postgres backups/location -j 5 --create -h HOST -p PORT -U USERNAME
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文