稼動している PostgreSQL サーバのすべてのインスタンスは、1 つ以上のデータベースを管理します。 したがって、データベースは SQL オブジェクト ("データベースオブジェクト") を組織化する場合に最高の階層レベルとなります。 この章では、データベースのプロパティ、作成方法、管理方法、および削除方法について説明します。
データベースとは、SQL オブジェクト("データベースオブジェクト")の集合に名前を付けたものです。 一般的には、全てのデータベースオブジェクト(テーブル、関数など)は、1つのデータベースのみに属します。 (しかし、例えば、pg_database といったシステムカタログのごく一部には、クラスタ全体に属するものもあり、そのクラスタ内の全てのデータベースからアクセスすることができます。) より正確には、データベースはスキーマの集合であって、スキーマにテーブル、関数などが含まれます。 したがって階層の全体像は、サーバ、データベース、スキーマ、テーブル (またはテーブル以外の何か) となります。
データベースサーバに接続するアプリケーションは、その接続要求の際に接続するデータベース名を指定します。 1 つの接続で複数のデータベースにアクセスすることはできません。 (しかし、アプリケーションには同じデータベースや他のデータベースへの接続に接続数の制限はありません。) もっとも、同じ接続から複数のスキーマにアクセスすることは可能です。 スキーマは純粋に論理的な構造で、誰が何にアクセスできるかは権限システムによって管理されます。 複数のデータベースは物理的に分離されていて、アクセス制御は接続レベルで管理されています。 したがって、分離して、ほとんどの場面で互いに見えないようにする必要のある複数のプロジェクトやユーザを単一の PostgreSQL サーバインスタンスに収容する場合、これらを別々のデータベースに含めることが推奨されます。 もし、複数のプロジェクトやユーザが相互に関連していて互いのリソースを使用できる必要がある場合、これらは同じデータベースに含めるべきですが、スキーマを別にすることは可能です。 スキーマの管理についての詳細は 項5.8 に記載されています。
注意: SQLでは、データベースを"カタログ"(catalogs)と呼ぶこともありますが、実際のところ違いはありません。