Изменить домен изменить тип - PullRequest
3 голосов
/ 13 июня 2011

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

Ответы [ 4 ]

1 голос
/ 13 июня 2011

Один из способов:

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

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

1 голос
/ 13 июня 2011

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

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

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

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

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

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

1 голос
/ 13 июня 2011

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

0 голосов
/ 15 мая 2019

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

То, что вы хотите сделать, это:

  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;

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

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