読者です 読者をやめる 読者になる 読者になる

なんで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 まで やることもできるので、本番にビューがある場合はそのビューも作り直せばいい。 (ので、これはあまり問題にならない。面倒だけど)

投稿テスト

会社のブログへ記事を投稿するためにアカウントを作ってみました。

広告を非表示にする