Как найти таблицу с определенной колонкой в PostgreSQL?

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если вы хотите отыскать таблицу, содержащую конкретную колонку в PostgreSQL, то вам поможет следующий SQL-запрос:

SQL
Скопировать код
SELECT table_name
FROM information_schema.columns
WHERE column_name = 'the_column_that_is_playing_hide_and_seek';

'the_column_that_is_playing_hide_and_seek' замените на название искомой колонки. В результате выполнения запроса вы получите список таблиц, где присутствует данная колонка.

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

Кинга Идем в IT: пошаговый план для смены профессии

Расширенные методы поиска уклончивой колонки

Фильтрация по схемам

Если вам важно ограничить поиск по определённой схеме, используйте следующий код:

SQL
Скопировать код
SELECT table_schema, table_name
FROM information_schema.columns
WHERE column_name = 'i_am_here_somewhere'
AND table_schema = 'public'; -- укажите нужную схему

Запрос схож с поиском книги в определённом отделе библиотеки, будь то схема "public" или любая другая.

Использование системных каталогов

pg_class и pg_namespace могут быть полезными для более детального поиска.

SQL
Скопировать код
SELECT c.relname AS table_name
FROM pg_catalog.pg_class c
JOIN pg_catalog.pg_attribute a ON a.attrelid = c.oid
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE a.attname = 'col_here'
AND c.relkind = 'r'
AND n.nspname = 'public'; -- здесь указывается требуемая схема

Такое соединение таблиц возвращает дополнительные сведения. В данном случае, c.relname отображает названия таблиц, а фильтрация производится по pg_attribute и pg_namespace.

Ограничения из-за прав доступа

Следует учесть, что если возникают проблемы с выполнением этих запросов, вероятно стоит обратиться к администратору баз данных и уточнить вопрос о правах доступа.

Исключение системных таблиц

Чтобы системные таблицы не присутствовали в результатах поиска, используйте модифицированные версии запросов, где не учитываются pg_catalog и другие системные схемы.

Визуализация

Представьте себя детективом данных (🕵️‍♀️), который ищет ключевой уликовый элемент (🔍) среди огромного объёма данных (📚):

Markdown
Скопировать код
Библиотека (📚): Набор таблиц
Улика (🔍): Название колонки

Целенаправленный поиск выглядит так:

SQL
Скопировать код
SELECT table_name
FROM information_schema.columns
WHERE column_name = 'your_key_to_the_case';

И вот момент прозрения (🕵️‍♀️💡): Вы обнаруживаете именно ту таблицу, которая содержит нужную колонку!

Markdown
Скопировать код
Библиотека (📚): [CustomerDetails, OrderHistory, Inventory, ShipmentTrack]
Миссия выполнена (🎯): [CustomerDetails]

Инструменты командной строки в вашем распоряжении

psql и grep

Для любителей командной строки, есть возможность использовать комбинацию psql и grep:

Bash
Скопировать код
\dt+ *.* | grep -B 5 'column_searchlight'

Сочетание команд \dt+ *.* (демонстрирующих все таблицы и колонки) и grep поможет быстро находить искомые данные.

Поиск по шаблону

Если требуется провести поиск по части названия колонки, воспользуйтесь следующим запросом:

SQL
Скопировать код
SELECT table_name
FROM information_schema.columns
WHERE column_name LIKE '%gem_in_a_mine%';

Символ % служит шаблоном для поиска колонок, имена которых содержат заданную последовательность символов.

Полезные материалы

  1. PostgreSQL: Документация: pg_attribute — Информативный ресурс о атрибутах PostgreSQL.
  2. Полезные SQL-запросы для PSQL — Универсальный набор инструкций для поиска колонок.
  3. Информация о системных каталогах — Подробное описание системных каталогов PostgreSQL.
  4. PostgreSQL: Информационная схема — Официальные данные о структуре информационной схемы Postgres.
  5. Разборка имен таблиц, представлений и колонок — Глубоко проникающее руководство по запросам к таблицам и колонкам.
  6. SQL Info – Системные каталоги Postgres — Дополнительный материал по системным каталогам PostgreSQL.