Postgres - UPDATE with CASE 不适用于 enum 列

猴子在Arock

我有一张fruits桌子:

--------------------------------
id | event_date   | fruit_type |
--------------------------------
1  | '2017-01-01' | apple      |
2  | '2018-01-01' | orange     |
3  | '2019-01-01' | pear       |

fruit_type列属于类型enum,可以采用以下选项:

  • 苹果
  • 橙色

尝试fruit_type使用CASE. 如果我使用以下UPDATE语句:

UPDATE fruits
SET fruit_type = CASE WHEN event_date = '2019-01-01' THEN 'apple' END;

我收到错误:

[42804] 错误:列“fruit_type”的类型为“enum_fruits_fruit_type”,但表达式的类型为文本 提示:您需要重写或转换表达式。

如果我做一个UPDATE没有语句CASE,那么我可以很好地更新该列:

UPDATE fruits
SET fruit_type = 'apple'
WHERE date = '2019-01-01';

我需要CASE在我的UPDATE语句中使用,但如果该列的类型为 ,我似乎无法使用enum有什么办法可以让它工作吗?

埃希尔瓦纳

您必须将类型显式转换为枚举类型:

UPDATE fruits
SET fruit_type = CASE WHEN event_date = '2019-01-01' THEN 'apple'::enum_fruits_fruit_type END;

我认为当您直接设置列时,postgresql 会自动为您完成,但涉及条件,它无法完成。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章