JDBCを使用して大量のデータをPostgSQLデータベースに配置するexecuteBatchステートメントとPreparedステートメントの両方に関連する奇妙な問題があります。executeBatchを使用して、毎回50,000個のステートメントをデータベースに送信しています。
バッチの実行とプリペアドステートメントが機能していることはわかっています。一部のデータがデータベースに流れ込んでいます。プリペアドステートメントは
INSERT INTO time ( time_id, log_id, phenomenon_time, qc_phenomenon_time )
SELECT nextval( 'time_seq' ), ?, ?, ?
これを実行バッチで使用すると、データはデータベースにあります。
次のプリペアドステートメントを使用する場合、
INSERT INTO result_3d ( result_3d_id, time_id, variable_id, value, qc_value )
SELECT nextval( 'result_3d_seq' ), ( SELECT t.time_id
FROM time t
WHERE t.log_id = ?
AND t.phenomenon_time = ? ), ?, ?, ?
バッチの実行では、データベースにデータがありません。私はデータベースロギングをオンにして、最初はすべてを見つけましたが、2番目は何も見つけませんでした。2番目のプリペアドステートメントは最初のデータに依存していますが、データベースは2番目のステートメントさえ認識していません。
スローされる例外はありません。唯一の不思議なことに、2番目のプリペアドステートメントの場合、返される配列のサイズはゼロです。実行バッチはすぐに戻ります。2番目のプリペアドステートメントのサブクエリは許可されていますか?
PostgreSQLv8.3.19データベースに対するJDBCドライバーとしてpostgres-9.1-901.jdbc4.jarを使用しています。
助けてください。