Опубликовано 07/11/2014
Postgres 9 поддерживает расширение собственного типа ENUM через ALTER TYPE, чего нет в postgres 8
Приходится делать так:
(для примера наш тип будет называться extype, колонки с этим типом у меня называются также)
1. Выбираем таблицы с колонками с названием extype
select table_name from information_schema.columns where column_name = 'extype';
2. Переименовываем старый тип
alter type extype rename to extype_old;
3. Создаем новый тип
CREATE TYPE extype AS ENUM ('value1', 'value2','valueN');
4. Переименовываем колонку с нашим старым типом
alter table some_table rename column extype to extype_old;
5. Создаем новую колонку с нашим типом
alter table some_table add extype extype;
6. Копируем значения из старой колонки в новую
update some_table set extype = extype_old::text::extype;
7. Если нужно, ставим ограничение на заполненность колонки и индексируем ее
alter table some_table alter column extype set not null;
CREATE INDEX iextype_some_table ON some_table (extype);
8. Удаляем старую колонку
alter table some_table drop column extype_old;
Операции 4-8 провести для всех таблиц, в которых имеется колонка со старым типом.
Представления (если имеются) придется пересоздавать.
Добавить комментарий