PostgreSQL导入CSV至数据库表时遇权限拒绝错误求助
PostgreSQL导入CSV权限拒绝问题解决
错误原因
你用的COPY FROM是让PostgreSQL服务器进程读取文件,而服务器进程默认以postgres用户运行,这个用户没有权限访问你本地用户目录下的/home/developer/tmp/facility_Polygon_testing.csv文件,所以触发权限拒绝错误。
解决方案
方案1:用psql的\copy命令(推荐)
\copy是客户端工具,用当前执行psql的用户权限读取文件,不需要调整服务器端权限。直接在psql终端里执行:
BEGIN; \copy csv_geometry_tamplate(facility_gis_number,facility_geometry) FROM '/home/developer/tmp/facility_Polygon_testing.csv' DELIMITER ',' CSV HEADER; COMMIT;
注意:这个命令只能在psql终端里用,GUI工具(比如pgAdmin)不支持,这类工具一般自带导入向导,可以直接用向导操作。
方案2:调整文件权限适配服务器进程
如果一定要用COPY FROM,需要让postgres用户能访问文件:
- 先给文件加其他用户可读权限:
chmod o+r /home/developer/tmp/facility_Polygon_testing.csv
- 再给上级目录加执行权限(让postgres用户能进入目录):
chmod o+x /home/developer chmod o+x /home/developer/tmp
或者更稳妥的方式是把文件移到PostgreSQL默认可访问的目录(比如/var/lib/postgresql/你的版本号/main/,版本号根据实际情况调整),再修改文件归属:
mv /home/developer/tmp/facility_Polygon_testing.csv /var/lib/postgresql/14/main/ chown postgres:postgres /var/lib/postgresql/14/main/facility_Polygon_testing.csv
之后再执行你原来的COPY语句即可。
内容的提问来源于stack exchange,提问作者icebrk
相关产品推荐
相关产品推荐

