![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
PostgreSqlシステムカタログを組み合わせて
データベース名 スキーマ名 テーブル名
----------- -------- --------
dtabase1 public table101
dtabase1 schema1 table111
dtabase1 schema1 table112
dtabase2 public table211
dtabase3 schema1 table311
dtabase3 schema2 table321
というようなデータを取ることは出来ますか?
No.2ベストアンサー
- 回答日時:
簡単には実現できないです。
データベースの一覧は pg_database を参照すれば取得できますが、スキーマとテーブルの一覧は接続中のデータベース内のものしか取得できません。
接続中のデータベース内のスキーマとテーブルの一覧であれば以下の SQL で取得できます。
SELECT n.nspname, c.relname
FROM pg_namespace AS n JOIN pg_class AS c ON (n.oid = c.relnamespace)
WHERE c.relkind = 'r';
どうしても別のデータベース内のスキーマとテーブルの一覧を取得したい場合には、dblink などのモジュールを使用する必要があります。
ただ、dblink を使用しても PL/pgSQL 関数などを作成せずに 1 つの SQL で実現するのは困難です (私の技術がないだけかもしれませんが)。
以下の SQL でデータベースの一覧を取得し、各データベースに接続してスキーマとテーブルの一覧を取得するのが簡単だと思います。
SELECT datname FROM pg_database WHERE datallowconn;
ありがとうございます。
やはり簡単には出来ないですか。
それが分かっただけでも収穫ですが、さらに補助的な情報を頂けたので、後はそれを参考にさせて頂いて、どうするか考えたいと思います。
No.1
- 回答日時:
まず、前置きです。
各RDBMSにおいて、表、列などの定義情報の管理方法は様々で、呼び名もカタログ、ディクショナリなど様々です。また、定義情報の参照方法も、SQLで通常の表の検索のように行えるものもあれば、特別なコマンドを使ったりと様々です。
こういった「RDBMS毎に定義情報の参照方法が違う」といったことを改善するため、標準SQLで規定されたのが情報スキーマ(information_schrema)です。
例えば、標準SQL準拠で情報スキーマを実装しているRDBMSでは、
表名一覧など・・・データベース名やスキーマ名などを条件に、tables表を検索
表の列名一覧など・・・データベース名やスキーマ名などに加え、表名を条件にcolumns表を検索
といった方法で得られます。
ただし、表名や列名など、どのRDBMSでも同じ概念のものはいいのですが、データベース、スキーマなどRDBMSごとに概念が違うものもあり、そういった場合は、どの列にどの情報が入っているか確認する必要があります。
さて、表名一覧ですが、上記のように、
SELECT * FROM information_schema.tables
WHERE ・・・
ORDER BY ・・・
といったSQLで得られると思います。
参考URL:http://www.postgresql.jp/document/pg746doc/html/ …
ありがとうございます。
解説頂いた事は大体理解しております。
tablesにスキーマとテーブルが紐付く情報が入っているのも知っていました。
しかし、データベース内のローカル情報ですので、
そこらから私の希望している「データベース名×スキーマ名×テーブル名」の情報を導き出すのが困難です。
pg_databaseにデータベースの一覧があります。
これに紐付ける事ができれば良いのですが、視野が違うために
データベース名 スキーマ名 テーブル名
----------- -------- --------
dtabase1 public table101
dtabase1 schema1 table111
dtabase1 schema1 table112
dtabase2 public table211
dtabase3 schema1 table311
dtabase3 schema2 table321
こういう形で求めるのは難しいのです。
何か良い手段はありませんか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) VBAプログラミング 2 2022/11/27 12:07
- Visual Basic(VBA) VBAプログラミング 2 2022/11/27 12:13
- HTML・CSS テーブルタグのセルの幅の一部だけを指定 1 2023/03/12 12:02
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) VBA 配列を使ったコードに直していただけますか 4 2023/05/06 15:18
- Android dtabでジャンプ+のアプリをインストールしたいのですが、Googleplayストアで検索しても出て 3 2022/11/06 21:24
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ORACLEのスキーマーを別のORACL...
-
FROM句のスキーマ名、テーブル...
-
PostgreSqlのシステムスキーマ...
-
EBCDICとCCSIDの違いとは
-
PostgreSqlシステムカタログを...
-
認知心理学で言うスクリプトとは?
-
今って秋田新幹線へ動いてますか?
-
【SQL】他テーブルに含まれる値...
-
SELECT INTOで一度に複数の変数...
-
フラグをたてるってどういうこ...
-
sqlに記述できない文字
-
JDBCを使ってdate型へのINSERT...
-
PostgreSQLのtimestamp型で時間...
-
SQLで、Join句で結合したテ...
-
予約システムでの時間の設計に...
-
1行のSQL文を改行するツール
-
1つのSQLで2段階の抽出を行い...
-
pandasでsqlite3にテーブル作成...
-
テーブル名が可変の場合のクエ...
-
timestampのデータはどのように...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データベース ユーザの「このユ...
-
dumpでインデックスだけ抜きたい
-
全テーブルの列数を調査したい
-
認知心理学で言うスクリプトとは?
-
ACCESSにおいてスキーマとは
-
PostgreSqlのシステムスキーマ...
-
2つのDBにある値の差分値で並び...
-
EBCDICとCCSIDの違いとは
-
テーブルのどの項目が主キーか...
-
スキーマ定義とは一体どう言っ...
-
スキーマ拡張後のExchangeサー...
-
リレーションシップの設定
-
アクセスのレポートの表示順
-
FROM句のスキーマ名、テーブル...
-
DB2でテーブルのサイズを見たい
-
SQL ServerのXMLスキーマがうま...
-
DBをまたいで更新
-
SQL Server2008のクエリの書式...
-
MySQL の show tables をするコ...
-
テーブルにはったインデックス...
おすすめ情報