sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL:tabel maken als deze niet bestaat AS

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;


  1. Patronen matchen:meer plezier toen ik een kind was

  2. Nieuwe data voor gratis certificeringsexamens op Oracle Cloud en Autonomous Database

  3. T-SQL datetime afgerond op de dichtstbijzijnde minuut en de dichtstbijzijnde uren met gebruik van functies

  4. De beste manier om meerdere rijen in te voegen in Oracle?