なんでexplain drop tableできないんだよ!!

タイトルで書きたいこと終わった…

=> explain drop table s;
ERROR:  syntax error at or near "drop"
LINE 1: explain drop table s;
                ^
Time: 14.038 ms

なんでこんなことをしたいかと言うと、バッチSQLを書いたときに SQLシンタックスとテーブル参照だけチェックしたかったから。 explain付けて流せばいいじゃん!と思ったんだけど、ダメだった……。

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

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

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

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

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

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

drop table some_table cascade;

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

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