Как изменить тип столбца в postgresql
Нередко возникает изменить уже имеющуюся таблицу, в частности, добавить или удалить столбцы, изменить тип столбцов и т.д.. То есть потребуется изменить определение таблицы. Для этого применяется выражение ALTER TABLE , которое имеет следующий формальный синтаксис:
ALTER TABLE название_таблицы
Рассмотрим некоторые возможности по изменению таблицы.
Добавление нового столбца
Добавим в таблицу Customers новый столбец Phone:
ALTER TABLE Customers ADD Phone CHARACTER VARYING(20) NULL;
Здесь столбец Phone имеет тип CHARACTER VARYING(20) , и для него определен атрибут NULL , то есть столбец допускает отсутствие значения. Но что если нам надо добавить столбец, который не должен принимать значения NULL? Если в таблице есть данные, то следующая команда не будет выполнена:
ALTER TABLE Customers ADD Address CHARACTER VARYING(30) NOT NULL;
Поэтому в данном случае решение состоит в установке значения по умолчанию через атрибут DEFAULT :
ALTER TABLE Customers ADD Address CHARACTER VARYING(30) NOT NULL DEFAULT 'Неизвестно';
Удаление столбца
Удалим столбец Address из таблицы Customers:
ALTER TABLE Customers DROP COLUMN Address;
Изменение типа столбца
Для изменения типа применяется ключевое слово TYPE . Изменим в таблице Customers тип данных у столбца FirstName на VARCHAR(50) (он же VARYING CHARACTER(50) ):
ALTER TABLE Customers ALTER COLUMN FirstName TYPE VARCHAR(50);
Изменение ограничений столбца
Для добавления ограничения применяется оператор SET , после которого указывается ограничение. Например, установим для столбца FirstName ограничение NOT NULL :
ALTER TABLE Customers ALTER COLUMN FirstName SET NOT NULL;
Для удаления ограничения применяется оператор DROP , после которого указывается ограничение. Например, удалим выше установленное ограничение:
ALTER TABLE Customers ALTER COLUMN FirstName DROP NOT NULL;
Изменение ограничений таблицы
Добавление ограничения CHECK :
ALTER TABLE Customers ADD CHECK (Age > 0);
Добавление первичного ключа PRIMARY KEY :
ALTER TABLE Customers ADD PRIMARY KEY (Id);
В данном случае предполагается, что в таблице уже есть столбец Id, который не имеет ограничения PRIMARY KEY. А с помощью вышеуказанного скрипта устанавливается ограничение PRIMARY KEY.
Добавление ограничение UNIQUE — определим для столбца Email уникальные значения:
ALTER TABLE Customers ADD UNIQUE (Email);
При добавлении ограничения каждому из них дается определенное имя. Например, выше добавленное ограничение для CHECK будет называться customers_age_check . Имена ограничений можно посмотреть в таблице через pgAdmin.
Также мы можем явным образом назначить ограничению при добавлении имя с помощью оператора CONSTRAINT .
ALTER TABLE Customers ADD CONSTRAINT phone_unique UNIQUE (Phone);
В данном случае ограничение будет называться «phone_unique».
Чтобы удалить ограничение, надо знать его имя, которое указывается после выражения DROP CONSTRAINT . Например, удалим выше добавленное ограничение:
ALTER TABLE Customers DROP CONSTRAINT phone_unique;
Переименование столбца и таблицы
Переименуем столбец Address в City:
ALTER TABLE Customers RENAME COLUMN Address TO City;
Переименуем таблицу Customers в Users:
ALTER TABLE Customers RENAME TO Users;
PostgreSQL оператор ALTER TABLE
В этом учебном пособии вы узнаете, как использовать PostgreSQL оператор ALTER TABLE для добавления столбца, изменения столбца, удаления столбца, переименования столбца или переименования таблицы (с использованием синтаксиса и примеров).
Описание
PostgreSQL оператор ALTER TABLE используется для добавления, изменения или очищения / удаления столбцов в таблице. Оператор PostgreSQL ALTER TABLE также используется для переименования таблицы.
Добавить столбец в таблицу
Синтаксис
Синтаксис для добавления столбца в таблицу в PostgreSQL (используя ALTER TABLE):
ALTER TABLE table_name
ADD new_column_name column_definition;
table_name Имя таблицы для изменения. new_column_name Имя нового столбца, добавляемого в таблицу. column_definition Тип данных столбца.
Пример
Рассмотрим пример, который показывает, как добавить столбец в таблицу PostgreSQL с помощью оператора ALTER TABLE.
Например:
ALTER TABLE order_details
ADD order_date date ;
Этот PostgreSQL пример ALTER TABLE добавит столбец с именем order_date в таблицу order_details . Он будет создан как столбец NULL.
Добавить несколько столбцов в таблицу
Синтаксис
Синтаксис для добавления нескольких столбцов в таблицу в PostgreSQL (используя ALTER TABLE):
ALTER TABLE table_name
ADD new_column_name column_definition,
ADD new_column_name column_definition,
.
;
table_name Имя таблицы для изменения. new_column_name Имя нового столбца, добавляемого в таблицу. column_definition Тип данных столбца.
Пример
Рассмотрим пример, который показывает, как добавить несколько столбцов в таблицу PostgreSQL, используя оператор ALTER TABLE.
Например:
ALTER TABLE order_details
ADD order_date date ,
ADD quantity integer ;
Этот пример добавит два столбца в таблицу order_details — order_date и quantity .
Поле order_date будет создано как столбец с типом данных date, а столбец quantity будет создан как столбец с типом данных integer.
Изменить столбец в таблице
Синтаксис
Синтаксис для изменения столбца в таблице в PostgreSQL (используя ALTER TABLE):
ALTER TABLE table_name
ALTER COLUMN column_name TYPE column_definition;
table_name Имя таблицы для изменения. column_name Имя столбца, который нужно изменить в таблице. column_definition Измененный тип данных столбца.
Пример
Рассмотрим пример, который показывает, как изменить столбец в таблице PostgreSQL с помощью оператора ALTER TABLE.
Например:
ALTER TABLE order_details
ALTER COLUMN notes TYPE varchar (500);
Этот ALTER TABLE пример изменит столбец с именем notes на тип данных varchar (500) в таблице order_details .
Изменить несколько столбцов в таблице
Синтаксис
Синтаксис для изменения нескольких столбцов в таблице в PostgreSQL (используя ALTER TABLE):
ALTER TABLE table_name
ALTER COLUMN column_name TYPE column_definition,
ALTER COLUMN column_name TYPE column_definition,
.
;
table_name Имя таблицы для изменения. column_name Имя столбца, который нужно изменить в таблице. column_definition Измененный тип данных столбца.
Пример
Рассмотрим пример, который показывает, как изменить несколько столбцов в таблице PostgreSQL с помощью оператора ALTER TABLE.
Например:
Безопасное изменение типа поля в PostgreSQL

На первый взгляд может показаться, что в PostgreSQL изменить тип поля можно очень просто, используя команду ALTER. Но это не всегда возможно. В качестве примера рассмотрим таблицу, в которой хранится список покупателей.
Представьте, что в нашей таблице есть поле customer_id , где применяется строковый тип данных varchar. Налицо ошибка, ведь в этом поле предполагается хранить идентификаторы покупателей, имеющие целочисленный формат integer. Давайте попробуем исправить ошибку, используя ALTER:
ALTER TABLE customers ALTER COLUMN customer_id TYPE integer;Как некоторые уже догадались, ничего не выйдет:
ERROR: column “customer_id” cannot be cast automatically to type integer SQL state: 42804 Hint: Specify a USING expression to perform the conversion.А всё потому, что нельзя так просто взять и поменять тип поля, если в таблице содержатся данные. Так как применялся тип varchar, у PostgreSQL не получается определить принадлежность значения к integer.
Вопрос можно решить, используя USING — выражение, указанное в сообщении об ошибке. Так мы выполним преобразование данных в integer корректно:
ALTER TABLE customers ALTER COLUMN customer_id TYPE integer USING (customer_id::integer);В итоге всё пройдёт без сложностей:
Что-нибудь ещё?
Используя USING, мы можем кроме конкретного выражения применять функции, операторы, другие поля. К примеру, давайте выполним преобразование поля customer_id обратно в varchar, но уже преобразовав формат данных:
ALTER TABLE customers ALTER COLUMN customer_id TYPE varchar USING (customer_id || '-' || first_name);В конечном итоге наша таблица будет выглядеть так:
Как поменять тип данных в таблице PostgresSQL?
У меня в таблице есть атрибут char(5000) , я хочу поменять его на тип text . Возможно ли это и если да то как?
Отслеживать
задан 2 мая 2017 в 0:51
5,327 11 11 золотых знаков 58 58 серебряных знаков 117 117 бронзовых знаковalter table table_name alter colunm colunm_name type text не работает? Тогда 1) добавить новое поле, 2) скопировать значения из старого в новое, 3) убедиться, что скопировано верно, 4) удалить старое поле, 5) переименовать новое в старое
2 мая 2017 в 2:35
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Предложенный Sergey вариант должен работать:
alter table table_name alter colunm colunm_name type textОтслеживать
ответ дан 2 мая 2017 в 6:55
126 4 4 бронзовых знака
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.3.2953
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
