テーブルのカラム名とデータ型を、SQLを使って動的に取得する。
PostgreSQLのみですよー。
SELECTされるのは、カラム名とデータ型名(どちらも文字列)、それとそのカラムの長さ(数値)。
__SCHEMA_NAME__の部分にはスキーマ名を、__TABLE_NAME__の部分にはテーブル名をそれぞれ入れる。
SELECT pg_attribute.attname, pg_type.typname, pg_attribute.attlen FROM pg_attribute, pg_type WHERE pg_attribute.atttypid = pg_type.oid AND ( pg_attribute.atttypid < 26 OR pg_attribute.atttypid > 29 ) AND attrelid IN ( SELECT pg_class.oid FROM pg_class, pg_namespace WHERE relname='__TABLE_NAME__' AND pg_class.relnamespace=pg_namespace.oid AND pg_namespace.nspname='__SCHEMA_NAME__' );
ORDER BY句はお好みでどうぞ。
ちなみにカラムの長さは、VARCHARなどでは設定しない限りマイナス1になっている。
2008-10-02追記
つまるところ、PostgreSQLでは、ユーザーもスキーマもテーブルもカラムもビューもトリガーもファンクションも(以下略)システムがテーブル作ってそれに入れて管理している訳で、なのでそれらのシステムが使ってるテーブルを参照すれば、なんでもわかると言う次第です。
ちなみに他のデータベースではどんなことやってるのかは知らね。