Как найти таблицу с определенной колонкой в PostgreSQL?
Быстрый ответ
Если вы хотите отыскать таблицу, содержащую конкретную колонку в PostgreSQL, то вам поможет следующий 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'
замените на название искомой колонки. В результате выполнения запроса вы получите список таблиц, где присутствует данная колонка.
Однако следует учесть, что на результат запроса могут влиять различные аспекты, такие как настройки схемы и права доступа. Позвольте поделиться подробностями.
Расширенные методы поиска уклончивой колонки
Фильтрация по схемам
Если вам важно ограничить поиск по определённой схеме, используйте следующий код:
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
могут быть полезными для более детального поиска.
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
и другие системные схемы.
Визуализация
Представьте себя детективом данных (🕵️♀️), который ищет ключевой уликовый элемент (🔍) среди огромного объёма данных (📚):
Библиотека (📚): Набор таблиц
Улика (🔍): Название колонки
Целенаправленный поиск выглядит так:
SELECT table_name
FROM information_schema.columns
WHERE column_name = 'your_key_to_the_case';
И вот момент прозрения (🕵️♀️💡): Вы обнаруживаете именно ту таблицу, которая содержит нужную колонку!
Библиотека (📚): [CustomerDetails, OrderHistory, Inventory, ShipmentTrack]
Миссия выполнена (🎯): [CustomerDetails]
Инструменты командной строки в вашем распоряжении
psql и grep
Для любителей командной строки, есть возможность использовать комбинацию psql
и grep
:
\dt+ *.* | grep -B 5 'column_searchlight'
Сочетание команд \dt+ *.*
(демонстрирующих все таблицы и колонки) и grep
поможет быстро находить искомые данные.
Поиск по шаблону
Если требуется провести поиск по части названия колонки, воспользуйтесь следующим запросом:
SELECT table_name
FROM information_schema.columns
WHERE column_name LIKE '%gem_in_a_mine%';
Символ %
служит шаблоном для поиска колонок, имена которых содержат заданную последовательность символов.
Полезные материалы
- PostgreSQL: Документация:
pg_attribute
— Информативный ресурс о атрибутах PostgreSQL. - Полезные SQL-запросы для PSQL — Универсальный набор инструкций для поиска колонок.
- Информация о системных каталогах — Подробное описание системных каталогов PostgreSQL.
- PostgreSQL: Информационная схема — Официальные данные о структуре информационной схемы Postgres.
- Разборка имен таблиц, представлений и колонок — Глубоко проникающее руководство по запросам к таблицам и колонкам.
- SQL Info – Системные каталоги Postgres — Дополнительный материал по системным каталогам PostgreSQL.