如何正确使用pg_dump执行PostgreSQL数据库迁移遇权限拒绝问题
报错根因
- 该权限报错与
pg_dump命令本身权限无关,由shell输出重定向的权限规则导致:你切换为postgres用户后,当前工作目录为/root或者初始登录普通用户的家目录,postgres用户对该目录没有写入权限,因此执行> file.tar写入输出文件时触发权限拒绝。
验证步骤
在当前postgres用户的bash环境下执行以下命令即可确认:
# 查看当前工作目录 pwd # 查看当前目录的权限配置 ls -ld .
输出结果会显示当前目录的所有者为root或者你初始登录的普通用户,postgres用户无w写入权限。
解决方案
你可以任选以下任意一种方案解决:
- 先切换到postgres用户有权限的目录再执行导出,比如postgres的家目录:
cd ~ pg_dump -F t file > file.tar
- 直接指定导出路径到公共可写目录,比如/tmp:
pg_dump -F t file > /tmp/file.tar # 导出完成后可再将tar包移动到你需要的存储路径
- (更推荐)使用pg_dump自带的
-f参数指定输出文件,绕开shell重定向的权限校验逻辑:
pg_dump -F t -f 你要存储的目标路径/file.tar file
内容的提问来源于stack exchange,提问作者Louis Castilllo
相关产品推荐
相关产品推荐

