sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL:Skapa tabell om det inte finns AS

CREATE TABLE AS anses vara en separat sats från en vanlig CREATE TABLE, och tills Postgres version 9.5 (se ändringsloggposten) stödde inte en IF NOT EXISTS klausul. (Se till att titta på rätt version av manualen för den version du använder.)

Även om det inte är lika flexibelt, är CREATE TABLE ... LIKE syntax kan vara ett alternativ i vissa situationer; istället för att ta dess struktur (och innehåll) från en SELECT uttalande, kopierar den strukturen för en annan tabell eller vy.

Följaktligen skulle du kunna skriva något sånt här (otestat); den sista infogningen är ett ganska rörigt sätt att inte göra någonting om tabellen redan är fylld:

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 );

Alternativt, om du vill kassera tidigare data (t.ex. en övergiven temporär tabell), kan du villkorligt släppa den gamla tabellen och ovillkorligen skapa den nya:

DROP TABLE IF EXISTS temp_stuff;

CREATE TEMPORARY TABLE temp_stuff AS SELECT * FROM foo NATURAL JOIN bar;


  1. Guide till designdatabas för RBAC i MySQL

  2. Hur räknar man alla rader när man använder SELECT med LIMIT i MySQL-frågan?

  3. Databasdesign med Vertabelo

  4. Hur man förhindrar anslutningstidsgränser för stora MySQL-importer