I PostgreSQL kan du bruge IF NOT EXISTS
klausul i CREATE TABLE
sætning for at kontrollere, om en tabel med samme navn allerede findes i databasen, før den oprettes.
Tabellen oprettes kun, hvis der ikke findes en anden tabel med samme navn. Hvis der allerede findes en tabel med det navn, vil der blive afgivet en "meddelelse" i stedet for en fejl.
Eksempel
Her er et eksempel til demonstration:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
Her t1
er tabelnavnet, og alt mellem parenteserne er tabeldefinitionen (dvs. kolonner osv.).
I så fald vil tabellen kun blive oprettet, hvis der ikke allerede er en kaldet t1
.
Tjek, at tabellen nu eksisterer
Vi kan forespørge på pg_tables
se for at kontrollere, om tabellen nu eksisterer:
SELECT EXISTS (
SELECT FROM
pg_tables
WHERE
schemaname = 'public' AND
tablename = 't1'
);
Resultat:
True
I dette tilfælde får jeg True
, hvilket betyder, at tabellen eksisterer, og at jeg har adgang til den.
Afhængigt af din konfiguration kan du få t
/f
i stedet for True
/False
.
Prøv at oprette tabellen igen
Hvis vi forsøger at oprette den tabel igen:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
Vi får ikke en fejl, vi får en meddelelse:
NOTICE: relation "t1" already exists, skipping
Som forventet fortæller meddelelsen os, at tabellen allerede eksisterer.
Uden HVIS IKKE FINDER
Klausul
Her er, hvad der sker, når vi ikke bruger
CREATE TABLE t1 (
c1 INT,
c2 VARCHAR(10)
);
Denne gang får vi en fejl:
ERROR: relation "t1" already exists
Bemærk, at HVIS IKKE FINDER
klausul kontrollerer ikke tabelstrukturen/definitionen. Det kontrollerer simpelthen, at der ikke er nogen eksisterende tabel med det samme navn, som vi forsøger at give til den tabel, vi opretter.
Med andre ord, bare fordi en tabel med det navn allerede eksisterer, betyder det ikke, at den har den korrekte definition.