首页 > 解决方案 > Postgres 使用默认列表达式进行冲突更新

问题描述

如果列具有默认值表达式

create table A (
...
b numeric default cos(54)
)

语句是否可以on conflict使用默认表达式重置列而不

即只是从更新语句中准确引用默认值。就像是

on conflict
update set b = default

甚至

on conflict
update set b = case when some_condition then default else A.b end

标签: sqlpostgresql

解决方案


是的,您可以DEFALT在 upsert 中使用该值:

INSERT INTO t (foo,bar) VALUES (1,2)
ON CONFLICT (foo) DO UPDATE
SET bar = DEFAULT;

演示:db<>fiddle


推荐阅读