これ何て呼びますか

テーブルの情報を取得したい
PHP5とPostgreSQL8.4.3を使っています。
フォームにテーブル名を入力して送信すると、そのテーブルの情報(カラム名、型名など)が表示され、
そのテーブルに対してレコードの追加や削除を行いたいのですが方法が分かりません。
どなたか分かる方いらっしゃいましたらお願いします。

A 回答 (1件)

まず、前置きです。



表の定義情報などが登録先は、RDBMSによりカタログ、ディクショナリなど管理方式や呼称が異なり、その参照方法も独自のコマンドを使ったり、SQLのSELECT文で行えたりします。

各RDBMSごとにバラバラである「定義情報の参照方法」について、標準SQLで情報スキーマ(information_schema) が規定され、各RDBMSによる実装も進みつつあります。

たとえば、標準SQL準拠で情報スキーマを実装しているRDBMSでは、

表名一覧・・・データベース名、スキーマ名などを条件に、information_schema.tables 表を検索
表の構成列一覧・・・データベース名、スキーマ名、テーブル名などを条件に、information_schema.columns 表を検索

を参照すれば、名称などを同じように得られます。

ただし、データベース、スキーマ、ユーザなどのRDBMSにより概念に違いがあるものは、どの表のどの列に情報を入れているかを確認する必要があります。

さて、列名やデータ型ですが、前述のように information_schemaのcolumns表を検索すれば得られます。

ここで問題になるのは、データ型です。
文字型、数値型、日付型など様々なデータ型があり、また長さを指定するものや指定しないものがありますよね。
単純にchar、varchar、integer、dateなどのレベルの情報であれば、data_type 列で得られるのですが、長さなどの情報はdata_type列の内容により、参照すべき列が異なってきます。

どのレベルまで知りたいのか分かりませんが、実際にcolumns表の内容を確認し、得たい情報を自分なりに調べてみてください。


PostgreSQLの information_schema.columns 表 の詳細については、以下を参照してください。

http://www.postgresql.jp/document/pg830doc/html/ …

information_schema.columns 表 の検索例は、次のような感じです。

select
table_schema as scm
,table_name as tbl
,ordinal_position as "no"
,column_name as clm
,data_type
,character_maximum_length
,character_octet_length
,numeric_precision
,numeric_precision_radix
,numeric_scale
from information_schema.columns
where table_name in('t1','t2')
order by table_name,ordinal_position
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!