Изменить домен изменить тип

Есть ли способ изменить тип домена и изменить тип на новый? У меня есть столбец, использующий домен, который имеет тип VARCHAR(25) и хотел бы увеличить длину до 150.

3 ответа

Вы не можете. И если вам действительно не нужно - вы не должны (см. Предупреждение ниже).

Что вы хотите сделать:

  1. Переименовать существующий домен
ALTER DOMAIN domain_name RENAME TO doman_name_depricated;
  1. Создайте новый домен с тем же именем, что и предыдущий, с новыми ограничениями.
CREATE DOMAIN doman_name AS VARCHAR(150);
  1. Измените тип для всех столбцов, использующих этот домен.
ALTER TABLE table_name ALTER COLUMN column_name SET DATA TYPE domain_name;

Предупреждение - это возможно только потому, что мы расширяем домен, чтобы все значения оставались действительными. Если вы хотите, например, уменьшить значение, вы столкнетесь с риском того, что значения в ваших таблицах станут недействительными. В этом случае вам понадобится скрипт миграции, чтобы исправить эти значения перед

Создайте новый домен, измените все таблицы и удалите старый домен.

Одним из способов было бы

  1. отключить базу данных,
  2. вывести схему в виде текста,
  3. отредактируйте текст, изменив тип домена на varchar(150),
  4. затем, наконец, перезагрузите схему из текста.

Это всего лишь эскиз. Потренируйтесь в песочнице, прежде чем попробовать это на своей реальной базе данных.

Это невозможно, но вы могли бы сделать это возможным.

При существующем положении вещей вы используете псевдоним varchar(25) в качестве своего домена.

varchar(25), varchar (50), varchar и текст хранятся в Postgres одинаково. Единственная разница - это проверка длины, которая добавляет накладные расходы на первые два.

Теперь вы не можете изменить тип домена, но вы можете изменить его ограничения - и еще лучше, размещение ограничений на домены - это один из тех "уловок", которые позволяют изменять их, не требуя переписывания таблицы.

  1. создайте новый домен, скажем, short_string, который является псевдонимом для varchar с проверочным ограничением
  2. изменить соответствующие столбцы таблицы и установить их тип для этого нового домена

Таким образом, если вы подумали и решили изменить максимальную длину на 40 или 60 или обратно на 25, вы сможете сделать это без переписывания таблиц.

Другие вопросы по тегам