In PostgreSQL kunt u de IF NOT EXISTS
. gebruiken clausule van de CREATE TABLE
instructie om te controleren of er al een tabel met dezelfde naam in de database bestaat voordat u deze maakt.
De tabel wordt alleen gemaakt als er geen andere tabel met dezelfde naam bestaat. Als er al een tabel met die naam bestaat, wordt er een "notificatie" gegeven in plaats van een foutmelding.
Voorbeeld
Hier is een voorbeeld om te demonstreren:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
Hier, t1
is de tabelnaam en alles tussen de haakjes is de tabeldefinitie (d.w.z. kolommen, enz.).
In dat geval wordt de tabel alleen gemaakt als er nog geen is met de naam t1
.
Controleer of de tabel nu bestaat
We kunnen de pg_tables
. opvragen bekijken om te controleren of de tabel nu bestaat:
SELECT EXISTS (
SELECT FROM
pg_tables
WHERE
schemaname = 'public' AND
tablename = 't1'
);
Resultaat:
True
In dit geval krijg ik True
, wat betekent dat de tabel bestaat en dat ik er toegang toe heb.
Afhankelijk van uw configuratie krijgt u mogelijk t
/f
in plaats van True
/False
.
Probeer de tabel opnieuw te maken
Als we proberen die tabel opnieuw te maken:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
We krijgen geen foutmelding, we krijgen een melding:
NOTICE: relation "t1" already exists, skipping
Zoals verwacht, vertelt de melding ons dat de tafel al bestaat.
Zonder de IF NOT EXISTS
Clausule
Dit is wat er gebeurt als we de IF NOT EXISTS
niet gebruiken clausule bij het maken van een tabel die al bestaat:
CREATE TABLE t1 (
c1 INT,
c2 VARCHAR(10)
);
Deze keer krijgen we een foutmelding:
ERROR: relation "t1" already exists
Merk op dat de IF NOT EXISTS
clausule controleert de tabelstructuur/definitie niet. Het controleert eenvoudig of er geen bestaande tabel is met dezelfde naam die we proberen te geven aan de tabel die we maken.
Met andere woorden, alleen omdat er al een tabel met die naam bestaat, betekent dit niet dat deze de juiste definitie heeft.
De IF NOT EXISTS
functionaliteit is toegevoegd in PostgreSQL 9.1 (release-opmerkingen).