Table に存在していれば Update に切り替える SQL[PostgreSQL]
(2026-08-04 01:45:43) by shinoda
< ページ移動: 1 2 3 >
CSV を読み込んで DB に登録している処理で、今は単純に INSERT を行っているのだが、それだとキーが重複したときに
Caused by: java.sql.BatchUpdateException: バッチ 0 INSERT INTO t_user_summary (
user_id,
user_name,
user_address1,
user_address2,
user_phone_number,
anniversary,
note
) VALUES (
('1'::int8),
('MASA SHIMURA'),
('岩国市黄金町黄金1928−11'),
(''),
('090-0000-1111(携帯)'),
('19650824'),
('誕生日(2回目)')
)
はアボートしました: ERROR: 重複したキー値は一意制約"t_user_summary_pkey"違反となります
詳細: キー (user_id, anniversary)=(1, 19650824) はすでに存在します。 このバッチの他のエラーは getNextException を呼び出すことで確認できます。
このように更新に失敗する。(このケースは、user_id が '1' で anniversary が '19650824' のデータがすでに存在している)
そこで、まず存在チェックを行って、存在していれば UPDATE、存在していなければ INSERT を行うようにしたい。
そのために、SELECT 処理を埋め込みたいが、Spring Batch の Chunk 方式の場合、どこにその処理を入れればきれいなのか?と Gemini に気いてみたら「SQL 直せばいいだけです」と言われた。
そうなん?いやあ、俺も、SQL をきちんと(専門書を買うなどして)一から勉強したことなくて・・・。長年の経験から相当複雑な SQL も組めるけど、あるステートメントのオプションなんかは知らないものもちょこちょこある。
Gemini が示した SQL の、