Migration
マイグレーション
データベースについては空のカラムの追加まで自動で行われます 。それ以外の変更については、手動での対応が必要です。基本的には、リリースノートなどを参照し適切にマイグレーションを行う必要があります。
現状、2つのパターンがあり、
クエリ投入と、
全データリロードになります。
クエリ投入
v0.3
系から v0.4
系のアップデートに必要です。
この作業は、追加された列に対して更新を行う必要があるパターンです。
https://github.com/totegamma/concurrent/releases/tag/v0.4.0
リリースノートにある作業をdockerで実施する場合下記のようになります。
1. 前処理
1
2
3
4
5
6
7
8
|
$ git fetch
$ git checkout v0.4.2 # 最新の差分を取得(自前ブランチの場合はmerge)
$ cd docs
$ vim compose.yml # dockerで取得するタグを変更 ※:latestの場合は必要なし
$ docker compose pull # イメージを取得
$ docker compose down # アクセス停止
$ docker compose up -d api # 自動マイグレーションでカラムを追加(dbも立ち上がる)
$ docker compose exec db psql -Upostgres concurrent # DBのSQLコンソールへログイン
|
2. クエリ投入
1
2
3
|
update associations set variant = payload->'body'->>'imageUrl' where schema = 'https://raw.githubusercontent.com/totegamma/concurrent-schemas/master/associations/emoji/0.0.1.json';
# => UPDATE 115
exit
|
3. 後処理
1
|
$ docker compose up -d # アクセス再開
|
全データリロード
v0.2
系から v0.3
系のアップデートに必要です。
この作業は、SQLクエリによる更新をせず、全てのデータの再ロードの形で対処するパターンです。
1. 前処理
1
2
3
4
5
6
7
|
$ git fetch
$ git checkout v0.3.7 # 最新の差分を取得(自前ブランチの場合はmerge)
$ cd docs
$ vim compose.yml # dockerで取得するタグを変更 ※:latestの場合は必要なし
$ docker compose pull # イメージを取得
$ docker compose down # アクセス停止
$ docker compose up -d api db redis # ダンプに必要なサービス立ち上げ
|
2. ダンプ
1
2
3
|
$ docker compose exec api ccadmin -H db -r redis:6379 dump_legacy entities all > entities.json
$ docker compose exec api ccadmin -H db -r redis:6379 dump_legacy stream all > streams.json
$ docker compose down # 一旦終了
|
3. 過去データ退避
1
|
$ sudo mv _composeData/db _composeData/db_backup # ロールバック可能なようにバックアップ
|
4. ロード
1
2
3
|
$ docker compose up -d api db redis
$ docker compose exec -T api ccadmin -H db -r redis:6379 load entities < entities.json
$ docker compose exec -T api ccadmin -H db -r redis:6379 load streams < streams.json
|
5. 後処理
1
|
$ docker compose up -d # アクセス再開
|
6. リカバリ
明らかに失敗した場合、下記の手順で復旧できる。
1
2
3
4
|
$ docker compose down # アクセス停止
$ sudo rm _composeData/db # 移行に失敗した永続層のデータを削除
$ sudo mv _composeData/db_backup _composeData/db # 以前のデータを復旧
$ docker compose up -d # アクセス再開
|