PostgreSQL | Как проверить существование столбца в таблице?

PostgreSQL | Как проверить существование столбца в таблице?

Исходная таблица со столбцами

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

-- Тестовая таблица -- DROP TABLE test.t_2022_12_19;
CREATE TABLE IF NOT EXISTS test.t_2022_12_19
(
   col1 text,
   col22 text,
   col333 text,
   col4444 text
);

В веб-интерфейсе pgAdmin4 она выглядит так:

Таблица из четырёх столбцов без данных в PostgreSQL
Таблица из четырёх столбцов без данных в PostgreSQL

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

 

Проверяем существование столбца в таблице PostgreSQL через представление columns у схемы information_schema

Для проверки существования столбца в таблице нужно знать 3 значения элементов представления «columns«, которые называются:

  1. table_schema
  2. table_name
  3. column_name

SQL-выражение будет выглядеть так:

SELECT EXISTS(SELECT column_name
  FROM information_schema.columns
  WHERE table_schema = 'test' AND table_name = 't_2022_12_19' AND column_name = 'col22');

Получим true, так как столбец с именем «col22» есть в таблице «t_2022_12_19«.

Проверили существование столбца в таблице PostgreSQL - true
Проверили существование столбца в таблице PostgreSQL — true

 

Если попытаемся обратиться к несуществующему столбцу, то увидим false.

SELECT EXISTS(SELECT column_name
  FROM information_schema.columns
  WHERE table_schema = 'test' AND table_name = 't_2022_12_19' AND column_name = 'qwerty');

Результат вызова:

Проверили существование столбца в таблице PostgreSQL - false
Проверили существование столбца в таблице PostgreSQL — false

 

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

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

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

Раздел «Ограничения» — https://postgrespro.ru/docs/postgresql/15/ddl-constraints

Раздел «Информационная схема» — https://postgrespro.ru/docs/postgresql/15/information-schema

Представление «columns» — https://postgrespro.ru/docs/postgresql/15/infoschema-columns