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

Come creare una tabella solo se non esiste in PostgreSQL

In PostgreSQL, puoi usare IF NOT EXISTS clausola del CREATE TABLE istruzione per verificare se esiste già una tabella con lo stesso nome nel database prima di crearla.

La tabella verrà creata solo se non esiste un'altra tabella con lo stesso nome. Se esiste già una tabella con quel nome, verrà emesso un "avviso" anziché un errore.

Esempio

Ecco un esempio da dimostrare:

CREATE TABLE IF NOT EXISTS t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Qui, t1 è il nome della tabella e tutto ciò che è tra parentesi è la definizione della tabella (es. colonne, ecc.).

In tal caso, la tabella verrà creata solo se non ce n'è già una chiamata t1 .

Verifica che la tabella ora esista

Possiamo interrogare le pg_tables visualizza per verificare se la tabella ora esiste:

SELECT EXISTS (
    SELECT FROM 
        pg_tables
    WHERE 
        schemaname = 'public' AND 
        tablename  = 't1'
    );

Risultato:

True

In questo caso ottengo True , il che significa che la tabella esiste e che ho accesso ad essa.

A seconda della tua configurazione, potresti ricevere t /f invece di True /False .

Prova a creare di nuovo la tabella

Se proviamo a creare nuovamente quella tabella:

CREATE TABLE IF NOT EXISTS t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Non riceviamo un errore, riceviamo un avviso:

NOTICE:  relation "t1" already exists, skipping

Come previsto, l'avviso ci dice che la tabella esiste già.

Senza il IF NOT EXISTS Clausola

Ecco cosa succede quando non utilizziamo il IF NOT EXISTS clausola quando si tenta di creare una tabella già esistente:

CREATE TABLE t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Questa volta riceviamo un errore:

ERROR:  relation "t1" already exists

Nota che il IF NOT EXISTS La clausola non controlla la struttura/definizione della tabella. Verifica semplicemente che non ci siano tabelle esistenti con lo stesso nome che stiamo cercando di assegnare alla tabella che stiamo creando.

In altre parole, solo perché esiste già una tabella con quel nome, non significa che abbia la definizione corretta.

Il IF NOT EXISTS la funzionalità è stata aggiunta in PostgreSQL 9.1 (note di rilascio).