PostgreSQL字节二进制数据插入

PostgreSQL bytea binary data inserting

本文关键字:插入 数据 二进制 字节 PostgreSQL      更新时间:2023-10-16

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

说数据长度增加了一倍意味着,在插入命令int应用程序之前,我们有:sContent.length()=19与此同时,在postgres中,我们得到:从二进制包中选择长度(bindata)=38,位长度(binddata)=304

在C++应用程序中,我们做:

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 ),))

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

这让我得出结论,在Postgres9中插入二进制数据是可能的,而不会使其长度(大小)加倍。但是,当数据源是字节数组时,这可能吗?

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

尊敬的Anthony

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