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
正文到此结束
- 本文标签: 家庭宠物
- 本文链接: https://www.coder6.net/article/2465
- 版权声明: 本文由蚂蚁原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
热门推荐
-
浏览(195) 评论(0)