当我尝试导出数据库时,遇到了这个错误,我输入了
linuxuser $ sudo su postgres
linuxuser $ [sudo] password for linuxuser:...
$ pg_dump -h localhost mydb >tempfile
$ sh: cannot create tempfile: Permission denied
问题是什么?我刚刚安装了最新的postgresql。
当我尝试导出数据库时,遇到了这个错误,我输入了
linuxuser $ sudo su postgres
linuxuser $ [sudo] password for linuxuser:...
$ pg_dump -h localhost mydb >tempfile
$ sh: cannot create tempfile: Permission denied
问题是什么?我刚刚安装了最新的postgresql。
将文件写入具有写入许可的postgres用户目录。例如,/tmp
目录。
$ pg_dump -h localhost mydb >/tmp/tempfile
在您的尝试中,PostgreSQL用户试图在属于另一个用户的某个随机目录中创建文件。
备份和恢复可以由任何知道Postgres超级用户密码的非特权用户通过更改工作目录权限来完成:
% mkdir backup
% chmod 0777 backup
% su postgres
[enter password]
$ cd backup
$ pg_dump mydb >tempfile
$ exit
sudo su postgres不会改变当前目录,因此您仍然在linuxuser的主目录中,而postgres没有权限写入该目录。请切换到其他目录。
首先,您不应该切换到用户postgres。使用以下命令进行备份:
pg_dump -U username -h localhost dbname > /db.sql
postgres
用户正如其他正确的答案所说,您尝试保存备份的文件夹没有为 postgres
用户(操作系统用户帐户)分配权限。 postgres
用户是运行备份实用程序的用户帐户。此用户帐户是在 Postgres 安装过程中创建的。您可能使用了不同的名称,但默认值为 postgres
。
解决方案是找到或创建一个,postgres
用户具有读写权限的文件夹。
在 Mac OS X(Mountain Lion)中,我能够在 Finder 中创建这样一个文件夹。
postgres_backups
的文件夹。文件
> 获取信息
。postgres
用户。postgres
行的 特权
列中,将弹出菜单更改为 读取和写入
。获取信息
窗口。完成。现在,您可以将 Postgres 备份文件定向到该文件夹。
顺便说一下,我使用 pgAdmin 应用程序进行备份和还原。在所需数据库上按 Control+单击,然后选择 备份…
。pgAdmin 应用程序可能已捆绑在您的 Postgres 安装中。
pg_dump -U username -O dbname > 'filename.sql'
确保在大于号(“>”)后面跟随的文件名周围有引号(单引号或双引号似乎都可以)。上面的示例没有在文件名周围加上引号。一旦我尝试了这样做,我就不再收到“权限被拒绝”的错误信息了。