PostgreSQL bytea вставка двоичных данных

Столкнулся со следующей проблемой: вставив некоторые двоичные данные из приложения в поле «bytea» в нашей базе данных PostgreSQL 9.2, мы выяснили, что их длина удваивается.
Приложение написано на C ++ и использует библиотеку SQL API для доступа к Postgres.
Ссылка на официальный документ: http://www.sqlapi.com/HowTo/blobs.html

Сказать, что длина данных удвоена, означает, что перед командой вставки в приложение мы имеем:
sContent.length () = 19
тем временем в postgres мы получаем:
выберите длину (bindata) = 38, bit_length (bindata) = 304 из binpacket

В приложении 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 ),))

и длина вставленных данных равна исходному файлу двоичных данных.

Это приводит меня к выводу, что в Postgres 9 можно вставлять двоичные данные, не удваивая их длину (размер). Но возможно ли, когда источником данных является байтовый массив?

Пожалуйста, помогите найти правильное решение, как вставить байтовые двоичные данные в Postgres.
Разъяснения описанной ситуации также приветствуются.

С наилучшими пожеланиями, Энтони

0

Решение

Чтобы устранить описанную проблему, обновите SQLAPI ++ 4.1.2 (это бесплатно для легальных клиентов, таких как мы).
Разработчики исправили проблему с двоичными данными для Postgres 9.x. в SQLAPI ++ 4.1.2 Release.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]