状況
本番 DB のマイグレーションを含む PR をレビューしている。本番のアプリは複数台あり、1 台ずつ新しい版に入れ替える(ローリングデプロイ)。追加されたマイグレーションは次の 1 行。
最も優先して伝えるべき指摘は?
ALTER TABLE users RENAME COLUMN name TO full_name;正答
- 入れ替え中は旧版が name を参照し続け、エラーになります
- RENAME COLUMN は DB によって書き方が違うので避けましょう
- 列名は full_name より display_name のほうが一般的です
- ALTER TABLE はトランザクションの外で実行すべきです
解説
ローリングデプロイでは、しばらく旧版と新版のアプリが同時に動く。先に列名を変えると、旧版のアプリは存在しない name を参照してエラーになり、利用者に障害が出る。新しい列を追加して両方に書き込み、全台が新版になってから古い列を消すなど、段階的に移行するのが一般的。DB ごとの構文差や命名の好み、トランザクションの扱いは、この障害に比べれば二次的な論点である。
この問題を含む 実務シチュエーション のテストを制限時間つきで解く
実務シチュエーションクイズへ