2012-01-12 48 views
22

我得到这个错误,而试图转储数据库,我进入PostgreSQL的转储权限被拒绝

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

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

回答

42

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

$ pg_dump -h localhost mydb >/tmp/tempfile 

在您的尝试中,postgres用户尝试在属于其他用户的某个随机目录中创建文件。

5

sudo su postgres不会更改当前目录,因此您仍然在linuxuser的主目录中,并且postgres没有写入权限。 切换到不同的目录

2

postgres用户

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

文件夹权限

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

的Mac OS X

在Mac OS X(山狮),我可以在Finder来创建这样一个文件夹。

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

现在您可以将您的Postgres备份文件指向该文件夹。

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

顺便说一句,我使用pgAdmin的应用程序进行备份和恢复。控制并点击所需的数据库并选择Backups…。 pgAdmin应用程序可能与您的Postgres安装捆绑在一起。

0

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

% mkdir backup 

% chmod 0777 backup 

% su postgres 

[enter password] 

$ cd backup 

$ pg_dump mydb >tempfile 

$ exit 

“临时文件”将是:

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

备份和恢复可以通过一个知道的Postgres通过在工作目录更改权限的超级用户口令的任何unpriviledged用户完成拥有postgres和同组用户

0

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

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

请确保您有引号(单或双引号似乎工作)围绕如下比(“>”)标志的更大的文件名。上面的例子没有引号围绕文件名。一旦我尝试过,我不再收到权限被拒绝的错误。