“permission denied” 对于 pg_dump 输出文件

13

我使用以下命令备份我的数据库:

sudo -u user_name pg_dump dbName -f /home ..../someWhere/db.sql

但是它给了我这个错误信息:

pg_dump: [archiver] could not open output file "/home ..../someWhere/db.sql": Permission denied

在查找此问题时,我发现必须在/tmp路径下备份我的数据,但并没有解决问题。

我该如何解决这个问题?

提前致谢。


我正在使用Ubuntu 12.04 LTS。


这看起来像是一个权限问题。您能否从命令提示符手动创建一个文件,例如“/home ..../someWhere/db.sql”? - Jayadevan
2
谢谢@Jayadevan,是的,我可以使用“touch”命令手动创建文件。 - Mostafa Jamareh
2
@MostafaJamareh дҪ иғҪдҪҝз”ЁзӣёеҗҢзҡ„sudoе‘Ҫд»ӨдҪҝз”ЁtouchеҲӣе»әж–Ү件еҗ—пјҹ"user_name"жҳҜд»Җд№Ҳпјҹдёәд»Җд№ҲиҰҒдҪҝз”ЁsudoеҲҮжҚўеҲ°еҸҰдёҖдёӘз”ЁжҲ·иҝӣиЎҢиҪ¬еӮЁж“ҚдҪңпјҹ - Craig Ringer
1
你也可以尝试使用sudo -u用户名psql命令。然后,在psql中,尝试执行相同的touch命令。 postgres =#\!touch /tmp/myfile.txt postgres =#\!ls -l /tmp/myfile.txt -rw-rw-r-- 1 postgres postgres 0 Jan 31 10:23 /tmp/myfile.txt - Jayadevan
@MostafaJamareh 连接用户来运行 pg_dump 没有任何意义。pg_dump 是一个 shell 命令,而不是 PostgreSQL 命令。如果你的意思是想切换到该用户,也就是你真正想说的是 sudo -u postgres pg_dump ...为什么不直接这么说呢 - Craig Ringer
显示剩余5条评论
4个回答

16

看起来你的pg_dump工具运行得很好,但是它在以sudo用户身份打开输出文件时出现了问题。只是猜测,但是,如果你使用运行pg_dump命令的用户id进行重定向,这应该可以解决问题,即:

sudo -u user_name pg_dump dbName > /home ..../someWhere/db.sql

采用此技术,你的pg_dump将作为postgres用户运行(假设user_name就是它),而在/home...写入的文件将使用运行该命令的用户权限进行写入(这个用户可能与postgres用户具有不同的权限)。


10
尝试使用以下方式从psql命令行执行pg_dump:

pg_dump

postgres=# \! pg_dump dbName -f /home ..../someWhere/db.sql

2
我以前在任何机器上都没有做过这个。它“只是工作了”。发生了什么变化?我该如何改回去? - JosephK

1

如果有其他人和我一样来到这里,请注意,如果文件夹不存在,pg_dump也会显示此错误。在这种情况下,只需使用mkdir -p folder_name事先创建该目录。


1

在psql命令行中执行如下操作:

-bash-4.1$ pg_dump -Fp dbName -f /home ..../someWhere/db.sql &

-F 选项可以选择输出格式,其中 p 表示输出一个纯文本的 SQL 脚本文件。

在命令末尾添加 & 将会在后台运行备份任务。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接