CREATE TABLE AS wordt beschouwd als een afzonderlijk statement van een normale CREATE TABLE, en tot Postgres versie 9.5 (zie changelog entry) ondersteunde geen IF NOT EXISTS
clausule. (Let op de juiste versie van de handleiding voor de versie die u gebruikt.)
Hoewel niet zo flexibel, is de CREATE TABLE ... LIKE
syntaxis kan in sommige situaties een alternatief zijn; in plaats van de structuur (en inhoud) te nemen van een SELECT
statement, kopieert het de structuur van een andere tabel of weergave.
Bijgevolg zou je zoiets als dit kunnen schrijven (niet getest); de laatste invoeging is een nogal rommelige manier om niets te doen als de tabel al gevuld is:
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 );
Als alternatief, als u eerdere gegevens wilt verwijderen (bijvoorbeeld een verlaten tijdelijke tabel), kunt u de oude tabel voorwaardelijk verwijderen en de nieuwe onvoorwaardelijk maken:
DROP TABLE IF EXISTS temp_stuff;
CREATE TEMPORARY TABLE temp_stuff AS SELECT * FROM foo NATURAL JOIN bar;