カラムに設定したデータ型を調べる
久しぶりに自作のシステムをいじくろうとしたら、PostgreSQLで作成したテーブルのカラム名とデータ型が何だったか忘れてしまっていたという(メモも残ってないや~><)、ダメダメなシステム管理者だということが発覚w
my_db=> \dこれでテーブルの一覧は出せるので、
select * from my_table;これでカラム名まではわかるようになります。 でも、データ型をどう指定したのかわからなくて困ることがあるよね? ないですか;; ...普通は困らないのだろうから、そういうSQLやらコマンドや関数はないのだと思われます。ええ、そうですよね?
そうは言っても困っているので、いろいろと検索してみました。
「テーブルのカラム名とデータ型を、SQLを使って動的に取得する」(永字八法)というのを見つけることができましたので、以下丸写しさせてもらいますm(_ _)m
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__'
);
最後のWHERE句の__TABLE_NAME__と__SCHEMA_NAME__を指定してあげれば、
attname | typname | attlen --------------+---------+-------- id | int4 | 4 member | int4 | 4 date_t | date | 4 schedule | varchar | -1
と、こなような感じに教えてくれます。
サイズを指定していない時にはattlenが-1になるそうです。
◆其の二
ダンプの取り方を工夫すると、CREATE TABLEの文の他にビューなども取り出せるので便利かも。
適当なディレクトリで
pg_dump -f __FILE_NAME__ -F p -v -s __DB_NAME__
データベースが大きいと該当するテーブル見つけるのが大変かもしれないけど。
CREATE TABLE week_schedule (
id integer,
member integer,
date_t date,
schedule character varying
);
こんな感じ^ ^
