PostgreSQLにおけるデータベース、スキーマ、テーブルの関係

PostgreSQL ではデータベースとテーブルの他にスキーマと呼ばれるものが存在します。ここでは PostgreSQL におけるデータベース、スキーマ、そしてテーブルの関係について簡単に解説します。

(Last modified: )

PostgreSQLにおけるデータベース、スキーマ、テーブルの関係

PostgreSQL におけるデータベース、スキーマ、そしてテーブルの関係について簡単に解説します。

データベース

PostgreSQL では複数のデータベースを管理することができます。インストールした直後などはテンプレート用のデータベースである template0 と template1 、そして postgres という名前のデータベースが作成されます。(これらデータベースが集まったものもデータベースクラスタと呼んでいます)。

PostgreSQLにおけるデータベース、スキーマ、テーブルの関係(1)

データベースは作成する権限があれば新規で追加することができます。

PostgreSQLにおけるデータベース、スキーマ、テーブルの関係(2)

スキーマ

PostgreSQLにおいて実際のデータはテーブルに格納されます。テーブルは目的に応じて複数作成することができ、それをまとめているのがデータベースですが、さらに PostgreSQL ではデータベースの中にスキーマと呼ばれるものがあります。

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

PostgreSQLにおけるデータベース、スキーマ、テーブルの関係(3)

public スキーマはデフォルトですべてのロールにアクセス権限と CREATE 権限が与えられており、 public スキーマの中にどのロールでもテーブルを作成することができます。

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

PostgreSQLにおけるデータベース、スキーマ、テーブルの関係(4)

テーブル

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

PostgreSQLにおけるデータベース、スキーマ、テーブルの関係(5)

CREATE TABLE コマンドでテーブルを作成する場合など、テーブル名にスキーマを省略した場合はデフォルトでは public スキーマに対してテーブルが作成されます(ロール名と同じスキーマが作成されていた場合は異なります)。

-- --

PostgreSQL におけるデータベースとテーブルとスキーマとの関係について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。