当我尝试恢复 postgres 备份时权限被拒绝

Permission denied when I try to restore postgres backup

最近我用这个命令备份了我的 postgres 数据库

pg_dumpall > BkpOldPG.sql

删除旧版本的 postgres 后,我下载了最新版本 9.4 并尝试使用 :

恢复我的旧数据
mody@debian:~$ su postgres
Password: 
postgres@debian:/home/mody$
postgres@debian:/home/mody$ /usr/lib/postgresql/9.4/bin/psql -d postgres -f Documents/Bkp01dPg.sql 
Documents/Bkp01dPg.sql: Permission denied

如您所见,我得到 Permission denied 所以我尝试使用 sudo 但它不起作用:

postgres@debian:/home/mody$ sudo /usr/lib/postgresql/9.4/bin/psql -d postgres -f Documents/Bkp01dPg.sql 
[sudo] password for postgres: 
postgres is not in the sudoers file.  This incident will be reported.

有什么帮助吗?

谢谢!

您的备份文件或其所在的 Documents 文件夹具有不允许 postgres 用户访问的权限。

您可以授予 postgres 用户(以及您系统上的所有其他用户)阅读它们的权限:

chmod a+x Documents
chmod a+r Documents/Bkp01dPg.sql

或者,您可以将 Bkp01dPg.sql 复制到 postgres 用户已经可以访问的位置,然后将其所有权授予 postgres 用户,例如

sudo cp Documents/Bkp01dPg.sql ~postgres/
sudo chown postgres ~postgres/Bkp01dPg.sql

或者您可以 运行 在普通用户帐户下恢复,以超级用户身份连接到 PostgreSQL:

psql -U postgres -f Documents/Bkp01dPg.sql

...尽管您可能需要修改 pg_hba.confpg_ident.conf 以允许您的用户以 postgres 的身份连接,如果您这样做的话。 (或者你可以临时 ALTER USER 给你的普通用户超级用户权限)。

顺便说一下,您不需要 supostgres。养成使用 sudo -u postgres 到 运行 命令的习惯,如果需要交互式命令行,请养成使用 sudo -u postgres -i 的习惯。

我尝试了许多不同的解决方案来恢复我的 postgres 备份。我 运行 在 MacOS 上遇到权限被拒绝的问题,似乎没有解决方案。

这是我如何让它工作的:

Postgres 自带 Pgadmin4。如果您使用 macOS,您可以按 CMD+SPACE 并输入 pgadmin4 到 运行。这将在 chrome 中打开一个浏览器选项卡。

If you run into errors getting pgadmin4 to work, try killall pgAdmin4 in your terminal, then try again.


获取 pgadmin4 的步骤 + backup/restore

1。创建备份

右键单击数据库 -> "backup"

2。为文件命名。

喜欢test12345。单击备份。这会创建一个二进制文件转储,它不是 .sql 格式

3。查看下载位置

屏幕右下角应该有一个弹出窗口。单击 "more details" 页面查看备份下载到的位置

4。找到下载文件的位置

在这种情况下,它是 /users/vincenttang

5。从 pgadmin

恢复备份

假设您正确执行了步骤 1 到 4,您将拥有一个还原二进制文件。有时您的同事可能想在他们的本地计算机上使用您的还原文件。有人说去 pgadmin 并恢复

右键单击数据库 -> "restore"

6。 Select 文件查找器

确保手动 select 文件位置,不要将文件拖放到 pgadmin 的上传者字段中。因为你会运行进入错误权限。相反,找到您刚刚创建的文件:

7。找到所述文件

您可能需要将右下角的过滤器更改为 "All files"。然后找到文件,从第 4 步开始。现在点击右下角的 "Select" 按钮确认

8。恢复所述文件

您将再次看到此页面,其中包含 selected 文件的位置。继续恢复它

9。成功

如果一切正常,右下角应该会弹出恢复成功的提示。您可以导航到您的 table 以查看每个 table.

上的数据是否已恢复 属性

10。如果不成功:

如果第 9 步失败,请尝试删除数据库中的旧 public 架构。转到 "Query Tool"

执行此代码块:

DROP SCHEMA public CASCADE; CREATE SCHEMA public;

现在再次尝试第 5 步到第 9 步,应该可以了

总结

当我遇到错误权限问题并且无法以超级用户身份登录时,这就是我必须 backup/restore 在 Postgres 上进行备份的方式。或者使用 chmod 为文件夹设置 read/write 的凭据。