0

面临以下问题:将一些二进制数据从 App 插入到我们 PostgreSQL 9.2 DB 中的“bytea”字段中,我们发现它的长度增加了一倍。该应用程序是用 C++ 编写的,并使用 SQL API 库来访问 Postgres。参考官方文档:http ://www.sqlapi.com/HowTo/blobs.html

说数据长度加倍意味着,在应用程序中插入命令之前,我们有: sContent.length() = 19 同时在 postgres 中我们得到: select length(bindata) = 38, bit_length( bindata ) = 304 from binpacket

在 C++ App 中,我们这样做:

SAString sContent = SomeFunctionConvertsByteArrayToSAString(bindata);
cmd.Param("bindata").setAsLargeBinary() = sContent; //SA_dtLongBinary <=> BYTEA
//watch: sContent.length() = 19
cmd.Execute();

并在 postgres 中将字段长度加倍(选择长度(bindata)= 38)。

我写了一些简单的 Python3 脚本,将二进制数据从文件插入到数据库:

bindataStream = open('C:\\Temp\\bin.dat', 'rb').read()
cursor.execute("INSERT INTO binpacket( bindata ) VALUES (%s)",
(psycopg2.Binary(bindataStream ),))

插入的数据长度等于源二进制数据文件的长度。

这使我得出结论,可以将二进制数据插入 Postgres 9 而不使其长度(大小)加倍。但是当数据源是字节数组时有可能吗?

请帮助找到如何将 bytea 二进制数据插入 Postgres 的正确解决方案。对所描述情况的解释也将不胜感激。

最好的问候,安东尼

4

1 回答 1

0

要解决所描述的问题,请更新到 SQLAPI++ 4.1.2(它对合法客户免费,就像我们一样)。开发人员使用 Postgres 9.x 的二进制数据修复了这个问题。在 SQLAPI++ 4.1.2 版本中。

于 2013-12-20T07:05:17.097 回答