Подтвердить что ты не робот

Обновление столбца varchar до типа перечисления в postgresql

У нас есть столбец varchar в таблице, который нам нужно обновить до типа перечисления.

Все значения в столбце varchar являются допустимыми значениями в перечислении. В столбце varchar нет нулевых значений.

ALTER TABLE tableName
   ALTER COLUMN varcharColumn TYPE enum_type

ОШИБКА: столбец "varcharColumn" не может быть введен для ввода типа enum_type Состояние SQL: 42804

Круг вокруг:

  • Создайте новый столбец с типом перечисления.
  • Обновите столбец типа перечисления столбцом varchar после приведения типов.
  • Отбросьте столбец varchar.
  • Переименуйте имя столбца типа перечисления в имя столбца varchar.

Есть ли лучший способ достичь этого?

Спасибо заранее.

4b9b3361

Ответ 1

Вам нужно определить приведение, которое будет использоваться, потому что нет доступных литов по умолчанию.

Если все значения в varcharColumn соответствуют определению перечисления, то следующее должно работать:

alter table foo 
  ALTER COLUMN varcharColumn TYPE enum_type using varcharColumn::enum_type;

Мне лично не нравятся перечисления, потому что они довольно негибкие. Я предпочитаю ограничение проверки на столбце varchar, если я хочу ограничить значения в столбце. Или - если список значений часто изменяется и будет расти - старая "таблица поиска" с ограничением внешнего ключа.

Ответ 2

Получил это.

ALTER TABLE tableName
   ALTER COLUMN varcharColumn TYPE enum_type
    USING varcharColumn::enum_type

обновит его успешно.