はじめましての方ははじめまして。
そうでない方はまずいないと思いますのではじめまして。
psqlのデータ量が多くなってくると、たまに全体がどういった構成になっているか確認したくなることはないでしょうか。
しかも、いちいち各テーブルで\d
するのが面倒なくらいの量だったら。
select tablename,attname from pg_stats;
とやれば、テーブル名とカラム名の一覧は作れます。
でも、型とか、説明とか、そういう情報も欲しいですよね。
そういう便利なビューは検索しても見当たりませんでした。
ならば作るしかないでしょう。
WITH res AS (
SELECT c.oid
, NULL AS tablename
, a.attnum AS no
, a.attname AS col
, CASE WHEN a.atttypmod > 0 THEN t.typname || '(' || (a.atttypmod-4) || ')' ELSE t.typname END AS type
, CASE WHEN a.attnotnull THEN 'not null' ELSE '' END AS cannull
, d.description
FROM pg_class c
JOIN pg_namespace n ON c.relnamespace = n.oid
JOIN pg_attribute a ON c.oid = a.attrelid
JOIN pg_type t ON a.atttypid = t.oid
LEFT JOIN pg_description d ON c.oid = d.objoid
AND a.attnum = d.objsubid
WHERE n.nspname = 'public'
AND a.attstattarget = -1
AND pg_get_userbyid(c.relowner) = 'hiwasa'
UNION
SELECT c.oid
, c.relname AS tablename
, 0 AS no
, CASE WHEN c.relkind = 'r' THEN ' テーブル'
WHEN c.relkind = 'v' THEN ' ビュー'
WHEN c.relkind = 'S' THEN ' シーケンス'
WHEN c.relkind = 'i' THEN ' インデックス'
ELSE ' ' || c.relkind
END AS col
, NULL AS type
, NULL AS cannull
, d.description
FROM pg_class c
JOIN pg_namespace n ON c.relnamespace = n.oid
LEFT JOIN pg_description d ON c.oid = d.objoid
AND d.objsubid = 0
WHERE n.nspname = 'public'
AND pg_get_userbyid(c.relowner) = 'hiwasa'
ORDER BY oid, no
)
SELECT tablename
, col AS column
, type
, cannull AS "null制約"
, description AS "説明"
FROM res
;
pg_stats
の定義などを参考に作成してみました。
これで、テーブル名とカラム名、説明、null制約までは取得できます。
デフォルト値などの情報はないですけど、これくらいでも十分テーブル構成は把握できるんじゃないかと思います。