最近我用这个命令来备份我的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
正如您所看到的,权限被拒绝所以我尝试使用 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.
对此有任何帮助吗?
谢谢!
答案 0 :(得分:5)
您的备份文件或其所在的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
如果你想要一个交互式命令行。
答案 1 :(得分:0)
我尝试了许多不同的解决方案来恢复postgres备份。我遇到了MacOS上被拒绝的问题,似乎没有解决方案。
这就是我的工作方式:
Postgres随附Pgadmin4。如果使用macOS,则可以按CMD
+ SPACE
并键入pgadmin4
来运行它。这将在Chrome中打开一个浏览器标签。
如果在使pgadmin4正常工作时遇到错误,请在终端中尝试
killall pgAdmin4
,然后重试。
通过右键单击数据库->“备份”来完成此操作
类似于test12345
。单击备份。这将创建一个二进制文件转储,它不是.sql
格式
屏幕的右下角应该有一个弹出窗口。点击“更多详细信息”页面,查看备份下载到的位置
在这种情况下,它是/users/vincenttang
假设您正确执行了步骤1到步骤4,您将拥有一个还原二进制文件。有时您的同事希望在其本地计算机上使用您的还原文件。说过有人去pgadmin并恢复
通过右键单击数据库->“恢复”来完成此操作
确保手动选择文件位置,请勿将文件拖放到pgadmin的上载器字段中。因为您会遇到错误权限。而是找到您刚刚创建的文件:
您可能必须将右下角的过滤器更改为“所有文件”。此后,从第4步中找到文件。现在,点击右下角的“选择”按钮进行确认
您将再次看到此页面,其中包含选定文件的位置。继续并还原它
如果一切正常,则右下角应弹出一个指示恢复成功的指示器。您可以导航到表以查看每个表上的数据是否已正确还原。
如果步骤9失败,请尝试删除数据库上的旧公共模式。转到“查询工具”
执行此代码块:
DROP SCHEMA public CASCADE; CREATE SCHEMA public;
现在再次尝试步骤5到9,应该可以解决
当我遇到错误权限问题并且无法以超级用户身份登录时,这就是我必须在Postgres上备份/还原备份的方式。或使用chmod
设置文件夹的读/写凭据。