[pgsql-jp: 32941] Re: カタログからのプライマリーカラムの取り出しについて

ISHIDA Akio iakio @ pjam.jpweb.net
2004年 5月 15日 (土) 10:43:25 JST


こんにちは。石田@苫小牧市です。

ゆう wrote:
> 今回、システムカタログについて質問をさせていただきます。
> システムカタログでプライマリーのキーの取得を行なうSQLを
> 記述しました。しかし、システム列のデータ?(ctid,oid,xmin,cmin,
> xmax,cmax,tableoid)などまで取得してしまっております。
> このシステム列のデータを表示させない方法としては、
> どのシステムカタログのフィールドの値とpg_classの
> フィールドでWHEREであわせないといけないのでしょうか。
> お手数をおかけしますが、教えていただけないでしょうか。
> お願いいたします。
> 
> ゆう
> 
> SELECT
>     pg_class.relname,
>     pg_attribute.attname
> FROM
>     pg_class,
>     pg_index,
>     pg_attribute
> WHERE
>     pg_class.oid = pg_index.indrelid AND
>     pg_class.oid = pg_attribute.attrelid AND
>     pg_index.indisprimary = TRUE

この SQL では、システム列のデータだけでなく、全ての列が
表示されてしまいます。(プライマリキーであるかどうかにかかわらず)。

7.4以降なら

SELECT c.relname, a.attname
 FROM pg_constraint n, pg_class c, pg_attribute a
WHERE n.conrelid = c.oid
  and n.contype = 'p'
  and a.attrelid = c.oid
  and a.attnum =ANY (n.conkey)

でいけそうです。

見たいだけなら、

select c.relname, pg_get_indexdef(i.indexrelid)
  from pg_class c, pg_index i
 where i.indrelid = c.oid

とやると
CREATE INDEX ...
という形式で表示されます。

-- 
ISHIDA Akio <iakio @ pjam.jpweb.net/iakio @ mono-space.net>



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