[pgsql-jp: 27922] Re: テーブルの一覧を見るには

KAWAI,Takanori GCD00051 @ nifty.ne.jp
2002年 11月 9日 (土) 08:21:59 JST


川合孝典です。
#\dなんてpsqlでしか使えないもんといって知らなかったことを
#ごまかしてみたりして(^^)

----- Original Message -----
From: "Naofumi Kondoh" <nkon @ shonan.ne.jp>
To: <pgsql-jp @ ml.postgresql.jp>
Sent: Friday, November 08, 2002 4:13 PM
Subject: [pgsql-jp: 27916] Re: テーブルの一覧を見るには


> ソフト工房の近藤です。
>
> oowada @ yokohama-bay.net wrote:
>
> >>select relname from pg_class where relkind='r';
> >
> >
> > システムカタログまで表示されてしまいますね。
>
> PostgreSQL 7.2 迄ですが、カタログを表示したくなければ、
>
> select relname from pg_class where relkind='r'
>      and relname not like 'pg_%' ;
(以下略)
ありがとうございます。
psqlのソース(psql/describe.c 関数listTables)を覗いてみたところ、
\dtと同じクエリは

SELECT c.relname as "table", 'table' as  "type", u.usename as "Owner"
FROM pg_class c LEFT JOIN pg_user u ON c.relowner = u.usesysid
   WHERE c.relkind IN ('r') AND c.relname !~ '^pg_'
ORDER BY 1;

といった感じになるのかなと思っています。
#7.2.3では postgresql-7.2.3/src/bin/psql/describe.c 988行目あたりから

システムテーブルかどうかを先頭がpg_かどうかだけで判定するのは、
ちょっと意外でしたが...

<引用 src="describe.c 1050行目" >
 if (showSystem)
  strcat(buf, "  AND c.relname ~ '^pg_'\n");
 else
  strcat(buf, "  AND c.relname !~ '^pg_'\n");

</引用>

===================================================
川合 孝典 (Hippo2000)
   DBI日本語メーリングリスト管理人、Kansai.pm所属
   kwitknr @ cpan.org GCD00051 @ nifty.ne.jp
   http://member.nifty.ne.jp/hippo2000、http://www.hippo2000.info/
perldocの日本語化ならperldocjp:もちろん参加者募集中!
  http://sourceforge.jp/projects/perldocjp
===================================================




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