5

我的应用程序(在 Delphi 和 ZEOS 组件中开发)使用 PostgreSQL 8.4 并将一些缩略图图像存储到一个bytea列中。

我想迁移到 PostgreSQL 9.2 并恢复转储,一切正常,除非我尝试检索这些图像:Postgres 9.2hex用于输出表示,而不是escape在 Postgres 8.4 中使用。

有两种可能的解决方案:更改 Postgres 9.2 的escape表示设置或hex通过应用程序更改二进制数据中的字符串。但是最好的解决方案是什么?为什么 PostgreSQL 9.X 改为hexforbytea表示?
这是一个简单的设置还是有技术原因?

4

1 回答 1

4

Postgres 9.0的发行说明中给出了一个基本原理:

  • 允许bytea以十六进制表示法写入值 (Peter Eisentraut)

server 参数bytea_output控制是否使用十六进制或传统格式进行bytea输出。PQescapeByteaConn()当连接到 PostgreSQL 9.0 或更新的服务器时,Libpq 的函数会自动使用十六进制格式。但是,9.0 之前的 libpq 版本将无法正确处理来自较新服务器的十六进制格式。

新的十六进制格式将直接兼容更多使用二进制数据的应用程序,允许他们存储和检索二进制数据而无需额外的转换。它的读写速度也比传统格式快得多。

你似乎已经意识到了bytea_output

于 2013-06-17T23:08:33.467 回答