2016-10-06 23 views
0

Insert ... On Conflict文で同じ値を使用すると構文を単純化できますか?InsertとUpdateで同じ値を持つPostgresSQL Upsert(競合時)

INSERT INTO cars 
    (car_id, car_type, car_model) 
values 
    (1, 'tesla', 'model s') 
ON CONFLICT (car_id) DO UPDATE SET 
    car_type = 'tesla', 
    car_model = 'model s'; 

これらのステートメントは、すべてのアプリケーションアップデートで実行されるスクリプトの一部であるため、さらに多くのステートメントがあります。

私は同じ値を2回指定しない方法を探しています。

INSERT INTO cars 
    (car_id, car_type, car_model) 
values 
    (1, 'tesla', 'model s') 
ON CONFLICT (car_id) DO UPDATE SET 
    car_type = excluded.car_type, 
    car_model = excluded.car_model; 

これはまた、複数の行で正しく動作します、例えば:

INSERT INTO cars 
    (car_id, car_type, car_model) 
values 
    (1, 'tesla', 'model s'), 
    (2, 'toyota', 'prius') 
ON CONFLICT (car_id) DO UPDATE SET 
    car_type = excluded.car_type, 
    car_model = excluded.car_model; 

答えて

1

excludedキーワードを使用します。すべての値を更新する必要がある場合でも除外列を指定する必要はありますか?
+0

これは偉大に見える – Tommy

+0

@tommy:はい、残念ながら。 –

関連する問題