sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan opretter du kun en tabel, hvis den ikke findes i PostgreSQL

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 HVIS IKKE FINDER klausul, når du forsøger at oprette en tabel, der allerede eksisterer:

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.

HVIS IKKE FINDER funktionalitet blev tilføjet i PostgreSQL 9.1 (udgivelsesbemærkninger).


  1. Skriver du valgfrie parametre inden for lagrede procedurer i MySQL?

  2. 12c Adaptive planer

  3. SMALLDATETIMEFROMPARTS() Eksempler i SQL Server (T-SQL)

  4. Hvordan dropper man en tabel, hvis den eksisterer?