Как проверить существует ли таблица sql

Аватар пользователя Roman Ashikov
Roman Ashikov
20 июля 2022

Я расскажу как это делается в PostgreSQL.

В репле psql для просмотра списка таблиц используется команда \d.

toto=> \d
         List of relations
 Schema |  Name       | Type  |  Owner
--------+-------------+-------+--------
 public | super_table | table |  toto

Если же репл нам не подходит, можно использовать запрос. В большинстве рекомендаций говорится о том, что стоит делать запрос к самой схеме information_schema.tables. Но такой подход, в данном контексте, неверен, так как выборка покажет только те таблицы, к которым у текущего пользователя есть доступ. Таким образом таблица может существовать, но запрос к information_schema.tables вернёт false.

Рекомендую, при проверке существования таблиц, обращаться напрямую к каталогам pg_class и pg_namespace. Запрос может выглядеть следующим образом:

SELECT EXISTS (
   SELECT FROM pg_catalog.pg_class c
   JOIN   pg_catalog.pg_namespace n ON n.oid = c.relnamespace
   WHERE  n.nspname = 'schema_name'
   AND    c.relname = 'table_name'
   AND    c.relkind = 'r'    -- only tables
   );
0 0