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;