sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man skapar en tabell endast om den inte finns i PostgreSQL

I PostgreSQL kan du använda OM INTE FINNS satsen i CREATE TABLE för att kontrollera om en tabell med samma namn redan finns i databasen innan den skapas.

Tabellen kommer bara att skapas om det inte finns någon annan tabell med samma namn. Om en tabell redan finns med det namnet kommer ett "meddelande" att utfärdas istället för ett fel.

Exempel

Här är ett exempel att visa:

CREATE TABLE IF NOT EXISTS t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Här, t1 är tabellnamnet, och allt mellan parenteserna är tabelldefinitionen (d.v.s. kolumner, etc).

I så fall kommer tabellen bara att skapas om det inte redan finns en som heter t1 .

Kontrollera att tabellen nu finns

Vi kan fråga pg_tables visa för att se om tabellen nu finns:

SELECT EXISTS (
    SELECT FROM 
        pg_tables
    WHERE 
        schemaname = 'public' AND 
        tablename  = 't1'
    );

Resultat:

True

I det här fallet får jag True , vilket betyder att tabellen finns och att jag har tillgång till den.

Beroende på din konfiguration kan du få t /f istället för True /False .

Försök att skapa tabellen igen

Om vi ​​försöker skapa den tabellen igen:

CREATE TABLE IF NOT EXISTS t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Vi får inget fel, vi får ett meddelande:

NOTICE:  relation "t1" already exists, skipping

Som väntat säger meddelandet oss att tabellen redan finns.

Utan OM INTE FINNS Klausul

Det här är vad som händer när vi inte använder OM INTE FINNS klausul när du försöker skapa en tabell som redan finns:

CREATE TABLE t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Den här gången får vi ett felmeddelande:

ERROR:  relation "t1" already exists

Observera att OM INTE FINNS klausul kontrollerar inte tabellstrukturen/definitionen. Den kontrollerar helt enkelt att det inte finns någon befintlig tabell med samma namn som vi försöker ge till tabellen som vi skapar.

Med andra ord, bara för att en tabell med det namnet redan finns, betyder det inte att den har rätt definition.

OM INTE FINNS funktionalitet lades till i PostgreSQL 9.1 (release notes).


  1. Django Migrations:A Primer

  2. Hur man formaterar siffror i vetenskaplig notation i Oracle

  3. MySQL-prestanda:MyISAM vs InnoDB

  4. Hur man får den sista dagen i månaden i MySQL