我在尝试转储数据库时遇到此错误,我已进入
linuxuser $ sudo su postgres
linuxuser $ [sudo] password for linuxuser:...
$ pg_dump -h localhost mydb >tempfile
$ sh: cannot create tempfile: Permission denied
有什么问题?我刚刚安装了新的postgresql。
答案 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(Mountain Lion)中,我可以在Finder中创建这样的文件夹。
postgres_backups
。File
> Get Info
。Sharing & Permissions
部分的显示三角形。postgres
用户。Privilege
列中,对于新的postgres
行,请将弹出菜单更改为Read & Write
。Get Info
窗口。完成。现在您可以将Postgres备份文件定向到该文件夹。
顺便说一下,我使用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错误。