プロが教える店舗&オフィスのセキュリティ対策術

いつもお世話になっております。
インターネットサーバー上のPHPから
postgreSQLのデータベース内の
テーブル名とシーケンス名のリストを
SELECTを使ったSQL文にて取得したいのです。

テーブルリストは、
select * from pg_tables
where not tablename like 'pg%' order by tablename;
で取得できましたが、
シーケンス名のやり方がわかりません。
phppgadminでシーケンスの表が表示できるので、
phpでも出来ると思うのですがわかりません。

お知恵をおかしください。
hiroko

A 回答 (3件)

質問者さんを差し置いて、回答者同士で会話するようで申し訳ないです。

(汗)

> ただ、個人的には pg_statio_all_sequences などは統計情報を取得するためのビューなのでシーケンスの一覧を取得するのに参照するのはちょっと気持ち悪いです。

 あーそうなんですか。それは知りませんでした。
 というか、ずーっと以前から「statio」ってなんなんだろうなあ、って思っていて、なんとなく「status I/Oかな?」って思っていたんですが、statisticsだったのですね!
 やっとナゾが解けました。勉強になりました。
 そうか、statisticsの略だったのか。。。やっとスッキリした。。。
    • good
    • 0

回答番号: No.1 の annyG さんの回答で問題ないです。



ただ、個人的には pg_statio_all_sequences などは統計情報を取得するためのビューなのでシーケンスの一覧を取得するのに参照するのはちょっと気持ち悪いです。揚げ足を取る気はないので気分を害したらすみません。

通常、シーケンスの一覧を取得する場合には情報スキーマの sequences を参照するか、

SELECT sequence_name FROM information_schema.sequences WHERE sequence_schema = 'スキーマ名';

システムカタログの pg_class を参照するのが一般的かと思います。

SELECT relname FROM pg_class AS c JOIN pg_namespace AS n ON (c.relnamespace = n.oid) WHERE c.relkind = 'S' AND n.nspname = 'スキーマ名';

CREATE SCHEMA でスキーマを定義しておらず、明示的にシーケンスの作成先のスキーマを指定していない場合には、ユーザの作成したシーケンスはスキーマ public に含まれます。条件にスキーマ名を指定しなければシステムのシーケンスを含めてすべてのシーケンス名を取得できます。

phpPgAdmin のソースコードを読んでいないので何とも言えませんが、おそらく pg_class を参照していると思います。

参考URL:http://www.postgresql.jp/document/pg826doc/html/ …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
さっそく
pg_class のrelname を参照したところ、
シーケンスリストの取得をする事ができました。
ほんとうにありがとうございました。
hiroko

お礼日時:2009/08/14 11:09

pg_statio_user_sequences


というビューがあります。
システムが使っている物を見たいときには
pg_statio_sys_sequences
両方は
pg_statio_all_sequences

ちなみにインデックスは
pg_statio_user_indexes
テーブルも
pg_statio_user_tables
のほうがいいように思います。
    • good
    • 0

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