PostgreSQL转储权限被拒绝

yftpprvb  于 12个月前  发布在  PostgreSQL
关注(0)|答案(7)|浏览(116)

我得到这个错误,而试图转储数据库,我进入

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

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

vsaztqbk

vsaztqbk1#

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

$ pg_dump -h localhost mydb >/tmp/tempfile

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

mm5n2pyu

mm5n2pyu2#

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

% mkdir backup

% chmod 0777 backup

% su postgres

[enter password]

$ cd backup

$ pg_dump mydb >tempfile

$ exit

“tempfile”将由postgres拥有,并且与用户属于同一个组

cczfrluj

cczfrluj3#

sudo su postgres不会改变当前目录,所以你仍然在linuxuser的home目录中,postgres没有写入它的权限。更改到其他目录

ajsxfq5m

ajsxfq5m4#

postgres用户

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

带文件夹

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

Mac OS X

在Mac OS X(Mountain Lion)中,我可以在Windows中创建这样一个文件夹。
1.在目录中,创建新文件夹。选择它.
在这个例子中,我创建了一个名为postgres_backups的文件夹。
1.选择File > Get Info
1.打开Sharing & Permissions部分的显示三角形。
1.单击加号按钮可将另一项添加到用户列表中。
用户列表出现在“工作表”对话框中。
1.从列表中选择postgres用户。
1.在Privilege列中,对于新的postgres行,将弹出菜单更改为Read & Write
1.关闭Get Info窗口。完了
现在您可以将Postgres备份文件定向到该文件夹。

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

wxclj1h5

wxclj1h55#

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

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

e5njpo686#

对我来说,我必须在结尾写一个完整的文件名,比如dump.sql,比如ewithe5。

nwlqm0z1

nwlqm0z17#

我在Ubuntu机器上长时间尝试备份我的PSQL数据库时,一直在努力解决这个“权限被拒绝”的问题,并尝试了用户访问权限、超级用户状态、文件夹属性--很多东西。最后,一个简单得可笑的方法奏效了。在命令中:

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

确保你有引号(单引号或双引号似乎工作)周围的文件名,其次是大于(“>”)的迹象。上面的例子在文件名周围没有引号。一旦我尝试了,我不再收到权限拒绝错误。

相关问题