You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL运行setup.sh调用lo_import函数报权限被拒绝错误

问题原因
  • lo_import 是PostgreSQL服务端执行的函数,读取文件时使用的是PostgreSQL服务进程的系统用户(通常为postgres)权限,而非执行psql客户端的用户权限。你手动执行INSERT命令时大概率默认使用了PostgreSQL超级用户(如postgres)登录,而脚本中指定使用普通角色admin执行,默认普通角色没有lo_import的执行权限。
  • 你授予的GRANT ALL PRIVILEGES ON DATABASE mydb to admin仅覆盖数据库层面的基础权限,不包含大对象操作、服务端文件读取的相关权限。
  • 路径权限限制:Mac系统下/Users/myname/用户目录默认对其他用户关闭访问权限,即使图片本身权限为755,postgres服务用户也无法访问上层目录,也会触发权限报错。
解决方案

以下三个方案可按需选择:

方案1:给admin角色补全权限+调整路径权限

  1. 在db_setup.sql中添加权限授予语句:
GRANT EXECUTE ON FUNCTION lo_import(text) TO admin;
GRANT USAGE, CREATE ON LARGE OBJECT TO admin;
  1. 调整图片所在目录的权限,允许postgres用户访问:
chmod o+x /Users/myname /Users/myname/this-folder

方案2:改用客户端侧的\lo_import导入(更安全)

直接修改seed_data.sql内容,使用psql客户端命令导入文件,绕过服务端文件读取限制,无需额外开放权限:

\lo_import '/Users/myname/this-folder/some-image-name.png'
INSERT INTO mydb(name, raster) VALUES('Herald', :LASTOID);

方案3:临时使用超级用户执行初始化

如果是一次性初始化场景,可直接修改setup.sh中第三条psql命令的登录用户为postgres超级用户,执行完成后再使用admin用户进行日常操作。

内容的提问来源于stack exchange,提问作者stk1234

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 13:15:04