原创

PostgreSQL で bytea 列を挿入するために 8 進数ではなく 16 進数の文字列を渡すように JOOQ を設定するにはどうすればよいですか?

温馨提示:
本文最后更新于 2024年04月12日,已超过 48 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

JOOQ を使用して、bytea 列を持つ postgresql テーブルにレコードを挿入しています。

送信しているバイト配列は約150Mbで、Postgresqlサーバーからエラーが発生しています。

エラー: メモリ割り当て要求サイズ 1073741824 が有効です。

コードと JOOQ が生成しているビットを詳しく調べるところ、byteArray が 8 進数に変換される(org.jooq.util.postgres.PostgresUtils#toPGString(byte[]))、書いたのは次のようになっていることがわかりました。

INSERT INTO test_table (my_data) VALUES (E'\\042\\145\\171...\\042'::bytea);

より小さいバイト配列を使ってテストすると、データが挿入された後のサイズは、実際にはバイト配列のサイズであり、8 進文字列 (8 進文字列の方がはるかに長い) のサイズではないことがわかります。

問題は、8 進数の文字列が長すぎるため、postgresql サーバーがそれを列に保存しようとする前であっても、bytea へのキャストに失敗することのようなものです。

hex代わりに文字列を値として譲るようにJOOQを構成する方法はありますかoctal?

JOOQバージョン3.16.4とpostgresqlを使っています13.9

正文到此结束
热门推荐
本文目录