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