Postgresql转储权限被拒绝

时间:2012-01-12 13:27:39

标签: postgresql

我在尝试转储数据库时遇到此错误,我已进入

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

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

6 个答案:

答案 0 :(得分:55)

写入postgres用户具有写访问权限的目录。例如/tmp

$ pg_dump -h localhost mydb >/tmp/tempfile

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

答案 1 :(得分:6)

sudo su postgres不会更改当前目录,因此您仍然在linuxuser的主目录中,并且postgres无权写入该目录。 切换到其他目录

答案 2 :(得分:3)

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

% mkdir backup

% chmod 0777 backup

% su postgres

[enter password]

$ cd backup

$ pg_dump mydb >tempfile

$ exit

"临时文件"将由postgres和与用户相同的组拥有

答案 3 :(得分:2)

postgres用户

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

具有权限的文件夹

解决方案是查找或创建文件夹,其中postgres用户具有读写权限。

Mac OS X

在Mac OS X(Mountain Lion)中,我可以在Finder中创建这样的文件夹。

  1. 在Finder中,创建一个新文件夹。选择它。
    在本例中,我创建了一个名为postgres_backups
  2. 的文件夹
  3. 选择File> Get Info
  4. 打开Sharing & Permissions部分的显示三角形。
  5. 单击加号按钮将另一项添加到用户列表中。
    用户列表显示在“工作表”对话框中。
  6. 从列表中选择postgres用户。
  7. Privilege列中,对于新的postgres行,请将弹出菜单更改为Read & Write
  8. 关闭Get Info窗口。完成。
  9. 现在您可以将Postgres备份文件定向到该文件夹​​。

    screen shot of a "Get Info" window in the Finder

    顺便说一下,我使用pgAdmin应用程序进行备份和恢复。按住Control并单击所需的数据库,然后选择Backups…。 pgAdmin应用程序可能与您的Postgres安装捆绑在一起。

答案 4 :(得分:1)

你要做的第一件事是不要切换到用户postgres。使用此命令进行备份:

# first transaction
with conn as cursor:
    cursor.execute(update_stmt_1)

# second transaction, new cursor
with conn as cursor:
    cursor.execute(update_stmt_2)

答案 5 :(得分:-3)

我试图在Ubuntu机器上备份我的PSQL数据库很长一段时间,并尝试了用户访问权限,超级用户状态,文件夹属性 - 很多东西,我在解决这个“Permission Denied”问题时遇到了问题。最后,有些工作非常简单。在命令中:

pg_dump -U username -O dbname > 'filename.sql'

确保在大于(“>”)符号后面的文件名周围有引号(单引号或双引号似乎有效)。上面的示例在文件名周围没有引号。一旦我尝试了,我就不再收到Permission Denied错误。

相关问题