Добавление перечислимых типов в Postgres - PullRequest
0 голосов
/ 14 марта 2011

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

Ранее я достиг этого путем:

  1. копирования всех полей с использованием типа во временное поле varchar,
  2. удаление всех полей и функций с использованием типа,
  3. удаление типа,
  4. создание нового типа с дополнительным перечисляемым значением,
  5. Настройкавсе временные поля и функции возвращаются для использования перечислимого типа.

Большая работа в любой ситуации, но невероятно большая задача, если этот тип используется десятки раз по всей БД в таблицах, представлениях.и функции.Наверняка должен быть более простой способ просто добавить новое значение к перечисляемому типу?

Большое спасибо за любую помощь.

Ответы [ 2 ]

1 голос
/ 14 марта 2011

@ a_horse_with_no_name описывает оптимальный способ решения этой проблемы.Если полная реорганизация не устраивает вас, вы можете воспользоваться поддержкой PostgreSQL для транзакций как в DDL, так и в DML-операциях.

Таким образом, теоретически вы можете выполнить все пять своих шагов вединичная транзакционная операция.Благодаря MVCC вы сможете безопасно вносить эти изменения и оказывать минимальное функциональное влияние на пользователей вашей базы данных.Скорее всего, у вас возникнут огромные накладные расходы на диск (в зависимости от размера таблиц) и существенное раздувание базы данных (если транзакция занимает много времени, вакуумный процесс не запустится).

Все это, как говорится, вполне выполнимо.

0 голосов
/ 14 марта 2011

В новой версии 9.1 будет простой способ: http://developer.postgresql.org/pgdocs/postgres/sql-altertype.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...