PostgreSQL

PostgreSQL Upsert on Conflict

PostgreSQL Upsert on Conflict
L'espressione 'Upsert' è riconosciuta come un'unione in RDBMS. È utile avere un 'Upsert' con PostgreSQL se non si desidera gestire errori di violazione delle restrizioni univoci dovuti a voci ripetute. Quando si esegue un comando UPDATE generico, le modifiche necessarie si verificheranno solo se un record soddisfa gli standard del comando; se non esistono tali dati, allora non succede nulla. Quando aggiungi una nuova riga a una tabella, PostgreSQL aggiornerà la riga se esisteva in precedenza, oppure incorporerà la nuova riga se la riga non esisteva. La parola chiave SQL "Upsert" combina le parole "aggiorna" e "inserisci".” Questo articolo mostra come funziona la funzione 'Upsert' di PostgreSQL e come utilizzare la funzione 'Upsert' per aggiungere o aggiornare informazioni se la riga inserita esiste già nella tabella.

Sintassi

Quella che segue è la sintassi della query 'Upsert' ON CONFLICT.

>> INSERT INTO table_name(column_list) VALUSE (value_list) ON CONFLICT azione target;

Avvia la shell della riga di comando di PostgreSQL

Per iniziare, avvia la shell della riga di comando di PostgreSQL dal menu Applicazione. Collegalo al server richiesto. Inserisci il nome del database su cui vuoi lavorare. Per lavorare su un'altra porta, digita il numero di porta e il nome utente con cui vuoi lavorare. Per continuare con i parametri predefiniti, lascia gli spazi così come sono e premi "Invio" ad ogni opzione. Aggiungi una password per il nome utente selezionato e la shell dei comandi dovrebbe essere pronta per l'uso.

Esempio 1:

Ora possiamo iniziare con "Upsert" in conflitto. Supponiamo di avere una tabella intitolata "persona" in un database selezionato con alcuni campi che mostrano i record di persone diverse. Questi registri mostrano i nomi delle persone, la loro età e le loro città e paesi. La tabella è visualizzata di seguito.

>> SELEZIONA * DA persona;

È importante sapere come può sorgere un errore o un conflitto. Il campo della tabella 'id', che è anche una chiave primaria, contiene valori da 1 a 15. Quando l'utente tenta di inserire alcuni record duplicati nella tabella, si verifica il conflitto.

Proviamo la seguente istruzione INSERT, inserendo i record nella tabella 'person'. Questa query causerà un errore perché il valore '3' del campo 'id' esiste già nella tabella.

>> INSERIRE NELLA persona (id, nome, età, città, paese) VALORI ( '3', 'Habib', '45', 'Chakwal', 'Pakistan');

Esempio 2: Upsert con clausola ON CONFLICT

Utilizzeremo la clausola ON CONFLICT per evitare la query INSERT che causa questo errore a causa dell'inserimento dei record duplicati. Il comando ON CONFLICT presenta due frasi con usi diversi.

Esempio 3: Upsert con clausola DO NOTHING

In questo esempio, esamineremo la clausola DO NOTHING. Questa clausola precisa che nessuna operazione verrà eseguita in caso di errore o conflitto. In altre parole, questa clausola eviterà solo conflitti o errori.

Quindi, proviamo lo stesso comando INSERT che abbiamo usato in precedenza per aggiungere record duplicati alla tabella "persona", con alcune modifiche aggiunte. Abbiamo aggiunto la clausola ON CONFLICT, insieme all'istruzione DO NOTHING in questa clausola. La clausola ON CONFLICT è stata applicata alla colonna "id" univoca. Ciò significa che, quando l'utente tenta di inserire il valore duplicato nella colonna 'id', eviterà il conflitto e non farà nulla. Come puoi vedere nell'immagine qui sotto, non inserirà nemmeno il nuovo record nella tabella, né aggiornerà il record precedente.

>> INSERIRE NELLA persona (id, nome, età, città, paese) VALORI ( '3', 'Habib', '45', 'Chakwal', 'Pakistan') SUL CONFLITTO (id) NON FARE NULLA;

Controlliamo di nuovo la tabella "persona" per motivi di autenticità. Come puoi vedere nell'immagine qui sotto, non sono state apportate modifiche alla tabella.

>> SELEZIONA * DA persona;

Esempio 2: Upsert con clausola DO

Successivamente, esamineremo le clausole ON CONFLICT e DO. Come indica il nome, la clausola ___ eseguirà un'azione in caso di errore o conflitto quando un valore duplicato viene inserito in una tabella. Useremo lo stesso comando di inserimento che abbiamo usato in precedenza per inserire un record duplicato nella tabella 'persona', con una piccola modifica. Abbiamo aggiunto la clausola ON CONFLICT con la clausola DO al suo interno. Quando l'utente tenta di inserire il valore non univoco nella colonna 'id', eseguirà un'azione per evitare il conflitto. Abbiamo utilizzato la clausola UPDATE dopo la clausola DO, che indica un aggiornamento dei dati nella tabella 'person'. La parola chiave SET viene utilizzata per impostare il valore della colonna "nome" sul nuovo valore, "Habib", utilizzando la parola chiave EXCLUSED dove "id" è "3" all'ora corrente. Se esegui la seguente query, vedrai che la query è stata eseguita.

>> INSERIRE NELLA persona (id, nome, età, città, paese) VALORI ( '3', 'Habib', '45', 'Chakwal', 'Pakistan') IN CONFLITTO (id) AGGIORNA SET nome = ESCLUSO.nome;

I record della tabella "persona" devono essere recuperati per vedere le modifiche alla query precedente. Se esegui la seguente query nella shell della riga di comando, dovresti vedere l'output successivo.

>> SELEZIONA * DA persona;

Come puoi vedere dall'output qui sotto, il nome della persona è stato aggiornato a "Habib", dove "id" è "3".'

Puoi anche aggiornare i record in più di una colonna utilizzando la parola chiave EXCLUDED nella clausola ON CONFLICT della query INSERT, come mostrato di seguito.

>> INSERIRE NELLA persona (id, nome, età, città, paese) VALORI ( '3', 'Habib', '45', 'Chakwal', 'Pakistan') IN CONFLITTO (id) AGGIORNA SET nome = ESCLUSO.nome, città = ESCLUSO.città;

Le modifiche sono mostrate di seguito.

>> SELEZIONA * DA persona;

Conclusione

Questo articolo ti ha mostrato come usare PostgreSQL 'Upsert' con la clausola ON CONFLICT, insieme alle azioni DO e DO NOTHING. Dopo aver letto questo articolo, speriamo che trovi più facile capire come usare PostgreSQL 'Upsert'.'

Tutorial OpenTTD
OpenTTD è uno dei giochi di simulazione aziendale più popolari in circolazione. In questo gioco, devi creare una meravigliosa attività di trasporto. T...
SuperTuxKart per Linux
SuperTuxKart è un fantastico titolo progettato per offrirti l'esperienza di Mario Kart gratuitamente sul tuo sistema Linux. È piuttosto impegnativo e ...
Tutorial Battaglia per Wesnoth
The Battle for Wesnoth è uno dei giochi di strategia open source più popolari a cui puoi giocare in questo momento. Non solo questo gioco è in svilupp...