Увеличение размера персонажа различного типа в постгресах без потери данных
Мне нужно увеличить размер поля, изменяющегося (60), в таблице базы данных postgres без потери данных.
У меня есть эта команда
alter table client_details alter column name set character varying(200);
будет ли эта команда увеличивать размер поля от 60 до 200 без потери данных?
Ответы
Ответ 1
Ссылаясь на эту документацию, не будет потери данных, alter column
только ставит старые данные в новые данные, поэтому приведение между символьными данными все должно быть в порядке. Но я не думаю, что ваш синтаксис верен, см. Документацию, о которой я упоминал ранее. Я думаю, вы должны использовать этот синтаксис:
ALTER [COLUMN] column TYPE type [ ИСПОЛЬЗОВАНИЕ выражения]
И в качестве примечания, было бы проще просто создать таблицу, заполнить ее и протестировать:)
Ответ 2
Правильный запрос для изменения ограничения типа данных для конкретного столбца:
ALTER TABLE client_details ALTER COLUMN name TYPE character varying(200);
Ответ 3
Да. Но он перепишет эту таблицу и заблокирует ее исключительно для продолжительности переписывания — любой запрос, пытающийся получить доступ к этой таблице, будет ждать завершения перезаписи.
Рассмотрите возможность изменения типа текста и использования ограничения проверки для ограничения размера — изменение ограничений не будет переписывать или блокировать таблицу.
Ответ 4
Изменение размера столбца в версии Postgresql 9.1
Во время Столбец, чреватого размером varchar до более высоких значений, требуется таблица re write во время этой блокировки, которая будет храниться в таблице и пользовательской таблице, не имеющей доступа
до таблица переписывание делается.
Название таблицы: - userdata
Название столбца: - acc_no
ALTER TABLE userdata ALTER COLUMN acc_no ТИП varchar (250);
Ответ 5
От PostgreSQL 9.2 Относительные примечания E.15.3.4.2
Увеличение лимита длины для столбца varchar или varbit или полное удаление ограничения больше не требует перезаписи таблицы.
Ответ 6
вы можете использовать эту ниже команду sql
ALTER TABLE client_details
ALTER COLUMN name TYPE varchar(200)