
前提・実現したいこと
前提
postgreSQL
言語php
フレームワーク Laravel
DBのデータ
id=1 name=ぶどう last_update_time=2019/01/01 01:01:01 id=2 name=ぶどう last_update_time=2019/01/01 01:01:01 id=3 name=ぶどう last_update_time=2019/01/01 01:01:01
更新用データ
id=1 name=ぶどう last_update_time=2019/01/01 01:01:01 id=2 name=バナナ last_update_time=2019/01/31 10:01:01 id=3 name=みかん last_update_time=2019/01/31 10:01:01 id=4 name=なし last_update_time=2019/01/31 10:01:01
■実現したいこと
・更新用のデータでDBの値をUpdate/Insertしたい
・last_update_timeが同じデータは更新処理もしたくない
・上記の例で言えば更新用データ→DBデータに対する挙動は
id=1 何もしない
id=2 update
id=3 update
id=4 insert
■聞きたいこと
実現する為にSQL一本で可能かどうか
■試したこと・考え
INSERTとUPDATEをCONFLICT句で
と思ったんですが、
同じデータの場合はたとえデータの変更がなくてもUpdate句が走ってしまいます。
よって更新用データでループして、last_update_timeがDBの値と異なればUpdateデータがなければInsert
という処理をループする、しか思いつきませんでした。
しかし処理件数は1000 件を超えることもあり、かつ数分に一度走る監視用のような処理のため
できればループはしたくありません。(殆どが変更のないデータである可能性が高いため)
SQL1本で上記の処理は実現可能でしょうか?
また、一本は無理でも、上記処理より良い処理はあるでしょうか