[pgsql-jp: 31391] Re: tableの制約の抽出

ISHIDA Akio iakio @ pjam.jpweb.net
2003年 10月 31日 (金) 15:38:16 JST


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

Ichiro Nakata wrote:

> 中田と申します。
> 
> 単刀直入に言うと、テーブルの制約を抽出したりするのは可能でしょうか?
> 
> 
> まず、環境として、redhat9,postgres7.3.2を使用しています。
> 
> 詳しく言うと、
> テーブルに例えば check制約をかけて、その後何かしらの方法で、その制約を表
> 示もしくわ、抽出できないでしょうか?
> コマンドで「\d table名」を実行することカラムのタイプやテーブルの制約を
> 確認はできるのですが、その制約だけを表示させたいと思っています。
> 

どんな風にとりだしたいかにもよりますが、この手のことをする場合、
私は pg_dump のソースを見ます。(ソースを見なくても pg_dump
そのものを使うだけで用が足りる場合もありますが。)

src/bin/pg_dump/pg_dump.c に、その名も、
dumpConstraints(Archive *fout, TableInfo *tblinfo, int numTables)
という関数があります。この中では、
appendPQExpBuffer(query,
                  "SELECT oid, conname, "
                "pg_catalog.pg_get_constraintdef(oid) as condef "
                  "FROM pg_catalog.pg_constraint "
                  "WHERE conrelid = '%s'::pg_catalog.oid "
                  "AND contype = 'f'",
                  tbinfo->oid);
というクエリを発行しています。

--
ISHIDA Akio<iakio @ pjam.jpweb.net>





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