• 締切済み

シーケンスのリストを取得したい。

いつもお世話になっております。 インターネットサーバー上のPHPから postgreSQLのデータベース内の テーブル名とシーケンス名のリストを SELECTを使ったSQL文にて取得したいのです。 テーブルリストは、 select * from pg_tables where not tablename like 'pg%' order by tablename; で取得できましたが、 シーケンス名のやり方がわかりません。 phppgadminでシーケンスの表が表示できるので、 phpでも出来ると思うのですがわかりません。 お知恵をおかしください。 hiroko

みんなの回答

  • annyG
  • ベストアンサー率25% (10/39)
回答No.3

質問者さんを差し置いて、回答者同士で会話するようで申し訳ないです。(汗) > ただ、個人的には pg_statio_all_sequences などは統計情報を取得するためのビューなのでシーケンスの一覧を取得するのに参照するのはちょっと気持ち悪いです。  あーそうなんですか。それは知りませんでした。  というか、ずーっと以前から「statio」ってなんなんだろうなあ、って思っていて、なんとなく「status I/Oかな?」って思っていたんですが、statisticsだったのですね!  やっとナゾが解けました。勉強になりました。  そうか、statisticsの略だったのか。。。やっとスッキリした。。。

  • yamada59
  • ベストアンサー率74% (29/39)
回答No.2

回答番号: 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/infoschema-sequences.html
hiroko2009
質問者

お礼

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

  • annyG
  • ベストアンサー率25% (10/39)
回答No.1

pg_statio_user_sequences というビューがあります。 システムが使っている物を見たいときには pg_statio_sys_sequences 両方は pg_statio_all_sequences ちなみにインデックスは pg_statio_user_indexes テーブルも pg_statio_user_tables のほうがいいように思います。

関連するQ&A

  • MSSQLServerでテーブル名リストの取得

    Microsoft SQL Serverでテーブル名のリストを取得したいと考えています. Oracleではall_tablesに相当するようなビューまたは等価な情報を取得する手順はないものでしょうか?

  • カラムの一覧を取得したい

    これまでMySQLを利用していたのですが、諸事情によりPostgreSQLへ 移行することになりました。そんなにMySQLへ依存した作り方をして いなかったので、簡単に考えていたのですが、ちょっと躓いている ことが出てきたのでご質問させて戴きます。 MySQLでは「show tables;」というコマンドを送ることにより、 データベース内のテーブル一覧を取得することが出来ました。 かなり色々調べ回ったところPostgreSQLでは 「select * from pg_stat_user_tables」 というコマンドが、それに相当することがわかりました。 同じように、MySQLでの「show fields from TABLE_NAME;」という 指定したテーブルのカラム一覧を取得するためのコマンドに相当する ものを探しているのですが見つかりません。 どなたかご存知であれば、ご教授下さい。 以上、宜しくお願い致します。

  • SQL シーケンスについて

    Orcle8iを使用しています。 INSERT INTO SELECT で別のテーブルのデータを追加したいのですが、そのうち1つフィールドには、シーケンスオブジェクトで取得した値を入れたいと思っていますが、INSERT文が作れません・・・。 例えば ----------------------------- INSERT INTO TABLE1(FIELD1,FIELD2,FIELD3)   SELECT --SELECT SEQ.NEXTVAL FROM DUAL??--     FIELD1_2,     FIELD1_3 FROM TABLE2 WHERE FILED1_2='X'; ----------------------------- という場合、TABLE1のFIELD1に連番を入れたいのですが 書き方が分かりません。 http://www.okweb.ne.jp/kotaeru.php3?q=347146 上記URLの質問に、シーケンスのSELECT文を副問い合わせにして・・・という回答があったのですが、それもよく理解できませんでした・・・(T_T) シーケンスのSELECT文をどう埋め込めば良いのでしょうか? どなかた教えていただけませんか? よろしくお願いします。

  • シーケンス取得について

    AスキーマとBスキーマがあり AにはSというシーケンスが作成されて、GRANTでBに権限付与されています。 BのUSER_SEQUENCESにはもちろん存在しないため、 SELECT MAX_VALUE FROM USER_SEQUENCES WHERE SEQUENCE_NAME でMAX_VALUEの取得でエラーになります。 これを回避する方法ってありますでしょうか?? もしくはBのUSER_SEQUENCES に追加する方法がありますでしょうか? どなたかお願い致します。

  • MySQLとPostgreSQLについてのSQLインジェクション

    はじめて質問させていただきます。 よろしくお願いします。 現在、私は大学の研究テーマでデータベース(MySQL、PostgreSQL)を使っているCGIを自作し、それぞれのデータベースについてSQLインジェクションの脆弱性について調べる、という研究を行っています。 ブラインドSQLインジェクションについて調べているのですが、 PostgreSQLの場合、pg_tablesというテーブルにデータベースのテーブル一覧表がのっていて、それを参照することでテーブル名が取得でき、いろいろ悪いことができてしまいますが、MySQLの場合、ブラインドSQLインジェクションを起こそうと思った場合どのようなコマンドを使えばよいのでしょうか? SHOW TABLESで使用中のデータベースのテーブル一覧は取得できますが、それをクエリの一部として使うことはできるのでしょうか・・・? また、全く関係ない質問なのですが、このCGIはRubyで記述して作りました。Rubyにはプリペアドステートメントという機能があるのですが、これをデータベースにアクセスするすべての箇所で用いればSQLインジェクションは100%起きないといえるのでしょうか?(現在考え得る範囲でよいのでお願いします) 卒論で困っているので知っている方がおられましたらどうかよろしくお願いいたします。

  • 列番号による項目の取得について

    SQLの構文についての質問です。 あるテーブルからデータを取得する場合、 「SELECT 項目名1,項目名2・・ FROM テーブル名 WHERE 条件」 というSQL文となりますが、 項目名1,項目名2の部分を列番号を指定することによって 値を取得することは可能でしょうか?

  • postgreSQLで更新後のデータを取得したい。

    postgreSQLで更新後のデータを取得したい。 初めて質問させていただきます。 postgreSQLでupdateした後、更新後のデータをselectで取得したいのですが、 トランザクションが完了するまでにselect文が発行されているみたいで、更新前のデータを取得してしまいます。 それぞれ、違うファイルから投げられているので、同じトランザクションにすることはできません。 何かいい方法があればご教授お願いします。 a.phpで下記のSQLを発行 update test_tbl set test1 = 'aaa' where test2 = 'bbb' a.phpが走っている間に、下記のb.phpが実行される。 select test1 from test_tbl 環境 php5 postgres8.1

  • PostgreSQLで、元テーブルをコピーする時に制約も取得するには?

    PostgreSQLの質問です。 元テーブルを新規テーブルに項目だけコピーしたいのですが、 primary key などの制約も同時にコピーする方法を教えて頂けないでしょうか? 下記で、空のテーブルをコピーできると思ったのですが、これでは制約はコピーされないようです。 CREATE TABLE tableName_temp AS SELECT * FROM tableName WHERE 1 = 0 また、後付で制約をつけるにも、CREATE TABLE時にしかつけることができないみたいです。 何かよい方法がありましたら、宜しくお願い致します。

  • postgreSQL + PHPの連携

    現在postgreSQLとPHPを使い、 勉強を兼ねスクリプトを組んでいます。 が、早速つまづいてしまいました。。 [ID][名前][年齢]の3つのカラムがあります。 そこからIDが「10」の行を取得したいのですが、 どのように書けばよいのでしょうか? $sql = "SELECT * FROM TAB where(ID = 10)"; $rs = pg_query($cn, $sql); $row = pg_fetch_array($rs); echo "$row[ID]、$row[名前]、$row[年齢]"; 願わくば、と上のように書いたのですが、 「、、」と表示されるだけで…。 ご教示、お願いいたします。

    • ベストアンサー
    • PHP
  • PHPとPostgreSQL接続 (スキーマ)

    いつもお世話になっております。 現在、PHP(5.3.1)とPostgreSQL(9.2)で開発をしております。 エラーが発生しており大変困っております。 こちらが発生するエラーです。 Warning: pg_exec() [function.pg-exec]: Query failed: ERROR: schema スキーマが見つからないとのことです。 そして、以下がコードとなります。 <?php // PostgreSQL Connect if (!($cn = pg_connect("host=*** port=*** user=*** password=*** dbname=***"))) { die; } // PostgreSQL Select $sql = "select * from t_test.na1"; if (!($rs = pg_exec($sql))) { die; } // PostgreSQL Get Records $ct = pg_numrows($rs); for ($i = 0; $i < $ct; $i++) { $item = pg_fetch_array($rs, $i); $txt = "${item[1]}"; } // PostgreSQL Disconnect pg_close($cn); ?> 現在のデータベースのスキーマについてですが「na1」と「public」の2つが存在しています。 試しに、na1とpublicのテーブルをまったく同じにして SQLの部分を「select * from t_test」に変更すると「public」側のテーブルが覗けます。 しかし、SQLの部分を「select * from t_test.na1」に変更すると「スキーマが見つかりません」 というエラーが発生してしまいます。 スキーマがあるにもかかわらずこのエラーがでてしまうため原因が分からず困っております。 もしお分かりになる方いらっしゃいましたら、教えていただければと思います。 何卒よろしくお願いします。

    • ベストアンサー
    • PHP