CREATE TABLE AS wird als separate Anweisung von einem normalen CREATE TABLE betrachtet und bis Postgres-Version 9.5 (siehe Changelog-Eintrag) unterstützte kein IF NOT EXISTS
Klausel. (Sehen Sie sich unbedingt die richtige Version des Handbuchs für die von Ihnen verwendete Version an.)
Obwohl nicht ganz so flexibel, ist CREATE TABLE ... LIKE
Syntax könnte in manchen Situationen eine Alternative sein; anstatt seine Struktur (und seinen Inhalt) von einem SELECT
zu übernehmen -Anweisung, kopiert sie die Struktur einer anderen Tabelle oder Ansicht.
Folglich könnten Sie so etwas schreiben (ungetestet); die letzte Einfügung ist eine ziemlich chaotische Art, nichts zu tun, wenn die Tabelle bereits gefüllt ist:
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 );
Alternativ können Sie, wenn Sie frühere Daten (z. B. eine aufgegebene temporäre Tabelle) verwerfen möchten, die alte Tabelle bedingt löschen und die neue bedingungslos erstellen:
DROP TABLE IF EXISTS temp_stuff;
CREATE TEMPORARY TABLE temp_stuff AS SELECT * FROM foo NATURAL JOIN bar;