我的应用程序(在Delphi和ZEOS组件中开发)使用PostgreSQL 8.4并将一些缩略图存储到bytea
列中。
我想迁移到PostgreSQL 9.2并恢复转储,一切正常,除非我尝试检索这些图像:Postgres 9.2使用hex
代替Postgres 8.4中使用的escape
输出表示
有两种可能的解决方案:更改escape
表示的Postgres 9.2设置或通过应用程序更改二进制数据中的hex
字符串。但什么是最好的解决方案?为什么PostgreSQL 9.X对于hex
表示更改为bytea
?
这是一个简单的设置还是有技术原因?
答案 0 :(得分:3)
release notes of Postgres 9.0:
给出了一个基本原理
- 允许以十六进制表示法编写
bytea
值(Peter Eisentraut)服务器参数
bytea_output
控制是十六进制还是传统 format用于bytea
输出。 Libpq的PQescapeByteaConn()
功能 连接到PostgreSQL 9.0或时,自动使用十六进制格式 较新的服务器。但是,9.0之前的libpq版本将无法正确使用 处理来自较新服务器的十六进制格式。新的十六进制格式将直接与更多应用程序兼容 使用二进制数据,允许它们存储和检索它 额外的转换。它的读写速度也快得多 比传统格式。
您似乎已经了解bytea_output
。