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=#