使用 gem sequel 删除枚举值

Remove enum value with gem sequel

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

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 没有可以简单删除枚举值的方法

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