PostgreSQL

PostgreSQL Upsert on Conflict

PostgreSQL Upsert on Conflict
Expresia „Upsert” este recunoscută ca o îmbinare în RDBMS. Un „Upsert” este util să aveți cu PostgreSQL dacă nu doriți să faceți față erorilor de încălcare a restricțiilor unice datorită intrărilor repetate. Când executați o comandă generică UPDATE, ajustările necesare vor avea loc numai dacă o înregistrare se potrivește standardelor de comandă; dacă nu există astfel de date, atunci nu se întâmplă nimic. Când adăugați un rând nou într-un tabel, PostgreSQL va actualiza rândul dacă a existat anterior sau altfel va încorpora noul rând dacă rândul nu a existat. Cuvântul cheie „Upsert” SQL combină cuvintele „actualizare” și „inserare”.”Acest articol vă arată cum funcționează caracteristica„ Upsert ”PostgreSQL, precum și cum să utilizați caracteristica„ Upsert ”pentru a adăuga sau actualiza informații dacă rândul inserat există deja în tabel.

Sintaxă

Următoarea este sintaxa interogării „Upsert” ON CONFLICT.

>> INSERT INTO table_name (column_list) VALUSE (value_list) ON CONFLICT acțiune țintă;

Lansați Shell-ul de comandă PostgreSQL

Pentru început, lansați shell-ul de linie de comandă PostgreSQL din meniul Aplicație. Conectați-l la serverul necesar. Introduceți numele bazei de date pe care doriți să lucrați. Pentru a lucra pe un alt port, tastați numărul portului și numele de utilizator cu care doriți să lucrați. Pentru a continua cu parametrii impliciți, lăsați spațiile așa cum este și apăsați „Enter” la fiecare opțiune. Adăugați o parolă pentru numele de utilizator selectat, iar comanda-shell ar trebui să fie gata de utilizare.

Exemplul 1:

Acum, putem începe cu „Upsert” în conflict. Să presupunem că aveți un tabel intitulat „persoană” într-o bază de date selectată cu câteva câmpuri care arată înregistrări ale diferitelor persoane. Aceste înregistrări arată numele oamenilor, vârsta lor și orașele și țările lor. Tabelul este afișat mai jos.

>> SELECT * DE la persoana;

Este important să știm cum poate apărea o eroare sau un conflict. Câmpul tabelului „id”, care este și o cheie primară, conține valori de la 1 la 15. Când utilizatorul încearcă să insereze câteva înregistrări duplicate în tabel, apare conflictul.

Să încercăm următoarea declarație INSERT, inserând înregistrările în tabelul „persoană”. Această interogare va cauza o eroare deoarece valoarea „3” din câmpul „id” există deja în tabel.

>> INSERAȚI ÎN persoana (id, nume, vârstă, oraș, țară) VALORI („3”, „Habib”, „45”, „Chakwal”, „Pakistan”);

Exemplul 2: Upsert cu clauza ON CONFLICT

Vom folosi clauza ON CONFLICT pentru a evita interogarea INSERT care cauzează această eroare din cauza inserării înregistrărilor duplicat. Comanda ON CONFLICT vine cu două fraze cu utilizări diferite.

Exemplul 3: Upsert cu clauza DO NIMIC

În acest exemplu, vom analiza clauza DO NIMIC. Această clauză explică faptul că nicio operațiune nu va fi efectuată în caz de eroare sau conflict. Cu alte cuvinte, această clauză va evita doar conflictele sau erorile.

Deci, haideți să încercăm aceeași comandă INSERT pe care am folosit-o anterior pentru a adăuga înregistrări duplicate în tabelul „persoană”, cu câteva modificări anexate. Am adăugat clauza ON CONFLICT, împreună cu declarația DO NIMIC din această clauză. Clauza ON CONFLICT a fost aplicată coloanei unice „id”. Aceasta înseamnă că, atunci când utilizatorul încearcă să insereze valoarea duplicat în coloana „id”, va evita conflictul și nu va face nimic. După cum puteți vedea în imaginea de mai jos, nici măcar nu va introduce noua înregistrare în tabel și nici nu va actualiza înregistrarea anterioară.

>> INSERAȚI ÎN persoana (id, nume, vârstă, oraș, țară) VALORI („3”, „Habib”, „45”, „Chakwal”, „Pakistan”) PE CONFLICT (id) FĂ NIMIC;

Să verificăm din nou tabelul „persoană” din motive de autenticitate. După cum puteți vedea în imaginea de mai jos, nu au fost aduse modificări tabelului.

>> SELECT * DE la persoana;

Exemplul 2: Upsert cu clauza DO

În continuare, vom analiza clauzele ON CONFLICT și DO. După cum indică și numele, clauza ___ va efectua o acțiune în caz de eroare sau conflict atunci când o valoare duplicat este inserată într-un tabel. Vom folosi aceeași comandă de inserare pe care am folosit-o anterior pentru a insera o înregistrare duplicat în tabelul „persoană”, cu o modificare mică. Am adăugat clauza ON CONFLICT cu clauza DO în interiorul acesteia. Când utilizatorul încearcă să insereze valoarea non-unică în coloana „id”, va efectua o acțiune pentru a evita conflictul. Am folosit clauza UPDATE după clauza DO, care indică o actualizare a datelor din tabelul „persoană”. Cuvântul cheie SET este utilizat pentru a seta valoarea coloanei „nume” la noua valoare, „Habib”, folosind cuvântul cheie EXCLUDED unde „id” este „3” la ora curentă. Dacă executați următoarea interogare, veți vedea că interogarea a fost efectuată.

>> INSERT INTO person (id, name, age, city, country) VALUE ('3', 'Habib', '45', 'Chakwal', 'Pakistan') ON CONFLICT (id) DO UPDATE SET name = EXCLUDED.Nume;

Înregistrările tabelului „persoană” trebuie preluate pentru a vedea modificările la interogarea de mai sus. Dacă executați următoarea interogare în shell-ul liniei de comandă, ar trebui să vedeți rezultatul ulterior.

>> SELECT * DE la persoana;

După cum puteți vedea din rezultatul de mai jos, numele persoanei a fost actualizat la „Habib”, unde „id” este „3.'

De asemenea, puteți actualiza înregistrările din mai multe coloane utilizând cuvântul cheie EXCLUDED din clauza ON CONFLICT a interogării INSERT, așa cum se arată mai jos.

>> INSERT INTO person (id, name, age, city, country) VALUE ('3', 'Habib', '45', 'Chakwal', 'Pakistan') ON CONFLICT (id) DO UPDATE SET name = EXCLUDED.nume, oraș = EXCLUDED.oraș;

Modificările sunt prezentate mai jos.

>> SELECT * DE la persoana;

Concluzie

Acest articol v-a arătat cum să utilizați PostgreSQL „Upsert” cu clauza ON CONFLICT, împreună cu acțiunile DO și DO NOTHING. După ce ați citit acest articol, sperăm că veți fi mai ușor să înțelegeți cum să utilizați Upsert de la PostgreSQL.'

Cum să dezvolți un joc pe Linux
Acum un deceniu, nu mulți utilizatori de Linux ar fi prezis că sistemul lor de operare preferat va fi într-o zi o platformă populară de jocuri pentru ...
Open Source Ports of Commercial Game Engines
Free, open source and cross-platform game engine recreations can be used to play old as well as some of the fairly recent game titles. This article wi...
Cele mai bune jocuri de linie de comandă pentru Linux
Linia de comandă nu este doar cel mai mare aliat al tău când folosești Linux - poate fi și sursa de divertisment, deoarece poți să o folosești pentru ...