PostgreSQL UNIQUE Constraint

Riepilogo: in questo tutorial, imparerai a conoscere PostgreSQL UNIQUE constraint per assicurarti che i valori memorizzati in una colonna o in un gruppo di colonne siano univoci tra le righe di una tabella.

A volte, si desidera assicurarsi che i valori memorizzati in una colonna o in un gruppo di colonne siano univoci nell’intera tabella, ad esempio indirizzi e-mail o nomi utente.

PostgreSQL fornisce il vincolo UNIQUE che mantiene correttamente l’unicità dei dati.

Quando è presente un vincolo UNIQUE, ogni volta che si inserisce una nuova riga, verifica se il valore è già nella tabella. Rifiuta la modifica e emette un errore se il valore esiste già. Lo stesso processo viene eseguito per l’aggiornamento dei dati esistenti.

Quando si aggiunge un vincolo UNIQUE a una colonna o a un gruppo di colonne, PostgreSQL creerà automaticamente un indice univoco sulla colonna o sul gruppo di colonne.

PostgreSQL UNIQUE constraint example

La seguente istruzione crea una nuova tabella denominata person con un vincolo UNIQUE per la colonna email.

Code language: SQL (Structured Query Language) (sql)

Si noti che il vincolo UNIQUE sopra può essere riscritto come vincolo di tabella come mostrato nella seguente query:

Code language: SQL (Structured Query Language) (sql)

Innanzitutto, inserire una nuova riga nella tabella person utilizzando l’istruzione INSERT :

Code language: SQL (Structured Query Language) (sql)

In secondo luogo, inserire un’altra riga con e-mail duplicate.

Code language: SQL (Structured Query Language) (sql)

PostgreSQL ha emesso un messaggio di errore.

Code language: SQL (Structured Query Language) (sql)

Creazione di un vincolo UNIVOCO su più colonne

PostgreSQL consente di creare un vincolo UNIQUE su un gruppo di colonne utilizzando la seguente sintassi:

Code language: SQL (Structured Query Language) (sql)

La combinazione di valori nella colonna c2 e c3 sarà unica nell’intera tabella. Il valore della colonna c2 o c3 non deve essere univoco.

Aggiunta di un vincolo univoco utilizzando un indice univoco

A volte, è possibile aggiungere un vincolo univoco a una colonna o a un gruppo di colonne esistenti. Diamo un’occhiata al seguente esempio.

Per prima cosa, supponiamo di avere una tabella denominata equipment:

Code language: SQL (Structured Query Language) (sql)

In secondo luogo, creare un indice univoco basato sulla colonna equip_id.

Code language: SQL (Structured Query Language) (sql)

In terzo luogo, aggiungere un vincolo univoco alla tabella equipment utilizzando l’indice equipment_equip_id.

Code language: SQL (Structured Query Language) (sql)

Si noti che l’istruzione ALTER TABLE acquisisce un blocco esclusivo sul tavolo. Se si dispone di transazioni in sospeso, attenderà il completamento di tutte le transazioni prima di modificare la tabella. Pertanto, è necessario controllare la tabella pg_stat_activity per visualizzare le transazioni in sospeso correnti in corso utilizzando la seguente query:

Code language: SQL (Structured Query Language) (sql)

Dovresti guardare il risultato per trovare la colonna statecon il valore idle in transaction. Queste sono le transazioni che sono in attesa di completamento.

In questo tutorial, hai imparato a conoscere i vincoli UNIQUE e come usarli per applicare i valori memorizzati in una colonna o in un gruppo di colonne univoche tra righe all’interno della stessa tabella.

  • Questo tutorial è stato utile ?



+