CREATE TABLE AS jest uważane za oddzielną instrukcję od normalnego CREATE TABLE i do wersji Postgres 9.5 (patrz wpis w dzienniku zmian) nie obsługuje IF NOT EXISTS
klauzula. (Pamiętaj, aby zapoznać się z odpowiednią wersją instrukcji dla używanej wersji.)
Chociaż nie jest tak elastyczny, CREATE TABLE ... LIKE
składnia może być alternatywą w niektórych sytuacjach; zamiast brać jego strukturę (i zawartość) z SELECT
oświadczenie, kopiuje strukturę innej tabeli lub widoku.
W związku z tym możesz napisać coś takiego (nietestowane); ostatnie wstawienie jest dość niechlujnym sposobem na nicnierobienie, jeśli tabela jest już zapełniona:
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 );
Alternatywnie, jeśli chcesz odrzucić poprzednie dane (np. porzuconą tabelę tymczasową), możesz warunkowo usunąć starą tabelę i bezwarunkowo utworzyć nową:
DROP TABLE IF EXISTS temp_stuff;
CREATE TEMPORARY TABLE temp_stuff AS SELECT * FROM foo NATURAL JOIN bar;