危険察知4 択難易度 標準

状況

検証環境で作った作業用テーブル 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;

正答

  1. DROP TABLE IF EXISTS にしないと、テーブルが無いときエラーになる
  2. 依存するビューがあると失敗するので CASCADE を付けるべき
  3. 接続先が本番(app_prod / db-prd-01)。検証のつもりで本番を消そうとしている
  4. admin ユーザーでの DROP は監査ログに残らないので、別ユーザーで行うべき

解説

psql のプロンプトは接続中の DB 名を表示し、\conninfo の出力もホストが db-prd-01、DB が app_prod であることを示している。検証環境で作業しているつもりで、本番の tmp_import を消そうとしている。本番に同名の表があり使われていれば、DROP は即座に確定し、バックアップから戻すまで障害になる。IF EXISTS や CASCADE は文の書き方の話で、むしろ CASCADE は消す範囲を広げる。まず接続先を正す。

参考: www.postgresql.org

sqldropconnection

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

危険察知クイズへ