CREATE TABLE AS se považuje za samostatný příkaz od běžného příkazu CREATE TABLE a do verze Postgres 9.5 (viz záznam protokolu změn) nepodporoval IF NOT EXISTS
doložka. (Nezapomeňte se podívat na správnou verzi příručky pro verzi, kterou používáte.)
Ačkoli to není tak flexibilní, CREATE TABLE ... LIKE
syntaxe může být v některých situacích alternativou; spíše než přebírat jeho strukturu (a obsah) z SELECT
zkopíruje strukturu jiné tabulky nebo pohledu.
V důsledku toho byste mohli napsat něco takového (netestováno); poslední vložení je poněkud chaotický způsob, jak nedělat nic, pokud je tabulka již naplněna:
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 );
Případně, pokud chcete zrušit předchozí data (např. opuštěnou dočasnou tabulku), můžete podmíněně zrušit starou tabulku a bezpodmínečně vytvořit novou:
DROP TABLE IF EXISTS temp_stuff;
CREATE TEMPORARY TABLE temp_stuff AS SELECT * FROM foo NATURAL JOIN bar;