Parent: #612
背景
現在の compose.yml は postgres:17 と ./db-data:/var/lib/postgresql/data を使用している。PostgreSQL 18ではDocker公式イメージのデータ配置が変わるため、単純なtag差し替えでは既存クラスタを起動できない。既存のdump/restore scriptも、途中のSQLエラーを確実に検出する移行手順としては不足している。
スコープ
- pgvector同梱のPostgreSQL 18 imageを固定version(可能ならdigest)で採用する
- PG18向けにvolume mountを
/var/lib/postgresql へ変更する
- PG17の既存データを保持したまま、新規PG18 volumeへdump/restoreする移行script/runbookを用意する
- custom-format dump、strict restore、version・件数・主要制約の検証、rollback手順を実装する
- DB healthcheckと、アプリ起動前のreadinessを整備する
- 実PostgreSQL 18環境でmigration smoke testを追加する
非スコープ
- CCIP vector tableの追加
- LanceDBからのCCIPデータ移行
- crop機能
受け入れ条件
主な参照
compose.yml:3
compose.yml:9
compose.production.yml:20
apps/server/scripts/dump-db.ts:25
apps/server/scripts/restore-db.ts:79
評価反映(2026-07-18)
方向性は妥当。ただし、確認済みdumpの位置付け、最終cutover入力の鮮度、rollback可能な境界を明示しないまま本番移行してはならない。以下を追加の決定事項・受け入れ条件とする。
追加決定事項
backup-2026-07-18T16-07-36+09-00.sql は、作成後にPG17への書き込みが一切なかったと証明できない限り、restoreリハーサル用入力として扱う
- 本番cutoverでは、アプリ・worker・管理scriptを停止してPG17をwrite-freezeし、その後にfresh final dumpを取得する
- write-freeze開始、dump開始・終了、restore開始・終了、migration終了、検証終了、cutover時刻を記録する
- PG18 + pgvector imageは可変tagだけで参照せず、採用する正確なtagとimmutable digest(
sha256:...)をcomposeとrunbookへ記録する
- PG18が新規writeを受け付けた時点をrollback boundaryとする。それ以降に旧PG17へ戻す場合は、write-freezeまたは逆方向同期なしではデータを保持できないことをrunbookへ明記する
Restore要件
- 現在のplain SQL dumpを使うリハーサルでは、空の新規PG18 clusterに対して
psql -X -v ON_ERROR_STOP=1 を使用し、SQLまたはsubprocessの非zero終了を必ず移行失敗として伝播する
- 将来のfinal backupはTTYなしのcustom format(
pg_dump -Fc)で取得し、pg_restore --exit-on-error を使用する
- 中途半端にrestoreされたvolumeへ上書き再実行せず、新規または明示的に再初期化した移行先へ再実行する
- restoreリハーサルでは、dump容量、必要空き容量、dump・restore・migration・
ANALYZEの各所要時間を記録し、想定停止時間とgo/no-go期限を決める
- restoreとschema migration完了後、性能確認やcutover前に
ANALYZE を実行する
追加受け入れ条件
Parent: #612
背景
現在の
compose.ymlはpostgres:17と./db-data:/var/lib/postgresql/dataを使用している。PostgreSQL 18ではDocker公式イメージのデータ配置が変わるため、単純なtag差し替えでは既存クラスタを起動できない。既存のdump/restore scriptも、途中のSQLエラーを確実に検出する移行手順としては不足している。スコープ
/var/lib/postgresqlへ変更する非スコープ
受け入れ条件
SELECT version()でPostgreSQL 18、pg_available_extensionsでvector利用可能を確認できる主な参照
compose.yml:3compose.yml:9compose.production.yml:20apps/server/scripts/dump-db.ts:25apps/server/scripts/restore-db.ts:79評価反映(2026-07-18)
方向性は妥当。ただし、確認済みdumpの位置付け、最終cutover入力の鮮度、rollback可能な境界を明示しないまま本番移行してはならない。以下を追加の決定事項・受け入れ条件とする。
追加決定事項
backup-2026-07-18T16-07-36+09-00.sqlは、作成後にPG17への書き込みが一切なかったと証明できない限り、restoreリハーサル用入力として扱うsha256:...)をcomposeとrunbookへ記録するRestore要件
psql -X -v ON_ERROR_STOP=1を使用し、SQLまたはsubprocessの非zero終了を必ず移行失敗として伝播するpg_dump -Fc)で取得し、pg_restore --exit-on-errorを使用するANALYZEの各所要時間を記録し、想定停止時間とgo/no-go期限を決めるANALYZEを実行する追加受け入れ条件
SELECT version()、pg_extension.extversionを記録し、PostgreSQL 18と期待するvector extension versionを確認できるANALYZE完了後にread/write smoke testとアプリreadiness確認が成功する