Postgresql备份权限被拒绝

52

当我尝试导出数据库时,遇到了这个错误,我输入了

linuxuser $ sudo su postgres
linuxuser $ [sudo] password for linuxuser:...
$ pg_dump -h localhost mydb >tempfile
$ sh: cannot create tempfile: Permission denied

问题是什么?我刚刚安装了最新的postgresql。

7个回答

91

将文件写入具有写入许可的postgres用户目录。例如,/tmp目录。

$ pg_dump -h localhost mydb >/tmp/tempfile

在您的尝试中,PostgreSQL用户试图在属于另一个用户的某个随机目录中创建文件。


10

备份和恢复可以由任何知道Postgres超级用户密码的非特权用户通过更改工作目录权限来完成:

% mkdir backup

% chmod 0777 backup

% su postgres

[enter password]

$ cd backup

$ pg_dump mydb >tempfile

$ exit

“tempfile” 将被归属于 postgres 用户,并与该用户属于同一组。

6

sudo su postgres不会改变当前目录,因此您仍然在linuxuser的主目录中,而postgres没有权限写入该目录。请切换到其他目录。


2

首先,您不应该切换到用户postgres。使用以下命令进行备份:

pg_dump -U username -h localhost dbname > /db.sql

2

postgres 用户

正如其他正确的答案所说,您尝试保存备份的文件夹没有为 postgres 用户(操作系统用户帐户)分配权限。 postgres 用户是运行备份实用程序的用户帐户。此用户帐户是在 Postgres 安装过程中创建的。您可能使用了不同的名称,但默认值为 postgres

具有权限的文件夹

解决方案是找到或创建一个postgres 用户具有读写权限的文件夹。

Mac OS X

在 Mac OS X(Mountain Lion)中,我能够在 Finder 中创建这样一个文件夹。

  1. 在 Finder 中,创建一个新文件夹。选择它。
    在此示例中,我创建了一个名为 postgres_backups 的文件夹。
  2. 选择 文件 > 获取信息
  3. 打开“共享和权限”部分的披露三角形。
  4. 单击加号按钮以将另一个项目添加到用户列表中。
    用户列表将显示在“工作表”对话框中。
  5. 从列表中选择 postgres 用户。
  6. 在新的 postgres 行的 特权 列中,将弹出菜单更改为 读取和写入
  7. 关闭 获取信息 窗口。完成。

现在,您可以将 Postgres 备份文件定向到该文件夹。

Finder 中“获取信息”窗口的屏幕截图

顺便说一下,我使用 pgAdmin 应用程序进行备份和还原。在所需数据库上按 Control+单击,然后选择 备份…。pgAdmin 应用程序可能已捆绑在您的 Postgres 安装中。


1
对我来说,我必须在末尾写上完整的文件名,比如dump.sql,就像ewhite5一样。

-3
我在Ubuntu机器上尝试备份我的PSQL数据库时,遇到了“权限被拒绝”的问题,我花费了很长时间来解决这个问题,尝试了用户访问权限、超级用户状态、文件夹属性等等。最后,一个非常简单的方法奏效了。在命令中:
pg_dump -U username -O dbname > 'filename.sql'

确保在大于号(“>”)后面跟随的文件名周围有引号(单引号或双引号似乎都可以)。上面的示例没有在文件名周围加上引号。一旦我尝试了这样做,我就不再收到“权限被拒绝”的错误信息了。


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