SQLだけでテーブル内容の一致判定をする
同じ定義のテーブルが2つあり、 その全行が同じかどうか(違う行がないか)を確かめたいときの方法。
select count(*) from ( (select * from x except select * from y) union all (select * from x except select * from y) )
結果が 0 なら内容は同じです。1 以上なら何かしら異なる。
ちなみに遅いです。あくまでも行数が少ないとき向け(100万行くらいまでか)。 高速にしたいならテーブルごとにユニークキーを考えてSQL書くしかないですね。
Redshiftはビューの参照先テーブルをrenameすると追跡する
またタイトルだけで言いたいこと終わった…
=> create table t (x int); CREATE TABLE => insert into t values (777); INSERT 0 1 => create view v as select * from t; CREATE VIEW => alter table t rename to t2; ALTER TABLE => select * from v; x ----- 777 (1 row)
この仕様、便利なようで超不便……。 drop - create で作り直す方法とめっちゃ相性悪い。