Postgresql как добавить колонку

Postgresql как добавить колонку

лПЗДБ ЧЩ УПЪДБМЙ ФБВМЙГХ Й ЧЙДЙФЕ, ЮФП ДПРХУФЙМЙ ПЫЙВЛХ ЙМЙ ЮФП ФТЕВПЧБОЙС РТЙМПЦЕОЙС ЙЪНЕОЙМЙУШ, ЧЩ НПЦЕФЕ ХДБМЙФШ ЬФХ ФБВМЙГХ Й УПЪДБФШ ЕЈ ЪБОПЧП. оП ЬФП ОЕХДПВОП, ЕУМЙ ФБВМЙГБ ХЦЕ УПДЕТЦЙФ ДБООЩЕ ЙМЙ ЕУМЙ ОБ ФБВМЙГХ УУЩМБАФУС ДТХЗЙЕ ПВЯЕЛФЩ ВБЪЩ ДБООЩИ (ОБРТЙНЕТ, ЧОЕЫОЙК ЛМАЮ). рПЬФПНХ PostgreSQL РТЕДПУФБЧМСЕФ ОБВПТ ЛПНБОД ДМС ЧОЕУЕОЙС ЙЪНЕОЕОЙК Ч УХЭЕУФЧХАЭЙЕ ФБВМЙГЩ. ъБНЕФЙН, ЮФП ЬФЙ ДЕКУФЧЙС ЛПОГЕРФХБМШОП ПФМЙЮБАФУС ПФ ЙЪНЕОЕОЙК УБНЙИ ДБООЩИ, УПДЕТЦБЭЙИУС Ч ФБВМЙГЕ: ЪДЕУШ НЩ ЗПЧПТЙН П ЙЪНЕОЕОЙЙ УФТХЛФХТЩ ФБВМЙГЩ.

йЪНЕОЙФШ ЪОБЮЕОЙС РП ХНПМЮБОЙА,

йЪНЕОЙФШ ФЙРЩ ДБООЩИ ЛПМПОПЛ,

чУЕ ЬФЙ ДЕКУФЧЙС ЧЩРПМОСАФУС У РПНПЭША ЛПНБОДЩ ALTER TABLE .

юФПВЩ ДПВБЧЙФШ ЛПМПОЛХ, ЙУРПМШЪХКФЕ ЛПНБОДХ ЧЙДБ:

ALTER TABLE products ADD COLUMN description text;

оПЧБС ЛПМПОЛБ ЙЪОБЮБМШОП ЪБРПМОСЕФУС ХЛБЪБООЩН ЪОБЮЕОЙЕН РП ХНПМЮБОЙА (ЪОБЮЕОЙЕН null, ЕУМЙ ЧЩ ОЕ ЪБДБМЙ ДТХЗПЕ ЪОБЮЕОЙЕ Ч РТЕДМПЦЕОЙЙ DEFAULT ).

фБЛЦЕ Ч ЬФПФ НПНЕОФ, ЧЩ НПЦЕФЕ ЪБДБФШ ПЗТБОЙЮЕОЙС ОБ ЛПМПОЛХ, ЙУРПМШЪХС УЙОФБЛУЙУ ЧЙДБ:

ALTER TABLE products ADD COLUMN description text CHECK (description <> »);

жБЛФЙЮЕУЛЙ, ЧУЕ ПРГЙЙ, ЛПФПТЩЕ ЙУРПМШЪХАФУС РТЙ ЧЩРПМОЕОЙЙ ЛПНБОДЩ CREATE TABLE , НПЗХФ ВЩФШ РТЙНЕОЕОЩ Й ЪДЕУШ. пДОБЛП, ДЕТЦЙФЕ Ч ХНЕ, ЮФП ЪОБЮЕОЙЕ РП ХНПМЮБОЙА ДПМЦОП ХДПЧМЕФЧПТСФШ ЪБДБООЩН ПЗТБОЙЮЕОЙСН, ЙОБЮЕ ЧЩРПМОЕОЙЕ ADD ЪБЛПОЮЙФУС ПЫЙВЛПК. ч ЛБЮЕУФЧЕ БМШФЕТОБФЙЧЩ, ЧЩ НПЦЕФЕ ДПВБЧЙФШ ПЗТБОЙЮЕОЙС РПЪЦЕ (УН. ОЙЦЕ), РПУМЕ ФПЗП ЛБЛ ЧЩ ЛПТТЕЛФОП ЪБЛПОЮЙМЙ ДПВБЧМЕОЙЕ ОПЧПК ЛПМПОЛЙ.

юФПВЩ ХДБМЙФШ ЛПМПОЛХ, ЙУРПМШЪХКФЕ ЛПНБОДХ ЧЙДБ:

ALTER TABLE products DROP COLUMN description;

дБООЩЕ Ч ЬФПК ЛПМПОЛЕ ВХДХФ РПФЕТСОЩ. пЗТБОЙЮЕОЙС, ЛБУБАЭЙЕУС ЬФПК ЛПМПОЛЙ ФБЛЦЕ ВХДХФ ХДБМЕОЩ. пДОБЛП, ЕУМЙ ОБ ЛПМПОЛХ УУЩМБЕФУС ПЗТБОЙЮЕОЙЕ ЧОЕЫОЕЗП ЛМАЮБ ДТХЗПК ФБВМЙГЩ, ФП PostgreSQL ОЕ ВХДЕФ НПМЮБ ХДБМСФШ ЬФП ПЗТБОЙЮЕОЙЕ. чЩ НПЦЕФЕ СЧОП ХЛБЪБФШ ХДБМЕОЙЕ ЪБЧЙУСЭЕЗП ПФ ЛПМПОЛЙ ПЗТБОЙЮЕОЙС, ДПВБЧЙЧ CASCADE :

ALTER TABLE products DROP COLUMN description CASCADE;

уН. ПРЙУБОЙЕ ЬФПЗП НЕИБОЙЪНБ Ч Section 5.11 .

юФПВЩ ДПВБЧЙФШ ЛБЛПЕ-МЙВП ПЗТБОЙЮЕОЙЕ, ЙУРПМШЪХЕФУС ФБВМЙЮОЩК УЙОФБЛУЙУ ПРТЕДЕМЕОЙС ЬФПЗП ПЗТБОЙЮЕОЙС. оБРТЙНЕТ:

ALTER TABLE products ADD CHECK (name <> »); ALTER TABLE products ADD CONSTRAINT some_name UNIQUE (product_no); ALTER TABLE products ADD FOREIGN KEY (product_group_id) REFERENCES product_groups;

юФПВЩ ДПВБЧЙФШ ПЗТБОЙЮЕОЙЕ ОЕ-null, ЛПФПТПЕ ОЕМШЪС ЪБРЙУБФШ ЛБЛ ПЗТБОЙЮЕОЙЕ ОБ ФБВМЙГХ, ЙУРПМШЪХКФЕ УЙОФБЛУЙУ:

ALTER TABLE products ALTER COLUMN product_no SET NOT NULL;

хЛБЪБООПЕ ПЗТБОЙЮЕОЙЕ ВХДЕФ ЪБДЕКУФЧПЧБОП ОЕНЕДМЕООП, ФБЛ ЮФП ДБООЩЕ Ч ФБВМЙГЕ РЕТЕД ДПВБЧМЕОЙЕН ПЗТБОЙЮЕОЙС ДПМЦОЩ ЕНХ ХДПЧМЕОФЧПТСФШ.

юФПВЩ ХДБМЙФШ ПЗТБОЙЮЕОЙЕ, ЧБН ОЕПВИПДЙНП ЪОБФШ ЕЗП ЙНС. еУМЙ ЧЩ УБНЙ ДБЧБМЙ ЕНХ ЙНС, ФП ЧУЕ РТПУФП. ч РТПФЙЧОПН УМХЮБЕ, ухвд ОБЪОБЮЙМП БЧФПНБФЙЮЕУЛЙ УЗЕОЕТЙТПЧБООПЕ ЙНС, ЛПФПТПЕ ОХЦОП ОБКФЙ. ч ЬФПН НПЦЕФ РПНПЮШ ЛПНБОДБ \d tablename Ч psql ; ДТХЗЙЕ ЙОФЕТЖЕКУЩ ФБЛЦЕ НПЗХФ РТЕДПУФБЧМСФШ УРПУПВ ЙОУРЕЛФЙТПЧБОЙС РПДТПВОПУФЕК ФБВМЙГ. ъБФЕН ЧЩРПМОСЕФУС ЛПНБОДБ:

ALTER TABLE products DROP CONSTRAINT some_name;

(еУМЙ ЧЩ ЧЩРПМОСЕФЕ ЛПНБОДХ У ХЛБЪБОЙЕН ФБЛПЗП ЙНЕОЙ ПЗТБОЙЮЕОЙС ЛБЛ $2 , ОЕ ЪБВХДШФЕ, ЮФП ЧБН РПОБДПВЙФУС ЪБЛМАЮЙФШ ЙНС Ч ДЧПКОЩЕ ЛБЧЩЮЛЙ, ЮФПВЩ ЙНС ВЩМП ЧПУРТЙОСФП ЛБЛ РТБЧЙМШОЩК ЙДЕОФЙЖЙЛБФПТ.)

лБЛ Й Ч УМХЮБЕ У ХДБМЕОЙЕН ЛПМПОЛЙ, ЧБН РПОБДПВЙФУС ДПВБЧЙФШ CASCADE , ЕУМЙ ЧЩ ИПФЙФЕ ХДБМЙФШ ПЗТБОЙЮЕОЙЕ, ПФ ЛПФПТПЗП ЪБЧЙУЙФ ЮФП МЙВП ДТХЗПЕ. оБРТЙНЕТ, ЕУМЙ ОЕЛПЕ ПЗТБОЙЮЕОЙЕ ЧОЕЫОЕЗП ЛМАЮБ ЪБЧЙУЙФ ПФ ПЗТБОЙЮЕОЙС ХОЙЛБМШОПУФЙ ЙМЙ РЕТЧЙЮОПЗП ЛМАЮБ ДМС УУЩМПЮОПК ЛПМПОЛЙ(ПЛ).

фЕ ЦЕ РТБЧЙМБ ТБВПФБАФ ДМС ЧУЕИ ЧЙДПЧ ПЗТБОЙЮЕОЙК, ЙУЛМАЮБС ПЗТБОЙЮЕОЙС ОЕ-null. юФПВЩ ХДБМЙФШ ПЗТБОЙЮЕОЙЕ ОЕ-null, ЙУРПМШЪХКФЕ

ALTER TABLE products ALTER COLUMN product_no DROP NOT NULL;

(пВТБФЙФЕ ЧОЙНБОЙЕ, ЮФП ПЗТБОЙЮЕОЙС ОЕ-null ОЕ ЙНЕАФ ЙНЕОЙ.)

юФПВЩ ХУФБОПЧЙФШ ОПЧПЕ ЪОБЮЕОЙЕ РП ХНПМЮБОЙА ДМС ЛПМПОЛЙ, ЙУРПМШЪХКФЕ ЛПНБОДХ ЧЙДБ:

ALTER TABLE products ALTER COLUMN price SET DEFAULT 7.77;

ъБНЕФЙН, ЮФП ЧЩРПМОЕОЙЕ ДБООПК ЛПНБОДЩ ОЕ ЧМЙСЕФ ОБ ХЦЕ УХЭЕУФЧХАЭЙЕ УФТПЛЙ Ч ФБВМЙГЕ, ЛПНБОДБ ЙЪНЕОСФ ЪОБЮЕОЙЕ РП ХНПМЮБОЙА ФПМШЛП ДМС ВХДХЭЙИ ЛПНБОД INSERT .

юФПВЩ ХДБМЙФШ МАВПЕ ЪОБЮЕОЙЕ РП ХНПМЮБОЙА, ЙУРПМШЪХКФЕ

ALTER TABLE products ALTER COLUMN price DROP DEFAULT;

лПНБОДБ ЧЩРПМОСЕФ ФПЦЕ УБНПЕ, ЮФП Й ХУФБОПЧЛБ ЪОБЮЕОЙС РП ХНПМЮБОЙА Ч null. рПУЛПМШЛХ РТЙ ХДБМЕОЙЙ ЪОБЮЕОЙС РП ХНПМЮБОЙА, ПОП ОЕСЧОП ХУФБОБЧМЙЧБЕФУС Ч null, Ч УМХЮБЕ ХДБМЕОЙС УХЭЕУФЧХАЭЕЗП ЪОБЮЕОЙС РП ХНПМЮБОЙА, УППВЭЕОЙК ПВ ПЫЙВЛБИ, ОЕ ВХДЕФ.

юФПВЩ РТЕПВТБЪПЧБФШ ЛПМПОЛХ Л ДТХЗПНХ ФЙРХ ДБООЩИ, ЙУРПМШЪХКФЕ ЛПНБОДХ ЧЙДБ:

ALTER TABLE products ALTER COLUMN price TYPE numeric(10,2);

лПНБОДБ ЧЩРПМОЙФУС ХУРЕЫОП ФПМШЛП ЕУМЙ ЛБЦДБС УХЭЕУФЧХАЭБС ЪБРЙУШ Ч ЛПМПОЛЕ НПЦЕФ ВЩФШ РТЕПВТБЪПЧБОБ Л ОПЧПНХ ФЙРХ ЮЕТЕЪ ОЕСЧОПЕ РТЙЧЕДЕОЙЕ ФЙРБ. еУМЙ ОЕПВИПДЙНП ВПМЕЕ УМПЦОПЕ РТЕПВТБЪПЧБОЙЕ, ЧБН ОХЦОП ДПВБЧЙФШ РТЕДМПЦЕОЙЕ USING , ЛПФПТПЕ ПРТЕДЕМСЕФ ЛБЛ ЙЪ УФБТПЗП ЪОБЮЕОЙС ВХДЕФ РПМХЮЕОП ОПЧПЕ.

PostgreSQL ВХДЕФ РЩФБФШУС РТЕПВТБЪПЧБФШ Л ОПЧПНХ ФЙРХ ЪОБЮЕОЙЕ РП ХНПМЮБОЙА, ЪБДБООПЕ ДМС ЛПМПОЛЙ, Б ФБЛЦЕ ЧУЕ ПЗТБОЙЮЕОЙС, УЧСЪБООЩЕ У ЬФПК ЛПМПОЛПК. оП ЬФЙ РТЕПВТБЪПЧБОЙС НПЗХФ ЪБЧЕТЫЙФШУС ПЫЙВЛПК ЙМЙ НПЗХФ РТЙЧЕУФЙ Л ОЕПЦЙДБООЩН ТЕЪХМШФБФБН. юБУФП, МХЮЫЕ ХДБМЙФШ ЧУЕ ПЗТБОЙЮЕОЙС ОБ ЛПМПОЛХ РЕТЕД ФЕН ЛБЛ ЙЪНЕОЙФШ ЕЈ ФЙР, Б ЪБФЕН ДПВБЧЙФШ УППФЧЕФУФЧЕООП ЙЪНЕОЈООЩЕ ПЗТБОЙЮЕОЙС ПВТБФОП.

юФПВЩ РЕТЕЙНЕОПЧБФШ ЛПМПОЛХ, ЙУРПМШЪХКФЕ ЛПНБОДХ ЧЙДБ:

ALTER TABLE products RENAME COLUMN product_no TO product_number;

юФПВЩ РЕТЕЙНЕОПЧБФШ ФБВМЙГХ, ЙУРПМШЪХКФЕ ЛПНБОДХ ЧЙДБ:

Источник

5.5. Изменение таблиц

Если вы создали таблицы, а затем поняли, что допустили ошибку, или изменились требования вашего приложения, вы можете удалить её и создать заново. Но это будет неудобно, если таблица уже заполнена данными, или если на неё ссылаются другие объекты базы данных (например, по внешнему ключу). Поэтому PostgreSQL предоставляет набор команд для модификации таблиц. Заметьте, что это по сути отличается от изменения данных, содержащихся в таблице: здесь мы обсуждаем модификацию определения, или структуры, таблицы.

Изменять значения по умолчанию

Изменять типы колонок

Все эти действия выполняются с помощью команды ALTER TABLE; подробнее о ней вы можете узнать в её справке.

5.5.1. Добавление колонки

Добавить колонку вы можете так:

Новая колонка заполняется заданным для неё значением по умолчанию (или значением NULL, если вы не добавите указание DEFAULT).

При этом вы можете сразу определить ограничения колонки, используя обычный синтаксис:

На самом деле здесь можно использовать все конструкции, допустимые в определении колонки в команде CREATE TABLE. Помните однако, что значение по умолчанию должно удовлетворять данным ограничениям, чтобы операция ADD выполнилась успешно. Вы также можете сначала заполнить колонку правильно, а затем добавить ограничения (см. ниже).

Подсказка: Добавление колонки со значением по умолчанию приводит к изменению всех строк таблицы (в них будет сохранено новое значение). Однако, если значение по умолчанию не указано, PostgreSQL может обойтись без физического изменения. Поэтому, если вы планируете заполнить колонку в основном не значениями по умолчанию, лучше будет добавить колонку без значения по умолчанию, затем вставить требуемые значения с помощью UPDATE, а потом определить значение по умолчанию, как описано ниже.

5.5.2. Удаление колонки

Удалить колонку можно так:

Данные, которые были в этой колонке, исчезают. Вместе с колонкой удаляются и включающие её ограничения таблицы. Однако, если на колонку ссылается ограничение внешнего ключа другой таблицы, PostgreSQL не удалит это ограничение неявно. Разрешить удаление всех зависящих от этой колонки объектов можно, добавив указание CASCADE:

Общий механизм, стоящий за этим, описывается в Разделе 5.12.

5.5.3. Добавление ограничения

Для добавления ограничения используется синтаксис ограничения таблицы. Например:

Чтобы добавить ограничение NOT NULL, которое нельзя записать в виде ограничения таблицы, используйте такой синтаксис:

Ограничение проходит проверку автоматически и будет добавлено, только если ему удовлетворяют данные таблицы.

5.5.4. Удаление ограничения

Для удаления ограничения вы должны знать его имя. Если вы не присваивали ему имя, это неявно сделала система, и вы должны выяснить его. Здесь может быть полезна команда psql \d имя_таблицы (или другие программы, показывающие подробную информацию о таблицах). Зная имя, вы можете использовать команду:

(Если вы имеете дело с именем ограничения вида $2, не забудьте заключить его в кавычки, чтобы это был допустимый идентификатор.)

Как и при удалении колонки, если вы хотите удалить ограничение с зависимыми объектами, добавьте указание CASCADE. Примером такой зависимости может быть ограничение внешнего ключа, связанное с колонками ограничения первичного ключа.

Так можно удалить ограничения любых типов, кроме NOT NULL. Чтобы удалить ограничение NOT NULL, используйте команду:

(Вспомните, что у ограничений NOT NULL нет имён.)

5.5.5. Изменение значения по умолчанию

Назначить колонке новое значение по умолчанию можно так:

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

Чтобы удалить значение по умолчанию, выполните:

При этом по сути значению по умолчанию просто присваивается NULL. Как следствие, ошибки не будет, если вы попытаетесь удалить значение по умолчанию, не определённое явно, так как неявно оно существует и равно NULL.

5.5.6. Изменение типа данных колонки

Чтобы преобразовать колонку в другой тип данных, используйте команду:

Она будет успешна, только если все существующие значения в колонке могут быть неявно приведены к новому типу. Если требуется более сложное преобразование, вы можете добавить указание USING, определяющее, как получить новые значения из старых.

PostgreSQL попытается также преобразовать к новому типу значение колонки по умолчанию (если оно определено) и все связанные с ней ограничения. Но преобразование может оказаться неправильным, и тогда вы получите неожиданные результаты. Поэтому обычно лучше удалить все ограничения колонки, перед тем как менять её тип, а затем воссоздать модифицированные должным образом ограничения.

Источник

Postgresql как добавить колонку

Если вы создали таблицы, а затем поняли, что допустили ошибку, или изменились требования вашего приложения, вы можете удалить её и создать заново. Но это будет неудобно, если таблица уже заполнена данными, или если на неё ссылаются другие объекты базы данных (например, по внешнему ключу). Поэтому PostgreSQL предоставляет набор команд для модификации таблиц. Заметьте, что это по сути отличается от изменения данных, содержащихся в таблице: здесь мы обсуждаем модификацию определения, или структуры, таблицы.

Изменять значения по умолчанию

Изменять типы столбцов

Все эти действия выполняются с помощью команды ALTER TABLE ; подробнее о ней вы можете узнать в её справке.

5.5.1. Добавление столбца

Добавить столбец вы можете так:

Новый столбец заполняется заданным для него значением по умолчанию (или значением NULL, если вы не добавите указание DEFAULT ).

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

На самом деле здесь можно использовать все конструкции, допустимые в определении столбца в команде CREATE TABLE . Помните однако, что значение по умолчанию должно удовлетворять данным ограничениям, чтобы операция ADD выполнилась успешно. Вы также можете сначала заполнить столбец правильно, а затем добавить ограничения (см. ниже).

Подсказка

Добавление столбца со значением по умолчанию приводит к изменению всех строк таблицы (в них будет сохранено новое значение). Однако если значение по умолчанию не указано, PostgreSQL может обойтись без физического изменения. Поэтому, если вы планируете заполнить столбец в основном не значениями по умолчанию, лучше будет добавить столбец без значения по умолчанию, затем вставить требуемые значения с помощью UPDATE , а потом определить значение по умолчанию, как описано ниже.

5.5.2. Удаление столбца

Удалить столбец можно так:

Данные, которые были в этом столбце, исчезают. Вместе со столбцом удаляются и включающие его ограничения таблицы. Однако если на столбец ссылается ограничение внешнего ключа другой таблицы, PostgreSQL не удалит это ограничение неявно. Разрешить удаление всех зависящих от этого столбца объектов можно, добавив указание CASCADE :

Общий механизм, стоящий за этим, описывается в Разделе 5.13.

5.5.3. Добавление ограничения

Для добавления ограничения используется синтаксис ограничения таблицы. Например:

Чтобы добавить ограничение NOT NULL, которое нельзя записать в виде ограничения таблицы, используйте такой синтаксис:

Ограничение проходит проверку автоматически и будет добавлено, только если ему удовлетворяют данные таблицы.

5.5.4. Удаление ограничения

Для удаления ограничения вы должны знать его имя. Если вы не присваивали ему имя, это неявно сделала система, и вы должны выяснить его. Здесь может быть полезна команда psql \d имя_таблицы (или другие программы, показывающие подробную информацию о таблицах). Зная имя, вы можете использовать команду:

(Если вы имеете дело с именем ограничения вида $2 , не забудьте заключить его в кавычки, чтобы это был допустимый идентификатор.)

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

Так можно удалить ограничения любых типов, кроме NOT NULL. Чтобы удалить ограничение NOT NULL, используйте команду:

(Вспомните, что у ограничений NOT NULL нет имён.)

5.5.5. Изменение значения по умолчанию

Назначить столбцу новое значение по умолчанию можно так:

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

Чтобы удалить значение по умолчанию, выполните:

При этом по сути значению по умолчанию просто присваивается NULL. Как следствие, ошибки не будет, если вы попытаетесь удалить значение по умолчанию, не определённое явно, так как неявно оно существует и равно NULL.

5.5.6. Изменение типа данных столбца

Чтобы преобразовать столбец в другой тип данных, используйте команду:

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

PostgreSQL попытается также преобразовать к новому типу значение столбца по умолчанию (если оно определено) и все связанные с этим столбцом ограничения. Но преобразование может оказаться неправильным, и тогда вы получите неожиданные результаты. Поэтому обычно лучше удалить все ограничения столбца, перед тем как менять его тип, а затем воссоздать модифицированные должным образом ограничения.

Источник

Читайте также:  Как заряжать наушники телефоном самсунг
Оцените статью