postgresql Postgres抱怨只有在else中使用时才将enum转换为字符串

kr98yfug  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(1)|浏览(109)

使用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)

我不明白它为什么要这样。有人知道吗?我希望我的第一个版本。

pxy2qtax

pxy2qtax1#

create table s (id int,state PushState);
insert into s (values(46,'ABANDONED'::PushState),(47,'MISC'));

UPDATE  s
SET state = CASE id WHEN 46 THEN 'ABANDONED'::pushstate else 'COMPLETED' END
WHERE id in (46,47);

因为枚举只能表示较小的文本值范围,所以不能隐式地从文本转换为枚举。换个方式也行postgres无法知道此文本是否也与枚举条件匹配。所以你需要显式的造型。

相关问题