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

标签 postgresql enums database-migration

关注此question我想知道是否有优雅的方式对 int 值做同样的事情。

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

例如: 让我们假设枚举是 as

CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');

我们想映射:

0 -> 'sad'
1 -> 'ok'
10 -> 'happy'

比方说,我们有一个表,其中包含一个名为 mood 的列,其值仅为 {0,1,10}。

此外,我看不到答案 here帮助我。

我使用 Postgres 9.5

最佳答案

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;

关于postgresql - 将 int 列升级为 postgresql 中的枚举类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39316035/

相关文章:

mysql - 是否可以在不重新创建 MySQL 唯一索引的情况下将其更改为非唯一索引

sql - 有限制且无全表扫描的聚合函数

sql - 如果列在 PostgreSQL 中同时包含 int 和 NULL 值,如何从文本转换为 int

java - instanceof 是一种好的做法吗?

C++ - 使用枚举生成一副纸牌

c# - 数据库优先方法的 EF 迁移?

sql - 如何在多个表中查找不同的用户

sql - 如何从 postgres 函数返回临时表?

java - java中的枚举: How can I use numbers

scala - Liquibase 找不到解析器