基本的な拡張の概念を紹介しましたので、実際にカタログがどのように設計されているか見てみたいと思います。今はこのセクションを飛ばしても構いませんが、ここで与えられる情報なしで後のセクションを理解するのは難しくなるため、後の参照用にこのセクションはマークしておいてください。すべてのシステムカタログはpg_で始まる名前を持っています。次のテーブルはエンドユーザーに役立つかもしれない情報を持っています(ほかにもたくさんのシステムカタログがありますが、それらに直接問い合わせることはほとんど無いはずです)。
Table 11-1. PostgreSQLシステムカタログ
カタログ名 | 説明 |
---|---|
pg_database | データベース |
pg_class | テーブル |
pg_attribute | テーブルカラム |
pg_index | インデックス |
pg_proc | プロシージャ/関数 |
pg_type | 型(基本と複合の両方) |
pg_operator | 演算子 |
pg_aggregate | 集約関数 |
pg_am | アクセスメソッド |
pg_amop | アクセスメソッド演算子 |
pg_amproc | アクセスメソッドサポート関数 |
pg_opclass | アクセスメソッド演算子クラス |
Developer's Guideにはこれらのカタログとそのカラムの詳しい説明がありますが、Figure 11-1がシステムカタログの主要な実体とそれらの関係を表しています(他の実体を参照しない実体は主キーの一部でない限り表されていません)。この表は、実際にカタログの中身を見てそれらがお互いどう関係しているかを見るまでは理解しづらいものです。今は、この表で以下の項目を理解してください
あとに続くいくつかのセクションでは、システムを拡張するのに必要な情報を示すシステムカタログのさまざまな結合問い合わせを紹介します。この表を見ることでこれらの結合問い合わせ(しばしば三重あるいは四重の結合です)は理解しやすくなるでしょう。なぜなら問い合わせで使われるカラムは他のテーブルの外部キーになることがわかるからです。
多くの機能(テーブル、カラム、関数、型、アクセスメソッドなど)はこの概要にぎっしりと統合されています。単純なcreateコマンドでこれらのカタログの多くを変更してしまうかもしれません。
型とプロシージャはこの概要の中心です。
Note: ここではプロシージャとfunctionはほぼ同じ意味で使われています。
ほぼすべてのカタログがこれらのテーブルの1つか両方の中の行を参照しています。たとえば、PostgreSQLは他のカタログの一意な行を識別するために頻繁に型記号(たとえば関数や演算子のもの)を使います。
There are many columns and relationships that have obvious meanings, but there are many (particularly those that have to do with access methods) that do not. The relationships between pg_am, pg_amop, pg_amproc, pg_operator, and pg_opclass are particularly hard to understand and will be described in depth (in Chapter 17)after we have discussed basic extensions.明白な意味を持つカラムや関係はありますが、そうではないもの(特にアクセスメソッドと関係するもの)もたくさんあります。pg_am、pg_amop、pg_amproc、pg_operator、pg_opclassの関係は特に理解しづらいので、基本的な拡張について説明した後で(Chapter 17参照)詳しく説明します。