PostgreSQLシステムテーブルとInformation_schemaビューの間のマッピングは文書化されていますか?
-
16-10-2019 - |
質問
PGADMINIIIをPostgreSQL 9.xサーバーに接続すると、ユーザーインターフェイスに2つのカタログが公開されています:ANSI(情報スキーマ)とPostgreSQL(PG_Catalog)が見つかります。
間のマッピングを説明するドキュメントを探しています
- データベースオブジェクトとシステムテーブル
- システムテーブルと情報_schemaビュー
たとえば、データベースからシーケンス名を取得し、シーケンス自体、シーケンスの名前、およびシーケンスのACL(Grant and Revoke Statementsから)がどこにあるかを迅速に伝えることができるようにしたいと思います。システムテーブルと情報_schemaビュー。
それはどこにでも文書化されていますか?私はPostgreSQLのオンラインドキュメントを通して行ってきましたが、両方の詳細を見つけました ANSI と postgreSql カタログですが、マッピングのドキュメントは見つかりませんでした。
アップデート
情報はおそらくソースファイルInformation_schema.sqlにあるように見えますが、そのファイルはオンラインソースコードにはないようです。 (たとえば、initdb.c atを参照してください http://doxygen.postgresql.org/.)
解決
システムテーブルは、データベースオブジェクトの実装です。したがって、たとえば、関数を呼び出す場合 foo()
, 、DBMSが調べます pg_proc
関数があるかどうかを確認します foo
そして、引数とソースコードなどは何ですか。システムカタログのレイアウトと配置は、時間の経過とともにさまざまな機能の実装者がそれらを作る方法にすぎません。あなたはすでにカタログのドキュメントを指摘しました。多くの場合、たとえば、関数との間に単純なマッピングがあります。 pg_proc
. 。しかし、他の場合は、インデックスなど、もう少し複雑です。ドキュメントからその情報を掘り下げる必要があるか、おそらくシステムカタログクエリの多くの例を飛び回る必要があります。
情報スキーマは、SQL標準で指定されています。これらのDDLコマンドを入力すると、情報スキーマのクエリがこれらの結果を与える必要があります。多くの場合、オブジェクトと情報スキーマビューの間にも簡単なマッピングがありますが、すべての場合に簡単ではありません。したがって、この情報のマッピングに関する個別のドキュメントを維持することは、面倒でおそらく役に立たないでしょう。原則は、PostgreSQLシステムカタログで起こることではなく、情報スキーマのDDLです。
最終的に、シーケンスがカタログテーブルにあるか情報スキーマビューにあるかを知りたい場合は、これらのテーブルを照会する必要があります。現実は複雑すぎて、これがより単純ではありません。 (私は思う。あなたがより良いアイデアを持っているならば、パッチを送ってください。)
他のヒント
ほとんどの情報スキーマはpg_catalogに対する見解の形であるため、それを使用して大量に取得できます psql
:
psql -U postgres -c "\d information_schema.*" > information_schema.sql