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

PostgreSQL插入图片时提示文件不存在错误该如何解决?

报错原因

  • 路径格式错误:Windows系统绝对路径盘符后缺失冒号,你写的C/Program Files/...不符合Windows路径规范,正确格式应为C:/Program Files/...。
  • 文件实际不存在/路径不匹配:确认目标图片确实存放在你写的路径下,文件名拼写、大小写完全匹配。
  • 函数权限与范围限制:pg_read_file是服务器端函数,仅允许读取PostgreSQL服务进程可访问的文件,默认仅支持读取数据库数据目录内的文件,且运行PostgreSQL服务的系统用户(默认是postgres)需要对目标文件有读取权限。如果是远程连接数据库,该函数无法读取你本地设备上的文件。

解决方法

方法1:修正配置后直接用pg_read_file(仅适用本地操作、文件存放在数据目录的场景)

  1. 修正文件路径为C:/Program Files/PostgreSQL/14/data/ADC.jpeg
  2. 确认ADC.jpeg确实放在上述数据目录中,且PostgreSQL服务运行用户对该文件有读取权限
  3. 执行修正后的SQL:
insert into books(book_pic) values(pg_read_file('C:/Program Files/PostgreSQL/14/data/ADC.jpeg')::bytea);

方法2:通过psql客户端导入(通用场景,无需调整服务器权限)

使用psql的大对象导入功能实现本地文件插入,无需调整服务器文件权限:

  1. 在psql命令行执行导入命令,会返回一个临时大对象的OID:
\lo_import 'C:/Program Files/PostgreSQL/14/data/ADC.jpeg'
  1. 假设返回的OID为16389,执行插入语句:
insert into books(book_pic) values(lo_get(16389));
  1. 插入完成后清理临时大对象:
select lo_unlink(16389);

方法3:业务代码插入(生产环境推荐)

在应用代码中读取图片文件转成二进制流,绑定到SQL的bytea类型参数插入即可,无需依赖数据库的文件读取权限,兼容性和安全性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:15:03