这是低风险的,只是一次练习,当我急需这样做时,也是为了确认 pg_dump 是否令人满意。
我正在尝试使用psql
或pg_restore
将 Postgres 数据库的副本恢复到新数据库。我在 Ubuntu 22.04 上。
与我的常规用户一样,我可以rlm
在~
键入并获取 的输出dir
以及其他文件。apgym.sql
pg_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 转储工作的解决方案,但它可以解决这个问题。