21.1. 概要

データベースとは、SQLオブジェクト("データベースオブジェクト")の集合に名前を付けたものです。 一般的には、全てのデータベースオブジェクト(テーブル、関数など)は、1つのデータベースのみに属します (しかし、例えば、pg_databaseといったシステムカタログのごく一部には、クラスタ全体に属するものもあり、そのクラスタ内の全てのデータベースからアクセスすることができます)。 より正確には、データベースはスキーマの集合であって、スキーマにテーブル、関数などが含まれます。 したがって階層の全体像は、サーバ、データベース、スキーマ、テーブル(や関数などの何らかのオブジェクト)となります。

データベースサーバに接続する時、クライアントはその接続要求の際に接続するデータベース名を指定しなければなりません。 1つの接続で複数のデータベースにアクセスすることはできません (しかし、アプリケーションには同じデータベースや他のデータベースへの接続に接続数の制限はありません)。 複数のデータベースは物理的に分離されていて、アクセス制御は接続レベルで管理されています。 したがって、分離して、ほとんどの場面で互いに見えないようにする必要のある複数のプロジェクトやユーザを単一のPostgreSQLサーバインスタンスに収容する場合、これらを別々のデータベースに含めることが推奨されます。 もし、複数のプロジェクトやユーザが相互に関連していて互いのリソースを使用できる必要がある場合、これらは同じデータベースに含めるべきですが、スキーマを別にすることは可能です。 スキーマは純粋に論理的な構造で、誰が何にアクセスできるかは権限システムによって管理されます。 スキーマの管理についての詳細は項5.7に記載されています。

データベースはCREATE DATABASEコマンド(項21.2を参照)で作成され、DROP DATABASEコマンド(項21.5を参照)で破棄されます。 既存のデータベース群を求めるには、以下の例のようにpg_databaseシステムカタログを確認してください。

SELECT datname FROM pg_database;

また、psqlプログラムの\lメタコマンドや-lコマンドラインオプションも既存のデータベースを列挙する際に役に立ちます。

注意: 標準SQLでは、データベースを"カタログ"(catalog)と呼ぶこともありますが、実際のところ違いはありません。