Невозможно удалить одно значение перечисления в postgres

#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
 

db<>fidde demo

Прежде чем пытаться изменить столбец, необходимо выполнить обновление

 UPDATE my_table
SET my_column = NULL   -- or any other
WHERE my_column = 'value3';
 

db<>демонстрация скрипки 2

Комментарии:

1. Спасибо за ваш ответ, но, к сожалению, таблица пуста. Я не получил сообщения об ошибке при выполнении команд. Просто в конце новый тип имеет точно такие же значения, что и старый.

Ответ №2:

Значение фактически удаляется из перечисления. Схема в intellij не синхронизирована / не обновлена должным образом. Меню пункта «Инструменты базы данных / Забыть кэшированные схемы» не работает :

Автоматически сгенерированное определение, отображаемое при двойном щелчке по типу перечисления, неверно. Я постараюсь связаться со службой поддержки intellij.