【问题标题】:PostgreSQL 14.5 pg_read_binary_file could not open file for reading: Invalid argumentPostgreSQL 14.5 pg_read_binary_file 无法打开文件进行读取:无效参数
【发布时间】:2022-09-22 21:58:56
【问题描述】:

昨天我在 Windows 10 笔记本电脑上安装了 PostgreSQL 14.5。 然后我运行了一个旧脚本将图像加载到表中。 该脚本使用pg_read_binary_file 函数。 有些图像是 .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 的早期版本。不幸的是,我无法找到一个网站来下载这些早期版本中的任何一个以再次对其进行测试。

有没有其他人发现这个问题,以及它的解决方案?

  • 你能分享其中一个错误的实际绝对路径吗?无错误的路径是什么样的?
  • 请再读一遍帖子;我添加了你问的内容。
  • 如果你愿意,我可以分享脚本和图像文件,这样你就可以测试它了
  • 它似乎是特定于 Windows 的东西,因为它在我的 linux 环境中没有错误:pastebin.com/vzYs5ALN
  • 它是!请看下面我的回答

标签: postgresql binaryfiles


【解决方案1】:

我认为这个问题是由某种原因引起的一个驱动器.这台笔记本电脑是新的。当我使用我的 Microsoft 帐户登录时,会自动创建和更新 OneDrive 目录。显然,此操作仅更新目录条目,将文件的内容保留在云中,直到它们被打开。当我压缩包含我所有图像的目录时,来自 OneDrive 的一条消息出现,说在那一刻它将恢复一些文件。之后,我的脚本中的所有命令都可以工作。

我的理论是pg_read_binary_file 从目录中获取文件条目,因此它没有给出“没有这样的文件或目录”消息,但是它读取内容失败;而是给出“无效参数”消息。

悬而未决的问题是:为什么 7-Zip 可以让 OneDrive 恢复内容,而 pg_read_binary_file 不能?

更新

经过更多测试并阅读Save disk space with OneDrive Files On-Demand for Windows,现在我确定pg_read_binary_file 将失败并在 OneDrive 文件不是时发送消息“无效参数”本地可用文件.在文件资源管理器中,此类文件旁边有一个蓝色云图标。

【讨论】:

  • 如果您希望忽略之前的答案,您应该删除它。您回答中的最后一个问题可能会提出另一个问题,尽管它很可能是题外话,因为它与编程无关。
  • 先前的答案已删除,当前的答案已更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-16
  • 2018-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-06
相关资源
最近更新 更多