Postgres : テーブルの列名(カラム名)を調べる

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





同じカテゴリー(PostgreSQL)の記事

この記事へのコメント
今更ですが。

psqlのコマンド上からだと
"\d table_name"
で調べられますが、それじゃ駄目?
Posted by ルーパスさいとう at 2008年11月10日 17:23
チェックだけならOKじゃないですか(笑)

列名抜き出して、プログラム中で INSERT文を生成して・・・みたいな。
Posted by SE風味SE風味 at 2008年11月10日 17:35
参考になります!ありがとうございます!
Posted by 光太郎 at 2010年02月16日 17:27
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

写真一覧をみる

削除
Postgres : テーブルの列名(カラム名)を調べる
    コメント(3)