在question之后,我想知道是否以优雅的方式为int值做同样的事情。
更准确地说,给定一个具有固定数量值(不一定是连续的)的Integer列,我将如何将每个数字映射到每个枚举值。当我说 map 时,我指的是 migrate
例如: 让我们假设枚举是as
CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');
我们想要映射:
0 -> 'sad'
1 -> 'ok'
10 -> 'happy'
我们有一个表,其中包含一个名为mood的列,其值仅为{0,1,10}。
另外,我看不出答案here对我有帮助。
我使用Postgres 9.5
答案 0 :(得分:3)
USING
子句是告诉postgresql如何转换值的表达式。这是一个表达式,就像您在SELECT
中使用的那样。因此,如果您需要指定映射,那么您只需使用CASE
语句。
alter table foo
alter bar type mood
using
case bar
when 0 then 'sad'
when 1 then 'ok'
when 10 then 'happy'
end :: mood;