使用 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 支持添加和重命名枚举值,但不支持删除它们。
我有一个数据库 - 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 支持添加和重命名枚举值,但不支持删除它们。