使用Postgres 11
当我运行此查询时:
UPDATE "Push"
SET "state" = CASE id WHEN 46 THEN 'ABANDONED' else 'COMPLETED' END
WHERE id in (46,47)
Postgres抱怨:
列“state”的类型为“PushState”,但表达式的类型为text HINT:您需要重写或强制转换表达式。
但是,如果我从else
中删除'COMPLETED'
并放入else "state"
,它可以正常工作,没有错误。
UPDATE "Push"
SET "state" = CASE id WHEN 46 THEN 'ABANDONED' WHEN 47 THEN 'COMPLETED' else "state" END
WHERE id in (46,47)
我不明白它为什么要这样。有人知道吗?我希望我的第一个版本。
1条答案
按热度按时间pxy2qtax1#
因为枚举只能表示较小的文本值范围,所以不能隐式地从文本转换为枚举。换个方式也行postgres无法知道此文本是否也与枚举条件匹配。所以你需要显式的造型。