面临以下问题:从App中将一些二进制数据插入PostgreSQL 9.2 DB中的“bytea”字段,我们发现它的长度加倍。 该应用程序是用C ++编写的,并使用SQL API库来访问Postgres。 参考官方文档:http://www.sqlapi.com/HowTo/blobs.html
说数据长度加倍意味着,在插入命令int之前我们有: sContent.length()= 19 同时在postgres我们得到: 选择长度(bindata)= 38,来自binpacket的bit_length(bindata)= 304
在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而不会使其长度(大小)加倍。但是当数据源是bytearray时是否可能?
请帮助找到如何将bytea二进制数据插入Postgres的正确解决方案。 所描述的情况的解释也将受到赞赏。
最好的问候,安东尼
答案 0 :(得分:0)
要修复上述问题,请更新到SQLAPI ++ 4.1.2(合法客户可以免费使用,就像我们一样)。 开发人员使用Postgres 9.x的二进制数据修复了这个问题。在SQLAPI ++ 4.1.2发布中。