CREATE TABLE AS est considéré comme une instruction distincte d'une CREATE TABLE normale, et jusqu'à la version 9.5 de Postgres (voir l'entrée du journal des modifications) ne supportait pas un IF NOT EXISTS
clause. (Assurez-vous de consulter la version correcte du manuel pour la version que vous utilisez.)
Bien que moins flexible, la commande CREATE TABLE ... LIKE
la syntaxe peut être une alternative dans certaines situations ; plutôt que de prendre sa structure (et son contenu) à partir d'un SELECT
instruction, il copie la structure d'une autre table ou vue.
Par conséquent, vous pourriez écrire quelque chose comme ceci (non testé); l'insert final est une façon plutôt désordonnée de ne rien faire si le tableau est déjà rempli :
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 );
Alternativement, si vous souhaitez supprimer les données précédentes (par exemple, une table temporaire abandonnée), vous pouvez supprimer conditionnellement l'ancienne table et créer la nouvelle sans condition :
DROP TABLE IF EXISTS temp_stuff;
CREATE TEMPORARY TABLE temp_stuff AS SELECT * FROM foo NATURAL JOIN bar;