0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【IT基礎】PostgreSQL DB・スキーマ・テーブルとは?(個人メモ)

0
Posted at

はじめに

PostgreSQL 周りで作業していて、「あれ、PostgreSQL ってどういう構造だっけ?」と迷う瞬間があったので、
Database → Schema → Table の関係を中心に、あらためて整理してみました。


1. PostgreSQL の基本構造

image.png

① Database(データベース)

PostgreSQL の“最上位の入れ物”
データベースごとに完全に独立。

  • データは DB ごとに隔離される
  • 同名テーブルが別 DB にあっても問題なし
  • アプリごとに DB を分けると管理しやすい

例:

product_db     ← 商品管理
billing_db     ← 請求管理

② Schema(スキーマ)

1つのデータベースの中に作れる“フォルダ(名前空間)”
テーブル・ビュー・関数などをまとめる役割があります。

例:

public        ← デフォルト
sales         ← 営業システム
accounting    ← 会計アプリ

スキーマを使う利点:

  • テーブル名の衝突を防げる
  • 権限管理がしやすい
  • 1つの DB に複数アプリを共存させられる

③ Table(テーブル)

実際のデータが入る「表」
テーブルは必ずスキーマの下に作られる。

例:

customers       ← 顧客
orders          ← 注文
invoice_items   ← 請求明細

3. PostgreSQL の “デフォルトスキーマ” について

PostgreSQL で CREATE DATABASE すると、内部的にいくつかのスキーマが自動生成される。

代表例:

スキーマ 説明
pg_catalog PostgreSQL のシステム情報(超重要)
information_schema 標準SQLで定義されたメタデータ
pg_toast 大きなデータの内部管理用
public ユーザーが最初に使う“標準スキーマ”

普段使っていくのは public、または自分で作るアプリ専用スキーマです。

4. スキーマ検索パス(search_path)

実際には FROM sales.customers のようにスキーマを明示しなくても、

SELECT * FROM customers;

だけで動く。

これは PostgreSQL が

SHOW search_path;

で指定されている順にスキーマを探してくれるから。


5. 権限の付け方

PostgreSQL は、基本的に

  1. データベース単位で接続権限を決める
  2. スキーマ単位で所有者を決める
  3. テーブル単位で最小限の CRUD を付ける

1→2→3の順番で行うのが基本の管理方法。

レイヤ 制御内容 典型的な使い方
データベース 接続できるか アプリごとに DB を分ける
スキーマ 所有権 アプリごとに専用スキーマ
テーブル SELECT/INSERT/UPDATE/DELETE 必要最小限

6. スキーマとテーブルの確認コマンド(psql)

スキーマやテーブルを確認したい時のコマンド。

スキーマ一覧

\dn

テーブル一覧(全スキーマ)

\dt *.*

特定スキーマのテーブル一覧

\dt sales.*

まとめ

  • Database:最上位の入れ物(完全に独立)
  • Schema:DB内のフォルダ/名前空間(整理と権限管理に便利)
  • デフォルトは設定されている。DBの名前空間のようなもの。
  • Table:実データ
  • search_path:どのスキーマを優先して探すかの設定
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?