У меня есть db - Postgresql v11.3 и сиквел с pg_enum, так как я могу удалить значение из типа enum? Например, нужно изменить тип перечисления столбца:
Sequel.migration do
up do
removed_languages = %w["ca", "hr", "lt", "sr"]
#:old_enum_type => %w[ar cs de el en es fi fr he hi hu it ja nl no pl pt ro ru sk sv ta tr zh ca hr lt sr]
remove_enum_value= (:old_enum_type, removed_languages) #f.e. expected method
create_enum(
:enum_user_known_languages,
%w[ar cs de el en es fi fr he hi hu it ja nl no pl pt ro ru sk sv ta tr zh]
)
alter_table :users do
set_column_type(
:known_languages,
'enum_user_known_languages[]',
using: 'known_languages::text[]::enum_user_known_languages[]'
)
set_column_default :known_languages, '{}'
end
end
end
Новый тип перечисления такой же, как и предыдущий, с небольшим изменением - у нового типа нет некоторых языков. Но может быть ситуация, если кто-то использует отсутствующие языки - миграция будет сбоем. К сожалению, у pg_enum нет метода, который мог бы просто удалить значение enum