PostgreSQL | Как добавить новый столбец в существующую таблицу?

PostgreSQL | Как добавить новый столбец в существующую таблицу?

Для добавления нового столбца в существующую таблицу в базе данных PostgreSQL нужно воспользоваться оператором изменения таблицы, который называется ALTER TABLE.

Исходная таблица с данными выглядит так:

CREATE TABLE test.t15102022 (
  id bigint NOT NULL DEFAULT 0,
  name text NOT NULL
)

INSERT INTO test.t15102022 VALUES (1, 'Вася'), (2, 'Петя');

SELECT * FROM test.t15102022;

Скриншот из веб-интерфейса pgAdmin4:

Создали таблицу на два столбца и положили в неё данные - PostgreSQL
Создали таблицу на два столбца и положили в неё данные — PostgreSQL

 

Добавление нового столбца в существующую таблицу в PostgreSQL при помощи команды ALTER TABLE и предложением ADD COLUMN

Пишем SQL-запрос, который добавит столбец «возраста» — age:

ALTER TABLE test.t15102022 ADD COLUMN age bigint;

Скриншот:

Добавили новый столбец age в существующую таблицу в PostgreSQL
Добавили новый столбец age в существующую таблицу в PostgreSQL

Мы успешно добавили новый столбец в готовую таблицу и присвоили тип данных для него.

 

Добавление нового столбца в таблицу в PostgreSQL с проверками существования, и таблицы, и столбца в ней

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

ALTER TABLE test.t15022022 ADD COLUMN age bigint;

Если мы попытаемся добавить столбец в несуществующую таблицу, тогда будет такая ошибка:

Ошибка при добавлении столбца в таблицу - таблица не существует - PostgreSQL
Ошибка при добавлении столбца в таблицу — таблица не существует — PostgreSQL

Если данная SQL-команда участвует в работе какой-нибудь функции, то выполнение всей функции может завершиться внезапно и с ошибкой. В результате можно потерять данные или долго морочиться с поисками проблемы.

 

Чтобы избежать ошибки нужно добавить предложение IF EXISTS после команды ALTER TABLE.

ALTER TABLE IF EXISTS test.t15022022 ADD COLUMN age bigint;

В этом случае мы получим просто замечание, вместо ошибки.

Замечание при добавлении столбца в таблицу - таблица не существует - PostgreSQL
Замечание при добавлении столбца в таблицу — таблица не существует — PostgreSQL

Разница между ошибкой и замечанием заключается в том, что при замечании выполнение алгоритма в теле функции продолжится в любом случае. И возможно это приведёт к корректному её завершению.

Если мы не используем предложение IF EXISTS, то тогда мы должны перехватывать потенциальные ошибки в теле функции и как-то их обрабатывать.

 

Также важно проверять существование столбца перед вставкой в таблицу. Причины те же — ошибки.

ALTER TABLE IF EXISTS test.t15102022 ADD COLUMN age bigint;

Ошибка — столбец уже существует.

Ошибка при добавлении столбца в таблицу - столбец уже существует - PostgreSQL
Ошибка при добавлении столбца в таблицу — столбец уже существует — PostgreSQL

 

Вместо ошибки лучше получить замечание. Для этого нужно добавить предложение IF NOT EXISTS после ADD COLUMN.

ALTER TABLE IF EXISTS test.t15102022 ADD COLUMN IF NOT EXISTS age bigint;

Замечание — столбец уже существует.

Замечание при добавлении столбца в таблицу - столбец уже существует - PostgreSQL
Замечание при добавлении столбца в таблицу — столбец уже существует — PostgreSQL

Это самый безопасный способ добавления нового столбца в таблицу.

 

Информационные ссылки

Официальный сайт WEB-оболочки pgAdminhttps://www.pgadmin.org

Официальный сайт СУБД PostgreSQLhttps://www.postgresql.org

Команда «ALTER TABLE» — https://postgrespro.ru/docs/postgresql/14/sql-altertable