データベースマイグレーション戦略
idp-server のデータベーススキーマ変更を安全に実施するためのマイグレーション戦略と運用ガイドライン。
📌 基本方針
バージョン管理の原則
アプリケーションバージョンとマイグレーションバージョンを一致させる
| アプリバージョン | マイグレーションバージョン | 説明 |
|---|---|---|
| v0.9.0 | V0_9_0__init_lib.sql | 初期DDL |
| v0.9.21.1 | V0_9_21_1__add_event_partitioning.sql | イベントパーティショニング追加 |
| v0.9.32.2 | V0_9_32_2__webauthn4j.sql | WebAuthn機能追加 |
デプロイ順序:
1. マイグレーション実行(Flyway)
↓
2. アプリケーションデプロイ
重要: マイグレーション完了前にアプリケーションを起動しない
🔧 マイグレーション作成ガイド
ファイル命名規則
V{major}_{minor}_{patch}__{description}.sql
V{major}_{minor}_{patch}_{sub}__{description}.sql # サブバージョンあり
PostgreSQL例:
V0_9_0__init_lib.sqlV0_9_21_1__add_event_partitioning.sqlV0_9_32_2__webauthn4j.sql
MySQL例(.mysql.sql サフィックス):
V0_9_0__init_lib.mysql.sqlV0_9_21_1__security_event_partition.mysql.sqlV0_9_32_2__webauthn.mysql.sql
ルール:
- バージョン番号は昇順(Flywayが自動検出)
- 説明は英語スネークケース
- PostgreSQL用:
libs/idp-server-database/postgresql/ - MySQL用:
libs/idp-server-database/mysql/(ファイル名は.mysql.sqlで終わること)
✅ 互換性ルール
安全な変更(後方互換あり)
カラム追加(DEFAULT値付き)
-- ✅ 旧バージョンのアプリも動作可能
ALTER TABLE idp_user ADD COLUMN mfa_enabled BOOLEAN DEFAULT false;
テーブル追加
-- ✅ 旧バージョンは新テーブルを使わないので問題なし
CREATE TABLE new_feature (
id UUID PRIMARY KEY,
tenant_id UUID NOT NULL,
...
);
インデックス追加
-- ✅ パフォーマンス改善のみ、アプリケーションに影響なし
CREATE INDEX idx_user_email ON idp_user(email);