Для удаления столбца из существующей таблицы в базе данных 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 при помощи команды ALTER TABLE и предложения DROP COLUMN
Пишем SQL-запрос, который удалит столбец «имени» — name:
ALTER TABLE test.t_11_12_2022 DROP COLUMN name;
После этого данный столбец с именами удалится из таблицы.
Но вы должны всегда учитывать, что столбцы могут быть внешними ключами и участвовать в каскадных удалениях или каскадных обновлениях. В результате можно потерять множество данных.
Будьте очень внимательны и не ошибайтесь с названиями столбцов, которые хотите удалить!!!
Результат удаления:
Удаление столбца из таблицы в PostgreSQL с проверками существования, и таблицы, и столбца в ней
Перед удалением столбца из таблицы желательно проверять существование самой таблицы, а также имени удаляемого столбца, чтобы не вызывать ошибку.
ALTER TABLE test.t15022022 DROP COLUMN name;
Если мы попытаемся добавить столбец в несуществующую таблицу, тогда будет такая ошибка:
Если данная SQL-команда участвует в работе какой-нибудь функции, то выполнение всей функции может завершиться внезапно и с ошибкой. В результате можно потерять данные или долго морочиться с поисками проблемы.
Чтобы избежать ошибки нужно добавить предложение IF EXISTS после команды ALTER TABLE.
ALTER TABLE IF EXISTS test.t15022022 DROP COLUMN name;
В этом случае мы получим просто замечание, вместо ошибки.
Разница между ошибкой и замечанием заключается в том, что при замечании выполнение алгоритма в теле функции продолжится в любом случае. И возможно это приведёт к корректному её завершению.
Если мы не используем предложение IF EXISTS, то тогда мы должны перехватывать потенциальные ошибки в теле функции и как-то их обрабатывать.
Также важно проверять существование столбца перед удалением из таблицы. Причины те же — ошибки.
ALTER TABLE IF EXISTS test.t_11_12_2022 DROP COLUMN age;
Ошибка — столбец не существует.
Вместо ошибки лучше получить замечание. Для этого нужно добавить предложение IF EXISTS после DROP COLUMN.
ALTER TABLE IF EXISTS test.t_11_12_2022 DROP COLUMN IF EXISTS age;
Замечание — столбец не существует.
Информационные ссылки
Официальный сайт WEB-оболочки pgAdmin — https://www.pgadmin.org
Официальный сайт СУБД PostgreSQL — https://www.postgresql.org
Команды SQL — https://postgrespro.ru/docs/postgresql/15/sql-commands