面临以下问题:将一些二进制数据从 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 的正确解决方案。对所描述情况的解释也将不胜感激。
最好的问候,安东尼