Удалить значение enum с помощью сиквела - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть 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

1 Ответ

1 голос
/ 14 ноября 2019

Если вы посмотрите https://www.postgresql.org/docs/12/sql-altertype.html,, вы увидите, что PostgreSQL поддерживает добавление и переименование значений перечисления, но не удаление их.

...