PostgreSQL

PostgreSQL Upsert op conflict

PostgreSQL Upsert op conflict
De 'Upsert'-expressie wordt herkend als een samenvoeging in RDBMS. Een 'Upsert' is handig om te hebben met PostgreSQL als u niet wilt omgaan met unieke fouten in de beperkingsschending als gevolg van herhaalde invoer. Wanneer u een generiek UPDATE-commando uitvoert, zullen de benodigde aanpassingen alleen plaatsvinden als een record voldoet aan de commandostandaarden; als dergelijke gegevens niet bestaan, gebeurt er niets. Wanneer u een nieuwe rij aan een tabel toevoegt, zal PostgreSQL de rij bijwerken als deze eerder bestond, of anders wordt de nieuwe rij opgenomen als de rij niet bestond. Het SQL-sleutelwoord 'Upsert' combineert de woorden "update" en "insert".Dit artikel laat zien hoe de PostgreSQL 'Upsert'-functie werkt en hoe u de 'Upsert'-functie gebruikt om informatie toe te voegen of bij te werken als de ingevoegde rij al in de tabel bestaat.

Syntaxis

Het volgende is de syntaxis van de 'Upsert' ON CONFLICT-query.

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

Start PostgreSQL Command-Line Shell

Start om te beginnen de PostgreSQL-opdrachtregelshell vanuit het menu Toepassing. Verbind het met de vereiste server. Voer de databasenaam in waaraan u wilt werken. Om op een andere poort te werken, typt u het poortnummer en de gebruikersnaam waarmee u wilt werken. Om verder te gaan met de standaard parameters, laat u de spaties ongewijzigd en drukt u bij elke optie op 'Enter'ter. Voeg een wachtwoord toe voor de geselecteerde gebruikersnaam en je commando-shell zou klaar moeten zijn voor gebruik.

Voorbeeld 1:

Nu kunnen we aan de slag met 'Upsert' in conflict. Stel dat u een tabel met de titel 'persoon' heeft in een geselecteerde database met enkele velden die records van verschillende personen tonen. Deze archieven tonen de namen van de mensen, hun leeftijden en hun steden en landen. De tabel wordt hieronder weergegeven:.

>> SELECTEER * VAN persoon;

Het is belangrijk om te weten hoe een fout of conflict kan ontstaan. Het tabelveld 'id', dat ook een primaire sleutel is, bevat waarden van 1 tot 15. Wanneer de gebruiker enkele dubbele records in de tabel probeert in te voegen, treedt het conflict op.

Laten we de volgende INSERT-instructie proberen, waarbij we de records in de 'person'-tabel invoegen. Deze query veroorzaakt een fout omdat de waarde '3' van het veld 'id' al in de tabel bestaat.

>> INSERT INTO persoon (id, naam, leeftijd, stad, land) WAARDEN ( '3', 'Habib', '45', 'Chakwal', 'Pakistan');

Voorbeeld 2: Upsert met ON CONFLICT-clausule

We zullen de ON CONFLICT-clausule gebruiken om de INSERT-query te vermijden die deze fout veroorzaakt door het invoegen van dubbele records. Het ON CONFLICT-commando komt met twee zinnen met verschillende gebruiksmogelijkheden.

Voorbeeld 3: Upsert met NIETS-clausule

In dit voorbeeld kijken we naar de clausule DO NOTHING. Deze clausule legt uit dat er geen bewerking zal worden uitgevoerd bij een fout of conflict. Met andere woorden, deze clausule vermijdt alleen conflicten of fouten.

Laten we dus hetzelfde INSERT-commando proberen dat we eerder hebben gebruikt om dubbele records toe te voegen aan de 'person'-tabel, met een paar wijzigingen toegevoegd. We hebben de ON CONFLICT-clausule toegevoegd, samen met de DO NOTHING-instructie in deze clausule. De ON CONFLICT-clausule is toegepast op de unieke 'id'-kolom. Dit betekent dat wanneer de gebruiker probeert de dubbele waarde in de kolom 'id' in te voegen, het conflict wordt vermeden en niets wordt gedaan. Zoals u in de onderstaande afbeelding kunt zien, wordt het nieuwe record niet eens in de tabel ingevoegd en wordt het vorige record ook niet bijgewerkt.

>> INVOEGEN IN persoon (id, naam, leeftijd, stad, land) WAARDEN ( '3', 'Habib', '45', 'Chakwal', 'Pakistan') BIJ CONFLICT (id) NIETS DOEN;

Laten we de 'persoon'-tabel nog eens checken omwille van de authenticiteit. Zoals u in de onderstaande afbeelding kunt zien, zijn er geen wijzigingen aangebracht in de tabel.

>> KIES * VAN persoon;

Voorbeeld 2: Upsert met DO-clausule

Vervolgens zullen we kijken naar de ON CONFLICT- en DO-clausules. Zoals de naam aangeeft, voert de ___-clausule een actie uit bij een fout of conflict wanneer een dubbele waarde in een tabel wordt ingevoegd. We zullen hetzelfde insert-commando gebruiken dat we eerder gebruikten om een ​​duplicaatrecord in de 'person'-tabel in te voegen, met een kleine wijziging. We hebben de ON CONFLICT-clausule toegevoegd met de DO-clausule erin. Wanneer de gebruiker probeert de niet-unieke waarde in de kolom 'id' in te voegen, zal deze een actie uitvoeren om het conflict te voorkomen. We hebben de UPDATE-clausule gebruikt na de DO-clausule, die een update van de gegevens in de 'persoon'-tabel aangeeft. Het sleutelwoord SET wordt gebruikt om de waarde van de kolom 'naam' in te stellen op de nieuwe waarde 'Habib' met het sleutelwoord EXCLUDED waarbij de 'id' op dit moment '3' is. Als u de volgende query uitvoert, ziet u dat de query is uitgevoerd:.

>> INSERT INTO persoon (id, naam, leeftijd, stad, land) WAARDEN ( '3', 'Habib', '45', 'Chakwal', 'Pakistan') BIJ CONFLICT (id) DO UPDATE SET naam = UITGESLOTEN.naam;

De records van de tabel 'persoon' moeten worden opgehaald om de wijzigingen in de bovenstaande query te zien. Als u de volgende query uitvoert in de opdrachtregelshell, zou u de volgende uitvoer moeten zien:.

>> SELECTEER * VAN persoon;

Zoals je kunt zien aan de output hieronder, is de naam van de persoon geüpdatet naar 'Habib', waarbij de 'id' is '3.'

U kunt de records in meer dan één kolom ook bijwerken met het trefwoord EXCLUDED in de ON CONFLICT-clausule van de INSERT-query, zoals hieronder wordt weergegeven.

>> INSERT INTO persoon (id, naam, leeftijd, stad, land) WAARDEN ( '3', 'Habib', '45', 'Chakwal', 'Pakistan') BIJ CONFLICT (id) DO UPDATE SET naam = UITGESLOTEN.naam, stad = UITGESLOTEN.stad;

De wijzigingen worden hieronder weergegeven:.

>> SELECTEER * VAN persoon;

Conclusie

Dit artikel liet je zien hoe je PostgreSQL 'Upsert' kunt gebruiken met de ON CONFLICT-clausule, samen met de DO en DO NOTHING-acties. Na het lezen van dit artikel hopen we dat u het gemakkelijker vindt om te begrijpen hoe u PostgreSQL 'Upsert' kunt gebruiken.'

Top Oculus App Lab-games
Als je eigenaar bent van een Oculus-headset, moet je op de hoogte zijn van sideloading. Sideloading is het proces van het installeren van niet-winkeli...
Top 10 spellen om te spelen op Ubuntu
Het Windows-platform is een van de dominante platforms voor gaming geweest vanwege het enorme percentage games dat tegenwoordig wordt ontwikkeld om Wi...
5 beste arcade-spellen voor Linux
Tegenwoordig zijn computers serieuze machines die worden gebruikt om te gamen. Als je de nieuwe hoge score niet kunt halen, weet je wat ik bedoel. In ...