ロール、データベース、テーブル空間名のような少数のオブジェクトはクラスタレベルで定義されており、pg_global
テーブル空間に格納されています。
クラスタの中には複数のデータベースがあり、互いに分離されているもののクラスタレベルのオブジェクトにはアクセスできます。
各データベースの中には複数のスキーマがあり、スキーマはテーブルや関数などのオブジェクトを含みます。
したがって階層の全体像は、クラスタ、データベース、スキーマ、テーブル(や関数などの何らかのオブジェクト)となります。
データベースサーバに接続する時、クライアントはその接続要求の際に接続するデータベース名を指定しなければなりません。 1つの接続で複数のデータベースにアクセスすることはできません。 しかし、アプリケーションには同じデータベースや他のデータベースへの接続に接続数の制限はありません。 複数のデータベースは物理的に分離されていて、アクセス制御は接続レベルで管理されています。 したがって、分離して、ほとんどの場面で互いに見えないようにする必要のある複数のプロジェクトやユーザを単一のPostgreSQLサーバインスタンスに収容する場合、これらを別々のデータベースに含めることが推奨されます。 もし、複数のプロジェクトやユーザが相互に関連していて互いのリソースを使用できる必要がある場合、これらは同じデータベースに含めるべきですが、スキーマを別にすることは可能です。 スキーマは純粋に論理的な構造で、誰が何にアクセスできるかは権限システムによって管理されます。 スキーマの管理についての詳細は5.9に記載されています。
データベースはCREATE DATABASE
コマンド(22.2を参照)で作成され、DROP DATABASE
コマンド(22.5を参照)で破棄されます。
既存のデータベース群を求めるには、以下の例のようにpg_database
システムカタログを確認してください。
SELECT datname FROM pg_database;
また、psqlプログラムの\l
メタコマンドや-l
コマンドラインオプションも既存のデータベースを列挙する際に役に立ちます。
標準SQLでは、データベースを「カタログ」(catalog)と呼ぶこともありますが、実際のところ違いはありません。