sql >> Database >  >> RDS >> PostgreSQL

Alleen een tabel maken als deze niet in PostgreSQL bestaat

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


  1. Hoe sp_describe_first_result_set werkt in SQL Server

  2. MySQL-triggers gebruiken

  3. Produceer DISTINCT-waarden in STRING_AGG

  4. Hoe kan ik rijen selecteren die de tijdstempel van de huidige dag hebben?