状況
稼働中のサービスで列名を変える作業。メンテナンス画面は出さない予定だと作業者は言っている。
ダブルチェッカーとして最初に止めるべき点は?
1. 新バージョンのアプリ(full_name 列を参照)をビルドする2. ALTER TABLE users RENAME COLUMN name TO full_name;3. 新バージョンをデプロイする4. 画面で氏名が表示されることを確認する正答
- ビルドに時間がかかるので、1 は 2 の後に回して作業を短くすべき
- 2〜3 の間、稼働中の旧アプリが name 列を参照してエラーになり続ける
- RENAME COLUMN は ALTER TABLE では使えないので CHANGE を使うべき
- 4 の確認は画面ではなく SQL の SELECT で行うべき
解説
ALTER TABLE が終わった瞬間から新バージョンのデプロイが終わるまで、稼働中の旧アプリは存在しない name 列を参照し、氏名を使う画面や API がエラーになる。メンテナンス画面で止めるか、新列を追加→両方に書く→読み先を切替→旧列を削除、のように互換を保つ段階に分ける。RENAME COLUMN は MySQL 8.0・PostgreSQL・SQLite 3.25 以降で使える構文で誤りではない。ビルドの順序は作業時間の話で、エラーが出ることに比べれば小さい。
参考: www.sqlite.org
この問題を含む 危険察知 のテストを制限時間つきで解く
危険察知クイズへ