321.17. PostgreSQL の場合
JdbcAggregationRepository
によって使用される楽観的ロックで問題を引き起こす可能性がある特別なデータベースがあります。PostgreSQL は、データ整合性違反の例外 (SQLState 23505 の例外) の場合、接続を無効としてマークします。これにより、ネストされたトランザクション内で接続が事実上使用できなくなります。詳細については、このドキュメント を参照してください。
org.apache.camel.processor.aggregate.jdbc.PostgresAggregationRepository
は JdbcAggregationRepository
を拡張し、楽観的なロック動作を提供する特別な INSERT ..ON CONFLICT ..
ステートメントを使用します。
このステートメントは次のとおりです (デフォルトの集計テーブル定義を使用)。
INSERT INTO aggregation (id, exchange) values (?, ?) ON CONFLICT DO NOTHING
詳細については、PostgreSQL のドキュメント を参照してください。
この節を使用すると、java.sql.PreparedStatement.executeUpdate()
呼び出しは、SQLState=23505 で SQLException を出力する代わりに 0
を返します。以降の処理は、一般的な JdbcAggregationRepository
とまったく同じですが、PostgreSQL 接続を無効としてマークすることはありません。