如果值不在ENUM中,则更改插入值

问题描述 投票:3回答:1

我想向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'

如何在插入时使用条件插入或更新值?

java sql postgresql jdbc sql-insert
1个回答
2
投票

就有关而言,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帐单|铝
© www.soinside.com 2019 - 2024. All rights reserved.