#postgresql #enums #alter
#postgresql #перечисления #изменить
Вопрос:
У меня есть одна таблица my_table со столбцом my_column с типом my_type(‘value1’, ‘value2’, ‘value3’). Я хочу удалить ‘value3’. Я читал, что значения для перечислений не должны быть удалены… но что этого можно было бы достичь, сделав это :
- создайте новый тип my_type_NEW
- измените столбцы, чтобы использовать только my_type_NEW
- удалите my_type
- переименуйте my_type_NEW в my_type :(.
Я пытался :
ALTER TABLE my_table ALTER my_column type text
CREATE TYPE my_type_new AS ENUM ('value1', 'value2')
ALTER TABLE my_table ALTER my_column type my_type_new using my_column::my_type_new
DROP TYPE my_type;
ALTER TYPE my_type_new RENAME TO my_type
В конце ‘value3’ все еще там. Я не могу понять почему.
Спасибо за вашу помощь.
Ответ №1:
Вероятно, таблица содержит value3
и завершается ошибкой.
ALTER TABLE my_table ALTER my_column type my_type_new using my_column::my_type_new
Прежде чем пытаться изменить столбец, необходимо выполнить обновление
UPDATE my_table
SET my_column = NULL -- or any other
WHERE my_column = 'value3';
Комментарии:
1. Спасибо за ваш ответ, но, к сожалению, таблица пуста. Я не получил сообщения об ошибке при выполнении команд. Просто в конце новый тип имеет точно такие же значения, что и старый.
Ответ №2:
Значение фактически удаляется из перечисления. Схема в intellij не синхронизирована / не обновлена должным образом. Меню пункта «Инструменты базы данных / Забыть кэшированные схемы» не работает :
Автоматически сгенерированное определение, отображаемое при двойном щелчке по типу перечисления, неверно. Я постараюсь связаться со службой поддержки intellij.