在postgresql中将int列升级为枚举类型

时间:2016-09-04 10:38:37

标签: postgresql enums database-migration

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

1 个答案:

答案 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;