[pgsql-jp: 33671] SQLでDB内の全テーブル名を取得する方法について

Satou Hideki h-satou90 @ hitachi-kenki.co.jp
2004年 7月 15日 (木) 11:34:53 JST


こんにちは佐藤@日立建機です。

現在RedHat 7.2 上で動作しているPostgresql 7.4を操作するのに、
おがわさん作のPSqlEditというWindows用ツールを使用しています。
http://www.hi-ho.ne.jp/a_ogawa/

以前まで使用していたCSEよりも動作が非常に軽快で、とても気に
入っているのですが、このツールを使うとテーブル一覧に表示されない
テーブルがあることを最近発見しました。(psqlやCSEでは見える。)

色々試行錯誤していたところ、テーブルにコメントを入れたところ、
表示されるようになりました。

再度、「comment on table 比較マスタLX7 is '';」として
コメントを空にすると、また表示されなくなってしまうため、これを
作者のおがわさんの掲示板で質問したところ、現在下記のSQLを
発行して一覧を取得しているが、原因は分からないとの回答でした。
(http://www.hi-ho.ne.jp/a_ogawa/bbs/list41.shtml より引用)

-- posgresql 7.3以降
select c.relname as name, c.nspname,
pg_get_userbyid(c.relowner) as owner,
d.description as comment, c.objoid as oid from
(select n.nspname, c.relname, c.relowner, c.oid as objoid
from pg_class c, pg_namespace n
where ((c.relkind = 'r'::"char") or (c.relkind = 's'::"char"))
and c.relnamespace = n.oid ) c
left outer join pg_description d using(objoid)
where d.objsubid = 0 or d.objsubid is null
order by name;

-- posgresql 7.2以前
select c.relname as name, '' as nspname,
pg_get_userbyid(c.relowner) as owner,
d.description as comment, c.objoid as oid from
(select c.relname, c.relowner, c.oid as objoid
from pg_class c
where ((c.relkind = 'r'::"char") or (c.relkind = 's'::"char"))) c
left outer join pg_description d using(objoid)
where d.objsubid = 0 or d.objsubid is null
order by name;

自分なりに過去ログなども一応調べては見たものの、テーブル一覧の
取得はpsqlで落ち着いているものが多く、システムテーブルに
書き込まれる条件やプロセスなどがよく分かりませんでした。

もし「こういうやり方の方が良いよ」というやり方がありましたら
ご教授いただければ幸いです。また、何故コメントが入るとテーブル
名が抽出されるのかについても参考までに教えて頂ければ嬉しいです。

以上、宜しくお願いします。

# Hideki Satoh
# h-satou90 @ hitachi-kenki.co.jp




pgsql-jp メーリングリストの案内