使用 pg_restore 或 psql 或 pgAdmin4 恢复 postgres db 备份时遇到问题

使用 pg_restore 或 psql 或 pgAdmin4 恢复 postgres db 备份时遇到问题

这是低风险的,只是一次练习,当我急需这样做时,也是为了确认 pg_dump 是否令人满意。

我正在尝试使用psqlpg_restore将 Postgres 数据库的副本恢复到新数据库。我在 Ubuntu 22.04 上。

与我的常规用户一样,我可以rlm~键入并获取 的输出dir以及其他文件。apgym.sqlpg_dump

所以我输入pg_restore -d testRestore -U postgres apgym.sql并得到:pg_restore: error: input file appears to be a text format dump. Please use psql.

就像好的,我将使用 psql。我输入它,然后我收到psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: database "rlm" does not exist我不明白错误消息,但我会以 Postgres 用户身份再试一次。所以我输入

sudo su postgres并成为 postgres 用户。我进入psql -d testRestore -f apgym.sql与我的文件相同的目录apgym.sql,然后得到:

could not change directory to "/home/rlm": Permission denied
psql: error: apgym.sql: No such file or directory

我也无法使用 pgAdmin 从备份中恢复,它显示 0.02 秒内状态为“失败”。在此处输入图片描述

我如何恢复备份的 postgres db?我需要能够做到这一点,以防我的数据被破坏并且我想恢复。请不要建议替代方案:我想这样做。

为了帮助读者或任何希望pg_dump在将来创建自己的输出的人,我使用以下命令创建了备份pg_dump -h localhost -U postgres -W apGymPostgres > apgym.sql

答案1

对我来说,解决方案是绕过这个问题。我无法让 psql 或 pg_restore 恢复我创建的备份。据说是因为我创建了一个纯文本 pg_dump 文件,所以我需要使用 psql。但我无法让 psql 工作。

当我发现一个教程说如果我使用 tar 转储文件,那么我就可以使用 pg_restore 时,我就开始成功了。我能够使用 pgAdmin 创建 tar 转储文件,然后使用 pgAdmin 进行类似恢复。

因此,它不是使纯文本 pg 转储工作的解决方案,但它可以解决这个问题。

相关内容