Увеличение размера символа переменного типа в postgres без потери данных

Мне нужно увеличить размер поля переменной (60) символов в таблице базы данных postgres без потери данных.

у меня есть эта команда

alter table client_details alter column name set character varying(200);

увеличит ли эта команда размер поля с 60 до 200 без потери данных?


person Elitmiar    schedule 30.03.2011    source источник


Ответы (6)


Согласно этой документации, потери данных не будет, alter column только приводит старые данные к новым данным, поэтому преобразование между символьными данными должно быть в порядке. Но я не думаю, что ваш синтаксис верен, см. документацию, о которой я упоминал ранее. Я думаю, вы должны использовать этот синтаксис:

ALTER [COLUMN] тип столбца TYPE [USING expression]

И в качестве примечания, не было бы проще просто создать таблицу, заполнить ее и протестировать :)

person Erkan Haspulat    schedule 30.03.2011

Правильный запрос для изменения ограничения типа данных для определенного столбца:

ALTER TABLE client_details ALTER COLUMN name TYPE character varying(200);
person Peter prabu    schedule 09.07.2012
comment
Мне пришлось запустить ALTER TABLE public.client_details ALTER COLUMN name TYPE character Variing (200); - person FelixOuttaSpace; 13.05.2021

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

Рассмотрите возможность изменения типа на текст, и использование контрольного ограничения для ограничения ограничения изменения размера не приведет к перезаписи или блокировке таблицы.

person Tometzky    schedule 30.03.2011
comment
Просто заметка на будущее. В версии 9.1 некоторые типы изменений типов данных не требуют перезаписи. Я считаю, что это дело для того, чтобы сделать varchar больше. - person Kuberchaun; 30.03.2011
comment
@JustBob, у вас есть ссылка на документацию по этому поводу? - person Ries; 18.09.2013
comment
Из примечаний к выпуску PostgreSQL 9.1: E.10.3. 4.2 Разрешить ALTER TABLE ... SET DATA TYPE избегать перезаписи таблицы в соответствующих случаях. Но @JustBob ошибается — увеличение длины типа varchar требует перезаписи, а изменение varchar на текст (и добавление ограничения для проверки длины) — нет. - person Tometzky; 18.09.2013

вы можете использовать приведенную ниже команду sql
ALTER TABLE client_details ALTER COLUMN name TYPE varchar(200)

person jitendra varshney    schedule 12.07.2016

Из примечаний к выпуску PostgreSQL 9.2 E.15.3.4.2

Увеличение ограничения длины для столбца varchar или varbit или полное удаление ограничения больше не требует перезаписи таблицы.

person ulric260    schedule 18.11.2015

Изменение размера столбца в версии Postgresql 9.1

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

Имя таблицы: - userdata Имя столбца: - acc_no

ALTER TABLE userdata ALTER COLUMN acc_no TYPE varchar(250);

person Shiv    schedule 18.07.2016