Перейти к содержимому

Как изменить тип столбца в postgresql

  • автор:

Как изменить тип столбца в 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

Postgre_Deep_22.11-5020-df6dd0.png

На первый взгляд может показаться, что в 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);

В итоге всё пройдёт без сложностей:

postgre_04_1-20219-76d31f.png

Что-нибудь ещё?

Используя 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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *