在postgresql中将int列升级为enum类型

Yan*_*eve 3 postgresql enums database-migration

在这个问题之后,我想知道是否有一种优雅的方式对 int 值执行相同的操作。

更准确地说,给定一个具有固定数量值(不一定是连续的)的 Integer 列,我将如何将每个数字映射到每个枚举值。当我说地图时,我的意思是迁移

例如:让我们假设枚举

CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');
Run Code Online (Sandbox Code Playgroud)

我们想要绘制地图:

0 -> 'sad'
1 -> 'ok'
10 -> 'happy'
Run Code Online (Sandbox Code Playgroud)

假设我们有一个表,其中包含名为“心情”的列,其值仅为 {0,1,10}。

另外,我看不出这里的答案对我有帮助。

我使用 Postgres 9.5

Phi*_*ing 7

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;
Run Code Online (Sandbox Code Playgroud)