BBH
-Biz Branding Hub-
投稿日 : 
2019/11/14
更新日 : 
2019/11/14

【PostgreSQL】ある文字列を含むカラムの一覧を出すSQLのサンプル

ある文字列を含むカラムの一覧を検索したいときに使えるSQLのサンプルを紹介します。

カラム一覧のSQLサンプル

SELECT
    tables.relname as table_name,
    pa.attname as column_name
FROM
    pg_attribute as pa,
    (
    -- テーブル
    SELECT
        *
    FROM
        pg_stat_user_tables psut
    WHERE
        psut.relname like '%table_name%' -- テーブル名の条件を入力
    ORDER BY
        psut.relname
    ) as tables
WHERE
    pa.attnum > 0
    AND pa.attisdropped is FALSE
    AND pa.attname like '%column_name%'  -- カラム名の条件を入力
    AND tables.relid = pa.attrelid
ORDER BY
    pa.attname;

簡単にSQLの中身を説明すると以下のようになっています。
まず、サブクエリで、条件に該当するテーブルの一覧を取得しています。
テーブル一覧は、pg_stat_user_tablesというテーブルが情報を持っています。

そこで取得したテーブル一覧とカラム一覧を結合しています。
カラム一覧は、pg_attributeというテーブルが保持しています。
また、pg_attributeは削除されて現在存在しない列なども保存しているため、
pa.attnum > 0
AND pa.attisdropped is FALSE
といった条件句でそれらを除外しています。

結合条件は、「tables.relid = pa.attrelid」になります。
これは、条件によって抽出済みの pg_stat_user_tables.relid と pg_attribute.attrelid をキー結合しているという意味になります。

Profile

管理人プロフィール

都内でITエンジニアをやってます。
変遷:中規模SES→独立系SIer→Webサービス内製開発
使用技術はその時々でバラバラですが、C#、AWSが長いです。
どちらかと言うとバックエンドより開発が多かったです。
顧客との折衝や要件定義、マネジメント(10名弱程度)の経験あり。
最近はJava+SpringBootがメイン。

Recommend