0

次の問題に直面しました。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に挿入する正しい解決策を見つけるのを手伝ってください。説明されている状況の説明もいただければ幸いです。

よろしく、 アンソニー

4

1 に答える 1