PostgreSQL

PostgreSQL SQLでテーブル一覧出力

pg_catalog.pg_classテーブルからの導出

pg_catalog.pg_classテーブルを軸に見れば出力できます。ここでのテーブルとは、一般のテーブルと、パーティションテーブル、そして外部テーブル(postgres_fdwモジュールを使い外部テーブルへアクセスする際に作成する)です。

テーブル一覧出力SQL
select
 r.rolname as owner
,n.nspname as schema
,relname
, case 
  when c.relkind = 'r' then 'table'
  when c.relkind = 'p' then 'partitioned table'
  when c.relkind = 'f' then 'foreign table'  -- 
  else concat(c.relkind,'')
end relkind_dec
,case
  when c.relpersistence = 'p' then '永続'
  when c.relpersistence = 'u' then 'ログ無し'
  when c.relpersistence = 't' then '一時'  
  else concat(c.relpersistence,'')
end relpersistence_dec
,pg_catalog.array_to_string(relacl,',') relacl -- アクセス権限
from pg_class c inner join pg_namespace n
on c.relnamespace = n.oid
inner join pg_roles r
on c.relowner  = r.oid
where 1=1
and r.rolname ='sooni'            -- オブジェクトオーナー
and c.relkind in('r','p','f')     -- オブジェクトタイプ
order by owner,schema,relname
;
一覧出力例
 owner | schema |    relname    |    relkind_dec    | relpersistence_dec |               relacl
-------+--------+---------------+-------------------+--------------------+-------------------------------------
 sooni | public | kudamono      | foreign table     | 永続               |
 sooni | public | yasai         | table             | 永続               |
 sooni | sooni  | address_list  | partitioned table | 永続               |
 sooni | sooni  | aichi         | table             | 永続               |
 sooni | sooni  | chiba         | table             | 永続               |
 sooni | sooni  | ex500         | table             | ログ無し           | sooni=arwdDxt/sooni,udonman=r/sooni
 sooni | sooni  | fruit         | table             | 永続               |
 sooni | sooni  | gunma         | table             | 永続               |
 sooni | sooni  | gunma_address | table             | 永続               |
(9 rows)

外部テーブルの外部サーバまで出力したい場合はinformation_schema.foreign_tablesも結合するとわかります。

おまけ

psql メタコマンド ¥dt で出力する際も条件指定できます

¥dtに限らず¥dfや¥diなど¥d始まりメタコマンドで利用できます。

-- ワイルドカード使えます 
--
myposdb=# \dt sooni.gunma*
           List of relations
 Schema |     Name      | Type  | Owner
--------+---------------+-------+-------
 sooni  | gunma         | table | sooni
 sooni  | gunma_address | table | sooni
(2 rows)

-- 正規表現も使えます
--
myposdb=# \dt sooni.(fruit|hokkaido)
         List of relations
 Schema |   Name   | Type  | Owner
--------+----------+-------+-------
 sooni  | fruit    | table | sooni
 sooni  | hokkaido | table | sooni
(2 rows)


myposdb=#

テーブルを構成するカラム一覧を出力する

スポンサーリンク
コピペで使う
タイトルとURLをコピーしました