PostgreSQLスキーマとは
PostgreSQLには「スキーマ(Schema)」という概念があり、同一データベース内でテーブルを名前空間で分離することができます。
postgres (データベース)
├── anker (スキーマ) ... 株式会社アンカーリンク
├── wr (スキーマ) ... 株式会社WR
└── public (デフォルトスキーマ)
Laravelでの設定
config/database.php の search_path を環境変数で切り替えます。
'pgsql' => [
'driver' => 'pgsql',
'host' => env('DB_HOST'),
'database' => env('DB_DATABASE'),
'username' => env('DB_USERNAME'),
'password' => env('DB_PASSWORD'),
'search_path' => env('DB_SCHEMA', 'public'),
],
.env でスキーマを指定するだけで、各プロジェクトのテーブルを完全に分離できます。
メリット
- データの完全分離 — 別プロジェクトのデータが混在しない
- マイグレーションの独立性 — 各プロジェクトのmigrationが干渉しない
- バックアップの柔軟性 — スキーマ単位でdumpが可能
- コスト削減 — サーバーを共用しつつ論理的に分離
注意点
search_pathの設定が正しくないとテーブルが見つからないエラーが発生します- 新規スキーマ作成にはDB管理者権限が必要です
- スキーマをまたいだJOINも可能ですが、運用は慎重に
まとめ
PostgreSQLのスキーマ機能はマルチプロジェクト運用に非常に有効な手段です。弊社ではこの仕組みを活用して複数クライアントのシステムを効率よく管理しています。