次の問題に直面しました。App から PostgreSQL 9.2 DB の「bytea」フィールドにバイナリ データを挿入すると、その長さが 2 倍になることがわかりました。アプリは C++ で記述され、SQL API ライブラリを使用して Postgres にアクセスします。公式ドキュメントへの参照: http://www.sqlapi.com/HowTo/blobs.html
データ長が 2 倍になるということは、アプリにコマンドを挿入する前に次のことを意味します: sContent.length() = 19 一方、postgres では次のようになります:
C++ アプリでは、次のことを行います。
SAString sContent = SomeFunctionConvertsByteArrayToSAString(bindata);
cmd.Param("bindata").setAsLargeBinary() = sContent; //SA_dtLongBinary <=> BYTEA
//watch: sContent.length() = 19
cmd.Execute();
postgres でフィールド長を 2 倍にします ( length(bindata) = 38 を選択します)。
ファイルからデータベースにバイナリ データを挿入する簡単な Python3 スクリプトを作成しました。
bindataStream = open('C:\\Temp\\bin.dat', 'rb').read()
cursor.execute("INSERT INTO binpacket( bindata ) VALUES (%s)",
(psycopg2.Binary(bindataStream ),))
挿入されるデータの長さは、ソース バイナリ データ ファイルと同じです。
これにより、長さ(サイズ)を2倍にすることなくバイナリデータをPostgres 9に挿入できるという結論に至りました。しかし、データソースがバイト配列の場合は可能ですか?
byteaバイナリデータをPostgresに挿入する正しい解決策を見つけるのを手伝ってください。説明されている状況の説明もいただければ幸いです。
よろしく、 アンソニー