1

我目前正在尝试做的事情:

我正在使用一个以 Postgresql 作为后端数据库的软件。该软件提供了一个 API,该 API 使用 Web 服务与软件/数据库进行通信。我正在尝试通过 api 将图像插入数据库,通常应该是 BLOB,因为 postgresql 不支持,所以我使用 postgresql-contrib 包创建了 lo 扩展。现在,实际的大对象保存在它自己的表中,当前表只保存对该对象的引用,但是 API 不考虑这一点。我目前将图像列的数据类型作为 BYTEA,但我收到一条错误消息,提示“列‘img’的类型为 bytea,但表达式的类型为 lo;”。由于插入被封装在 Web 服务的后端,因此我在 API 中无能为力。

TL;博士:

软件 API 期望将大对象 (BLOB) 放入数据库。如果数据库识别出 BLOB 数据类型,则应该可以无缝工作。我已经在 postgres 中设置了 lo 扩展。目前我将列数据类型设置为 bytea,但出现此错误:“列‘img’的类型为 bytea,但表达式的类型为 lo;”。

我如何存储lo's?

:::我正在使用 postgresql 9.1


我让它工作了。删除表后,我忘记重新创建 lo 扩展名,这就是它无法识别数据类型的原因。

4

1 回答 1

1

将文件传输到 db 的最简单(但不是最有效的)方法是将文件编码HEXbase64传输为类型,varchar然后再存储到字段中。decodebyteabytea

与从 db.retrieve 文件相同的方式。

如果您想在bytea没有编码/解码开销的情况下进行传输 - 那么您必须研究您的驱动程序、语言和框架如何处理它。

于 2013-09-19T19:17:22.137 回答