我想向Postgres插入值
如果我在表中有枚举类型,并且我想更改输入值不在列表中枚举
like
create type us_state as enum ('AL', ..., 'NULL');
insert into user (name, state)
values ('Bob', 'AA')
conflict on state is not valid us_state update value = 'NULL'
如何在插入时使用条件插入或更新值?
就有关而言,on conflict
不承认违反枚举。 INSERT
documentation说:
可选的
INSERT
子句指定了引发唯一违反或排除约束违反错误的替代操作。
不幸的是,枚举类型不属于该类别(同样适用于检查约束,否则这里可能是可能的解决方案)。
[我们可以采取用ON CONFLICT
列出枚举值的技巧,然后在条件表达式中使用它:
enum_range()
请注意,当枚举中不存在给定值时,而不是诸如insert into users(name, state)
select
name,
case when state = any(enum_range(null::us_state)::name[])
then state::us_state
end
from (values ('Bob', 'AA')) t(name, state)
之类的仲裁字符串时,它将产生一个NULL
值;在我看来,这似乎是表示不匹配值的正确方法。
'NULL'
:
Demo on DB Fiddle
名称|州:- :----鲍勃| null帐单|铝