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

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

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

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

-- Создали таблицу
CREATE TABLE IF NOT EXISTS test.t_11_12_2022
  (
    id bigint,
    name text
  );

-- Ставили данные
INSERT INTO test.t_11_12_2022 (id, name) VALUES (1, 'один'), (2, 'два');

-- Посмотрели на таблицу
SELECT * FROM test.t_11_12_2022;

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

Таблица с двумя столбцами и двумя записями в PostgreSQL
Таблица с двумя столбцами и двумя записями в PostgreSQL

 

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

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

ALTER TABLE test.t_11_12_2022 DROP COLUMN name;

После этого данный столбец с именами удалится из таблицы.

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

Будьте очень внимательны и не ошибайтесь с названиями столбцов, которые хотите удалить!!!

Результат удаления:

Успешно удалили столбец name у таблицы в PostgreSQL
Успешно удалили столбец name у таблицы в PostgreSQL

 

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

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

ALTER TABLE test.t15022022 DROP COLUMN name;

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

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

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

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

ALTER TABLE IF EXISTS test.t15022022 DROP COLUMN name;

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

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

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

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

 

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

ALTER TABLE IF EXISTS test.t_11_12_2022 DROP COLUMN age;

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

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

 

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

ALTER TABLE IF EXISTS test.t_11_12_2022 DROP COLUMN IF EXISTS age;

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

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

 

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

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

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

Команды SQLhttps://postgrespro.ru/docs/postgresql/15/sql-commands