[英]PostgreSQL 14.5 pg_read_binary_file could not open file for reading: Invalid argument
昨天我在 Windows 10 笔记本电脑上安装了 PostgreSQL 14.5。 然后我运行了一个旧脚本将图像加载到表中。 该脚本使用pg_read_binary_file
function。 有些图像是.jpg 文件,有些是.png 文件。 在 34 个文件中,只有 5 个被成功处理(1.jpg 和 4.png)。 其他 29 个失败并出现以下错误:
[异常,错误代码 0,SQLState XX000] 错误:无法打开文件“文件绝对路径”进行读取:无效参数
例如,下面的语句执行没有错误
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;
...带有以下错误消息
[Exception, Error code 0, SQLState XX000] ERROR: could not open file "C:/Users/Jorge/OneDrive/Documents/000/020-logos/oper.png" for reading: Invalid argument
到目前为止,我无法确定可能导致错误的文件中的任何差异。 此外,我很确定该脚本适用于版本 14 的早期版本。不幸的是,我无法找到一个网站来下载这些早期版本中的任何一个以再次对其进行测试。
有没有其他人发现这个问题及其解决方案?
我找到了原因; 当文件名不是小写时,命令失败。 所以我通过重命名所有图像文件解决了这个问题。
例如,文件名 JRCG1.JPG 失败,但如果文件重命名为 jrcg1.jpg,则成功。
科技不是很棒吗?
请忽略我之前的回答。 正如您在其中看到的,没有对最后一个命令(update pais)失败的解释。
现在我认为这个问题是由OneDrive引起的。 这台笔记本电脑是新的。 当我使用我的 Microsoft 帐户登录时,会自动创建和更新 OneDrive 目录。 显然,此操作仅更新目录条目,将文件的内容保留在云中,直到它们被打开(或重命名)。 当我压缩包含我所有图像的目录时,出现了来自 OneDrive 的一条消息,说它在那一刻将恢复一些文件。 之后,我的脚本中的所有命令都可以工作。 我什至将那些带有连字符或大写名称的文件重命名(恢复为原来的名称),一切正常。 我的理论是pg_read_binary_file
从目录中获取文件条目,因此它没有给出“没有这样的文件或目录”消息,但是它读取内容失败; 而是给出“无效参数”消息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.