DROP TABLE ... CASCADEでビューもろともテーブルを消す

Redshift使ってたらビューは普通に使う。

例えばちょっと試しに新しいデータを作るときに本番のデータを参照するビューを張って、 ビューで計算するとか。

あるいは本番環境の巨大なテーブルを開発環境からビューで参照して、 データの重複をなくしつつ、書き込みのあるテーブルは開発環境にも作るとか。

ただそのシチュエーションで困るのがバッチで本番テーブルを drop & create しているとき。 Redshiftではビューが張られているテーブルをdropするとエラーになるので、 開発環境から調査用のビューを張るだけでバッチを落とせてしまう。

本当はこういうときはビューを無視してテーブルだけdropしたいのだが、 残念ながらそういうことはできない。代わりに、drop tableにcascadeオプションを 付けるとビューもろともdropできるので、これを使う。こんな感じね。

drop table some_table cascade;

cascade オプションはビューを張り直さないといけないというひどい問題があるが、 本番バッチが止まるよりは開発環境が壊れるほうがマシだ。

ちなみに、トランザクションの中で drop → create → insert → create view まで やることもできるので、本番にビューがある場合はそのビューも作り直せばいい。 (ので、これはあまり問題にならない。面倒だけど)