Изменить домен изменить тип
Есть ли способ изменить тип домена и изменить тип на новый? У меня есть столбец, использующий домен, который имеет тип VARCHAR(25) и хотел бы увеличить длину до 150.
3 ответа
Вы не можете. И если вам действительно не нужно - вы не должны (см. Предупреждение ниже).
Что вы хотите сделать:
- Переименовать существующий домен
ALTER DOMAIN domain_name RENAME TO doman_name_depricated;
- Создайте новый домен с тем же именем, что и предыдущий, с новыми ограничениями.
CREATE DOMAIN doman_name AS VARCHAR(150);
- Измените тип для всех столбцов, использующих этот домен.
ALTER TABLE table_name ALTER COLUMN column_name SET DATA TYPE domain_name;
Предупреждение - это возможно только потому, что мы расширяем домен, чтобы все значения оставались действительными. Если вы хотите, например, уменьшить значение, вы столкнетесь с риском того, что значения в ваших таблицах станут недействительными. В этом случае вам понадобится скрипт миграции, чтобы исправить эти значения перед
Создайте новый домен, измените все таблицы и удалите старый домен.
Одним из способов было бы
- отключить базу данных,
- вывести схему в виде текста,
- отредактируйте текст, изменив тип домена на varchar(150),
- затем, наконец, перезагрузите схему из текста.
Это всего лишь эскиз. Потренируйтесь в песочнице, прежде чем попробовать это на своей реальной базе данных.
Это невозможно, но вы могли бы сделать это возможным.
При существующем положении вещей вы используете псевдоним varchar(25) в качестве своего домена.
varchar(25), varchar (50), varchar и текст хранятся в Postgres одинаково. Единственная разница - это проверка длины, которая добавляет накладные расходы на первые два.
Теперь вы не можете изменить тип домена, но вы можете изменить его ограничения - и еще лучше, размещение ограничений на домены - это один из тех "уловок", которые позволяют изменять их, не требуя переписывания таблицы.
- создайте новый домен, скажем, short_string, который является псевдонимом для varchar с проверочным ограничением
- изменить соответствующие столбцы таблицы и установить их тип для этого нового домена
Таким образом, если вы подумали и решили изменить максимальную длину на 40 или 60 или обратно на 25, вы сможете сделать это без переписывания таблиц.