../../image/benilogo.gifPostgreSQL について


PostgreSQL のテーブル構造情報を得る。
既存のテーブル構造を調べるにはどうすればいいのでしょうか?
select \d bhnmst; のクエリーを 別々に実行してみる。


クエリー 1の実行
beniya=# SELECT relhasindex, relkind, relchecks, reltriggers, relhasrules
beniya-# FROM pg_class WHERE relname='bhnmst'
beniya-# ;
 relhasindex | relkind | relchecks | reltriggers | relhasrules
-------------+---------+-----------+-------------+-------------
 t           | r       |         0 |           0 | f
(1 row)

    


  それぞれの項目は何なんだろうか?
  まだ今のところはよくわからない。


 
クエリー 2 の実行

なんとなく、これで 項目(フィールド名とそのタイプ)が表示されているみたいです。
beniya=# SELECT a.attname, format_type(a.atttypid, a.atttypmod), a.attnotnull, a.atthasdef, a.attnum
beniya-# FROM pg_class c, pg_attribute a
beniya-# WHERE c.relname = 'bhnmst'
beniya-#   AND a.attnum > 0 AND a.attrelid = c.oid
beniya-# ORDER BY a.attnum
beniya-# ;
  attname   |      format_type       | attnotnull | atthasdef | attnum
------------+------------------------+------------+-----------+--------
 bhn_code   | character(10)          | t          | f         |      1
 bhn_name   | character varying(50)  | f          | f         |      2
 bhn_yomi   | character varying(100) | f          | f         |      3
 bhn_bunrui | character(2)           | f          | f         |      4
 bhn_keijou | character(2)           | f          | f         |      5
 bhn_wide   | numeric(5,2)           | f          | f         |      6
(6 rows)
   
クエリー 3 の実行
beniya=# SELECT c2.relname
beniya-# FROM pg_class c, pg_class c2, pg_index i
beniya-# WHERE c.relname = 'bhnmst' AND c.oid = i.indrelid AND i.indexrelid = c2.oid
beniya-# AND NOT i.indisunique ORDER BY c2.relname
beniya-# ;
 relname
---------
(0 rows)

   
クエリー 4の実行
beniya=# SELECT c2.relname
beniya-# FROM pg_class c, pg_class c2, pg_index i
beniya-# WHERE c.relname = 'bhnmst' AND c.oid = i.indrelid AND i.indexrelid = c2.oid
beniya-# AND i.indisprimary AND i.indisunique ORDER BY c2.relname
beniya-# ;
   relname
-------------
 bhnmst_pkey
(1 row)

   
クエリー 5の実行
beniya=# SELECT c2.relname
beniya-# FROM pg_class c, pg_class c2, pg_index i
beniya-# WHERE c.relname = 'bhnmst' AND c.oid = i.indrelid AND i.indexrelid = c2.oid
beniya-# AND NOT i.indisprimary AND i.indisunique ORDER BY c2.relname
beniya-# ;
 relname
---------
(0 rows)


   






















2004/12/18 restart ********* Last Update 2004/12/18 12:00 JST

(C) Y.Kondou,2004 All Rights, Reserved.
e-mail:kondou@beniya.com