2017-01-05 19 views
2

アップサンプリングクエリを表現することは可能ですか?挿入されたデータにはデータベースに既に存在するものと比較して変更がない場合は何も起こりません。PostgreSQL upsert:フィールドが変更されない場合は何も行いません

現在、私は持っている:

insert into feeds (link, title, category) 
values (...) 
on conflict (link) 
do update set (title, category, _updated) 
= (..., now()::timestamp) 

答えて

6

あなたはupdate部分にwhere句を追加することができます。

insert into feeds (link, title, category) 
values (...) 
on conflict (link) 
do update 
    set (title, category, _updated) = (..., now()::timestamp) 
where (feeds.title, feeds.category) is distinct from (excluded.title, excluded.category) 
+0

私は次のエラーを取得する: ERROR:列参照 "タイトルは" あいまいなポジションです。 167 –

+0

@MichielBorkent:ターゲット列を修飾するのを忘れてしまった。私の編集を参照してください。 –

+0

私はクエリの最後にreturn文を持っています:feed_uuidを返しています。新しいレコードを挿入したり、フィールドの1つが変わったりすると、idを返します。しかし、何も挿入/更新されないときは何も返されません。これに対する解決策は何でしょうか? –

関連する問題