状況
検証環境で作った作業用テーブル tmp_import を消す作業。作業者は「検証なので消します」と言っている。
実行前に止めるべき点は?
app_prod=> \conninfoYou are connected to database "app_prod" as user "admin" on host "db-prd-01".app_prod=> DROP TABLE tmp_import;正答
- DROP TABLE IF EXISTS にしないと、テーブルが無いときエラーになる
- 依存するビューがあると失敗するので CASCADE を付けるべき
- 接続先が本番(app_prod / db-prd-01)。検証のつもりで本番を消そうとしている
- admin ユーザーでの DROP は監査ログに残らないので、別ユーザーで行うべき
解説
psql のプロンプトは接続中の DB 名を表示し、\conninfo の出力もホストが db-prd-01、DB が app_prod であることを示している。検証環境で作業しているつもりで、本番の tmp_import を消そうとしている。本番に同名の表があり使われていれば、DROP は即座に確定し、バックアップから戻すまで障害になる。IF EXISTS や CASCADE は文の書き方の話で、むしろ CASCADE は消す範囲を広げる。まず接続先を正す。
この問題を含む 危険察知 のテストを制限時間つきで解く
危険察知クイズへ