当我尝试恢复Postgres备份时出现了“Permission denied”的错误提示。

5

最近我使用了这个命令来备份我的PostgreSQL数据库

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.

请问有什么需要帮助的吗?

谢谢!

2个回答

8

您的备份文件,或者包含它的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.conf或者pg_ident.conf以允许您的用户作为postgres连接。(或者您可以暂时使用ALTER USER给您的普通用户超级用户权限)。
顺便说一下,您不需要使用su切换到postgres用户。养成使用sudo -u postgres运行命令的习惯,并且如果您需要使用交互式命令行,可以使用sudo -u postgres -i

是的,你说得对。我已经解决了,我以debian用户(普通用户)身份运行了命令,它完美地工作了。但是你的解释更清晰,让我更好地理解了我的错误!这是正确的做法。谢谢! - medBouzid
你能告诉我最好的开始学习PostgreSQL的地方吗?我在我的应用程序中使用它,但我感觉自己什么也不知道! - medBouzid
@medBo 我开始阅读手册的封面到封底。http://www.postgresql.org/docs/。如果您使用Debian或Ubuntu,则可能还会发现PostgreSQL的Ubuntu社区Wiki页面很有用:https://help.ubuntu.com/community/PostgreSQL。然而,在像这个问题这样的问题上文档存在一些空白,这实际上是一个UNIX问题,而不是一个PostgreSQL问题,但这是PostgreSQL用户容易遇到的事情。 - Craig Ringer
谢谢您提供的资源,我会查阅并可能像您一样全面地学习它们:D - medBouzid

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

以下是我如何使其工作:

Postgres附带了Pgadmin4。如果你使用macOS,可以按下CMD+SPACE并键入pgadmin4来运行它。这将在chrome中打开一个浏览器选项卡。

如果您在使用pgadmin4时遇到错误,请尝试在终端中键入killall pgAdmin4,然后再次尝试。


获取pgadmin4 + 备份/恢复的步骤

1. 创建备份

右键单击数据库,选择“备份”进行操作。

enter image description here

2. 给文件命名。
例如:test12345。点击备份。这将创建一个二进制文件转储,它不是以.sql格式。

enter image description here

3. 查看下载位置

屏幕右下角应该会弹出一个窗口。点击“更多详情”页面,查看您的备份下载到哪里了。

enter image description here

4. 查找已下载文件的位置
在这种情况下,它是 /users/vincenttang

enter image description here

5. 从pgadmin恢复备份

假设您已正确执行了步骤1到4,那么您将拥有一个恢复二进制文件。可能会有时候,您的同事想要在他们的本地计算机上使用您的恢复文件。让该人前往pgadmin并进行恢复操作。

右键单击数据库 -> "还原"来完成此操作。

enter image description here

6. 选择文件查找器

确保手动选择文件位置,不要将文件拖放到pgadmin的上传器字段中。因为您会遇到错误权限。相反,请找到您刚创建的文件:

enter image description here

7. 查找所述文件

您可能需要将右下角的筛选器更改为“所有文件”。然后从第4步开始查找文件。现在点击右下角的“选择”按钮以确认。

enter image description here

8. 恢复该文件

您将再次看到此页面,并选择文件的位置。请继续恢复它。

enter image description here

9. 成功

如果一切顺利,右下角会弹出一个指示器,显示还原成功。您可以导航到数据表,查看每个表的数据是否已经正确还原。

10. 如果还原不成功:

如果第9步失败,请尝试在数据库中删除旧的公共模式。前往“查询工具”。

enter image description here

执行此代码块:
DROP SCHEMA public CASCADE; CREATE SCHEMA public;

enter image description here

现在再试一遍步骤5到9,应该会成功。

总结

这是我在Postgres上备份/恢复备份时遇到权限问题且无法登录超级用户或使用chmod为文件夹设置读/写凭据时所采取的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接