CREATE TABLE ASは、通常のCREATE TABLEとは別のステートメントと見なされ、Postgresバージョン9.5まで (変更ログエントリを参照)IF NOT EXISTS
をサポートしていませんでした 句。 (使用しているバージョンのマニュアルの正しいバージョンを必ず確認してください。)
それほど柔軟ではありませんが、CREATE TABLE ... LIKE
状況によっては、構文が代替になる場合があります。 SELECT
からその構造(およびコンテンツ)を取得するのではなく ステートメント、それは別のテーブルまたはビューの構造をコピーします。
したがって、このようなものを書くことができます(テストされていません)。最後の挿入は、テーブルにすでにデータが入力されている場合、何もしないというかなり厄介な方法です。
CREATE OR REPLACE VIEW source_data AS SELECT * FROM foo NATURAL JOIN bar;
CREATE TABLE IF NOT EXISTS snapshot LIKE source_data;
INSERT INTO snapshot
SELECT * FROM source_data
WHERE NOT EXISTS ( SELECT * FROM snapshot );
または、以前のデータ(たとえば、放棄された一時テーブル)を破棄する場合は、古いテーブルを条件付きで削除し、新しいテーブルを無条件に作成できます。
DROP TABLE IF EXISTS temp_stuff;
CREATE TEMPORARY TABLE temp_stuff AS SELECT * FROM foo NATURAL JOIN bar;