首页 > 解决方案 > 使用 gem sequel 删除枚举值

问题描述

我有一个 db - Postgresql v11.3 和带有 pg_enum 的 Sequel,那么如何从枚举类型中删除值?例如,需要更改列枚举类型:

Sequel.migration do
    up do
        removed_values = %w["val1" "val2"]
        remove_enum_value= (:old_enum_type, removed_values) 


        create_enum(
            :enum_column,
            %w[val3 val4]
        )

        alter_table :users do
            set_column_type(
                :enum_column,
                'enum_column[]',
                using: 'old_enum_column::text[]:::enum_column[]'
            )
            set_column_default :enum_column, '{}'
        end
    end
end

新的枚举类型与以前的相同,几乎没有什么不同 - 新类型没有一些值。但是,如果有人使用缺失值,可能会出现这种情况——迁移会崩溃。不幸的是,pg_enum 没有一个方法,可以简单地删除枚举值

标签: rubypostgresqlenumssequel

解决方案


如果您查看https://www.postgresql.org/docs/12/sql-altertype.html,您会看到 PostgreSQL 支持添加和重命名枚举值,但不支持删除它们。


推荐阅读