PostgreSQL | スキーマ | データベース、スキーマ、テーブルの関係

PostgreSQL には、データベースやテーブルとは別にスキーマというものが存在する。ここでは PostgreSQL のデータベース、スキーマ、テーブルの関係について簡単に説明する。

PostgreSQL のデータベース、スキーマ、テーブルの関係

PostgreSQL のデータベース、スキーマ、テーブルの関係について簡単に説明する。

データベース

PostgreSQL では複数のデータベースを管理できる。インストール直後は、テンプレートデータベースである template0template1、そして postgres というデータベースが作成される。これらのデータベースをまとめてデータベースクラスタと呼ぶ。

データベースは、作成権限があれば新しく追加できる。

スキーマ

PostgreSQL では実際のデータはテーブルに保存される。テーブルは目的に応じて複数作成でき、それらをまとめるものがデータベースである。さらに PostgreSQL では、データベースの中にスキーマがある。

スキーマは、データベースに作成されるテーブルや関数などのオブジェクトをグループ化するものである。スキーマが異なれば、同じデータベース内でも同じ名前のテーブルを作成できる。データベースを作成すると、public という特別なスキーマが自動的に作成される。

public スキーマには、デフォルトですべてのロールに権限と CREATE 権限が付与され、どのロールでも public スキーマにテーブルを作成できる。

public スキーマとは別に、データベースにスキーマを作成できる。他のデータベースシステムではユーザー名と同じ名前のスキーマしか作成できないものもあるが、PostgreSQL では任意の名前のスキーマを作成できる。

テーブル

テーブルはスキーマに作成する。スキーマが異なれば、同じテーブル名のテーブルも作成できる。また、スキーマごとにテーブルなどのオブジェクトを作成できる権限を設定できる。

CREATE TABLE コマンドでテーブルを作成する場合、テーブル名のスキーマを省略すると、基本的には public スキーマにテーブルが作成される。ただし、ロール名と同じ名前のスキーマが作成されている場合は除く。

ここまで、PostgreSQL のデータベース、テーブル、スキーマの関係について説明した。