ruby - 使用 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 没有一个方法,可以简单地删除枚举值
解决方案
如果您查看https://www.postgresql.org/docs/12/sql-altertype.html,您会看到 PostgreSQL 支持添加和重命名枚举值,但不支持删除它们。
推荐阅读
- web-applications - 试用完成后如何创建支付页面 - 开发者模式
- python - 如何使用 python 2.7 从 url 下载所有图像 - 问题
- python - 如何在 python 中下载登录表单后面网页的大媒体链接?
- spring-mvc - restTemplate.postforEntity(url, request,ResponseObj.class) 的测试请求正文
- python - map() 输出将字符串添加到字符串数组 Python
- c# - .net core 2.1中单例注入方法的区别
- vue.js - 默认情况下未选中 Vue.js 单选按钮
- java - 缩短冒泡排序循环
- java - 我们在 java 中使用 char[] 处理敏感数据,在 Kotlin 中呢?CharArray 好吗?
- datetime - 在 Hyperledger 中的 DateTime 字段 (ISO-8601) 中仅指定时间