在Insert和Update中具有相同值的PostgreSQL Upsert(冲突时)

在Insert和Update中具有相同值的PostgreSQL Upsert(冲突时),postgresql,postgresql-9.6,Postgresql,Postgresql 9.6,当我在插入中使用相同的值时,是否可以简化语法。。。关于冲突状态 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'; 此类语句还有很多,因为它们是在每次应用程序更新时运行的脚本的一部分 基本上,我正在寻找一种方法来避免

当我在插入中使用相同的值时,是否可以简化语法。。。关于冲突状态

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';
此类语句还有很多,因为它们是在每次应用程序更新时运行的脚本的一部分

基本上,我正在寻找一种方法来避免两次指定相同的值。

使用关键字:

这也适用于多行,例如:

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;

这看起来很棒。即使所有的值都应该更新,你也必须指定被排除的列吗?@tommy:是的,很遗憾。
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;