Обновление столбца varchar до типа перечисления в postgresql
У нас есть столбец varchar в таблице, который нам нужно обновить до типа перечисления.
Все значения в столбце varchar являются допустимыми значениями в перечислении. В столбце varchar нет нулевых значений.
ALTER TABLE tableName
ALTER COLUMN varcharColumn TYPE enum_type
ОШИБКА: столбец "varcharColumn" не может быть введен для ввода типа enum_type
Состояние SQL: 42804
Круг вокруг:
- Создайте новый столбец с типом перечисления.
- Обновите столбец типа перечисления столбцом varchar после приведения типов.
- Отбросьте столбец varchar.
- Переименуйте имя столбца типа перечисления в имя столбца varchar.
Есть ли лучший способ достичь этого?
Спасибо заранее.
Ответы
Ответ 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
обновит его успешно.