危険察知4 択難易度 応用

状況

稼働中のサービスで列名を変える作業。メンテナンス画面は出さない予定だと作業者は言っている。

ダブルチェッカーとして最初に止めるべき点は?

1. 新バージョンのアプリ(full_name 列を参照)をビルドする2. ALTER TABLE users RENAME COLUMN name TO full_name;3. 新バージョンをデプロイする4. 画面で氏名が表示されることを確認する

正答

  1. ビルドに時間がかかるので、1 は 2 の後に回して作業を短くすべき
  2. 2〜3 の間、稼働中の旧アプリが name 列を参照してエラーになり続ける
  3. RENAME COLUMN は ALTER TABLE では使えないので CHANGE を使うべき
  4. 4 の確認は画面ではなく SQL の SELECT で行うべき

解説

ALTER TABLE が終わった瞬間から新バージョンのデプロイが終わるまで、稼働中の旧アプリは存在しない name 列を参照し、氏名を使う画面や API がエラーになる。メンテナンス画面で止めるか、新列を追加→両方に書く→読み先を切替→旧列を削除、のように互換を保つ段階に分ける。RENAME COLUMN は MySQL 8.0・PostgreSQL・SQLite 3.25 以降で使える構文で誤りではない。ビルドの順序は作業時間の話で、エラーが出ることに比べれば小さい。

参考: www.sqlite.org

runbookmigrationmaintenance

この問題を含む 危険察知 のテストを制限時間つきで解く

危険察知クイズへ