Postgres で テーブルの列名(カラム名)を調べる。
参考にしたのは、
デジタル料理人 - Webプログラマコンサル屋様の
PostgreSQLでカラム名(列名)を取り出す方法
を元に、列名限定でSQLを最適化したものです。
SELECT att.attname
FROM pg_attribute as att
INNER JOIN pg_class as class ON class.oid = att.attrelid
WHERE att.attnum > 0
AND class.relname='テーブル名'
ORDER BY att.attnum
いい方法を皆さん模索しているのか、いくつかほかにも例がありました。
テーブルのカラムと属性を取得するSQL
http://www.manami.st/clog/2007-06-27-1.html
残念ながら、上のブログの方法では抜き出せませんでした。
しかし、このブログに限らず、同様の方法を例としているところが多い。
共通して pg_attribute.attrelid = pg_class.relfilenode としているのだが、これは正しいのだろうか?
あと、正しい結果は抜き出せたのですが、最初の例の pg_class を使っているところで、pg_stat_user を使っているものがありました。
主キーやUNIQUE制約の情報も含めて指定テーブルの情報を一覧する
http://ifnothing.net/postgresql/tableInfo.html
かなりいろんな情報が取れるが、これも列名に限定すると、こんな感じ
SELECT att.attname
FROM pg_attribute as att
INNER JOIN pg_stat_user_tables stat ON att.attrelid = stat.relid
WHERE att.attnum > 0
AND stat.schemaname='スキーマ名'
AND stat.relname='テーブル名'
ORDER BY att.attnum