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

PostgreSQL 14.5 pg_read_binary_file读取部分文件报错Invalid argument求解决

问题描述

在Windows 10笔记本上安装PostgreSQL 14.5后,运行旧脚本通过pg_read_binary_file()函数向表中加载.jpg和.png格式图片时出现异常:

  • 34个文件中仅5个处理成功(1个.jpg、4个.png)
  • 其余29个文件执行时触发错误:[Exception, Error code 0, SQLState XX000] ERROR: could not open file "文件绝对路径" for reading: Invalid argument
  • 成功执行示例:
select pg_read_binary_file('C:\Users\Jorge\OneDrive\Documents\000\020-logos\adalid.png') as adalid_png;
  • 失败执行示例:
select pg_read_binary_file('C:\Users\Jorge\OneDrive\Documents\000\020-logos\oper.png') as oper_png;
  • 已确认脚本在PostgreSQL 14早期版本可正常运行,暂无法找到早期版本测试。
可能的解决方案

1. 修正路径转义格式

Windows路径中的反斜杠\在PostgreSQL字符串中需转义,或改用正斜杠/,PostgreSQL 14.5对路径解析的严格性可能高于早期版本:

  • 转义反斜杠写法:
select pg_read_binary_file('C:\\Users\\Jorge\\OneDrive\\Documents\\000\\020-logos\\oper.png') as oper_png;
  • 改用正斜杠写法:
select pg_read_binary_file('C:/Users/Jorge/OneDrive/Documents/000/020-logos/oper.png') as oper_png;

2. 检查文件权限与OneDrive状态

  • 给PostgreSQL服务运行账户(默认是NT SERVICE\PostgreSQL)添加文件读取权限:右键目标文件→属性→安全→添加该账户并赋予读取权限。
  • 确认失败文件已完成OneDrive同步(无同步中的加载图标),或临时将文件复制到本地非OneDrive目录测试。

3. 清除文件特殊属性

  • 右键失败文件→属性→常规→取消勾选只读属性(若存在)。
  • 检查文件是否开启加密:右键→属性→高级→取消勾选加密内容以便保护数据,PostgreSQL服务账户无法读取加密文件。

4. 解决Windows路径长度限制

Windows传统路径长度限制为260字符,若失败文件路径超出该长度:

  • 缩短文件夹或文件名,减少路径总长度。
  • 启用Win32长路径支持:打开组策略编辑器→计算机配置→管理模板→系统→文件系统→启用启用Win32长路径,重启系统后重试。

5. 替换为lo_import函数

若上述方法无效,尝试用PostgreSQL大对象导入函数lo_import替代,兼容性更好:

SELECT lo_import('C:/Users/Jorge/OneDrive/Documents/000/020-logos/oper.png');

后续可将返回的大对象OID转换为二进制数据插入表中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 10:25:33