PSQL执行\i命令加载文件时提示Permission denied求助
解决PostgreSQL执行
\i命令时的Permission Denied问题 核心原因:postgres用户无法读取目标文件,并非文件本身权限问题,而是目录遍历权限缺失或安全模块限制导致,以下是针对性解决步骤:
检查并修复父目录的执行权限
Linux系统中访问文件时,所有父目录都需要具备x(执行)权限才能遍历。/home/sheharyar这类用户主目录默认权限通常是700,仅允许当前用户访问,postgres用户根本无法进入该目录。执行以下命令为父目录添加其他用户的遍历权限:chmod o+x /home/sheharyar chmod o+x /home/sheharyar/bot chmod o+x /home/sheharyar/bot/code注:
o+x仅开放目录遍历权限,不会泄露目录内文件的可读权限,比777更安全。排查SELinux限制(针对RHEL/CentOS/Fedora等系统)
若系统启用SELinux,即使文件和目录权限正确,也可能阻止postgres访问用户目录下的文件。先临时关闭SELinux验证测试:setenforce 0若测试后权限问题消失,说明是SELinux规则限制,可添加永久规则解决:
semanage fcontext -a -t postgresql_db_t "/home/sheharyar/bot/code/data.sql" restorecon -v "/home/sheharyar/bot/code/data.sql"安全替代方案:迁移文件至postgres可访问目录
不想修改用户目录权限或SELinux规则的话,可直接将文件复制到postgres用户的默认可访问目录(如/var/lib/postgresql),并修改所有权:cp /home/sheharyar/bot/code/data.sql /var/lib/postgresql/ chown postgres:postgres /var/lib/postgresql/data.sql之后进入psql执行
\i /var/lib/postgresql/data.sql即可。
内容的提问来源于stack exchange,提问作者R Walser
相关产品推荐
相关产品推荐

