Postgresql UpSert in conflitto

Postgresql UpSert in conflitto
L'espressione di "upsert" è riconosciuta come una fusione in RDBMS. Un "upsert" è utile avere con PostgreSQL se non si desidera gestire errori di violazione di restrizione unici dovuti a voci ripetute. Quando si esegue un comando di aggiornamento generico, si verificheranno le regolazioni necessarie solo se un record si adatta agli standard di comando; Se non esistono tali dati, allora non succede nulla. Quando si aggiunge una nuova riga a una tabella, PostgreSQL aggiornerà la riga se esisteva in precedenza, oppure incorporerà la nuova riga se la riga non esistesse. La parola chiave SQL "UpSert" combina le parole "Aggiornamento" e "Inserisci."Questo articolo mostra come funziona la funzione PostgreSQL" UpSert ", nonché come utilizzare la funzione" UpSert "per aggiungere o aggiornare le informazioni se la riga inserita esiste già nella tabella.

Sintassi

Quella che segue è la sintassi del "upsert" sulla query di conflitto.

>> Inserisci in table_name (column_list) ValUse (value_list) sull'azione target di conflitto;

Avvia PostgreSQL Shell della riga di comando

Per iniziare, avviare la shell di comando postgresql dal menu dell'applicazione. Collegalo al server richiesto. Immettere il nome del database su cui si desidera lavorare. Per lavorare su un'altra porta, digita il numero di porta e il nome utente con cui si desidera lavorare. Per continuare con i parametri predefiniti, lasciare gli spazi così com'è e premere 'Enter' ad ogni opzione. Aggiungi una password per il nome utente selezionato e il tuo guscio di comando dovrebbe essere pronto 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 record di persone diverse. Questi record mostrano i nomi delle persone, delle loro età e delle loro città e paesi. La tabella viene visualizzata di seguito.

>> seleziona * dalla persona;

È importante sapere come si possono 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 cerca di inserire alcuni record duplicati nella tabella, si verifica il conflitto.

Proviamo la seguente istruzione Insert, inserendo i record nella tabella "persona". Questa query causerà un errore perché il valore "3" del campo "ID" esiste già nella tabella.

>> inserisci in persona (id, nome, età, città, paese) valori ("3", "habib", "45", "chakwal", "pakistan");

Esempio 2: upsert con clausola di conflitto

Useremo la clausola di conflitto per evitare la query di inserimento che sta causando questo errore a causa dell'inserimento dei record duplicati. Il comando di conflitto emette due frasi con usi diversi.

  • FARE: Eseguire operazioni per superare il conflitto.
  • FARE NIENTE: Evita il conflitto senza fare nulla.

Esempio 3: UpSert con Do Down Nothing Clauso

In questo esempio, guarderemo la clausola Dow Nothing. Questa clausola elabora che nessuna operazione verrà eseguita per 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 allegate. Abbiamo aggiunto la clausola di conflitto, insieme alla dichiarazione di Do Nothing in questa clausola. La clausola di conflitto è stata applicata alla colonna "ID" univoca. Ciò significa che, quando l'utente tenta di inserire il valore duplicato alla 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.

>> inserisci in persona (id, nome, età, città, paese) Valori ("3", "habib", "45", "chakwal", "pakistan") sul conflitto (id) 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 * dalla persona;

Esempio 2: upsert con clausola do

Successivamente, guarderemo il conflitto e faremo clausole. Come indica il nome, la clausola ___ eseguirà un'azione su errore o conflitto quando un valore duplicato viene inserito in una tabella. Useremo lo stesso comando di insert che abbiamo usato in precedenza per inserire un record duplicato nella tabella "persona", con una lieve modifica. Abbiamo aggiunto la clausola di conflitto 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 di aggiornamento dopo la clausola Do, che indica un aggiornamento ai dati nella tabella "persona". La parola chiave set viene utilizzata per impostare il valore della colonna "Nome" sul nuovo valore, "Habib", usando la parola chiave esclusa in cui "ID" è "3" al momento corrente. Se esegui la seguente query, vedrai che la query è stata eseguita.

>> inserisci in persona (id, nome, età, città, paese) valori ("3", "habib", "45", "chakwal", "pakistan") sul conflitto (ID) eseguire l'aggiornamento del set = escluso.nome;

I record della tabella "persona" devono essere recuperati per vedere le modifiche alla domanda sopra. Se si esegue la seguente query nella shell della riga di comando, è necessario vedere l'output successivo.

>> seleziona * dalla persona;

Come puoi vedere dall'output di seguito, il nome della persona è stato aggiornato a "Habib", dove "Id" è "3.'

È inoltre possibile aggiornare i record in più di una colonna utilizzando la parola chiave esclusa nella clausola di conflitto sulla query di inserto, come mostrato di seguito.

>> inserisci in persona (id, nome, età, città, paese) valori ("3", "habib", "45", "chakwal", "pakistan") sul conflitto (ID) eseguire l'aggiornamento del set = escluso.nome, città = escluso.città;

Le modifiche sono mostrate di seguito.

>> seleziona * dalla persona;

Conclusione

Questo articolo ti ha mostrato come utilizzare PostgreSQL "UpSert" con la clausola di conflitto, insieme al do e non fare nulla. Dopo aver letto questo articolo, speriamo che tu trovi più facile capire come usare PostgreSQL 'UpSert.'