PostgreSQL

PostgreSQL Upsert on Conflict

PostgreSQL Upsert on Conflict
UPS-uttrykket er anerkjent som en sammenslåing i RDBMS. En 'Upsert' er nyttig å ha med PostgreSQL hvis du ikke vil håndtere unike feil med begrensningsbrudd på grunn av gjentatte oppføringer. Når du kjører en generell UPDATE-kommando, vil de nødvendige justeringene bare forekomme hvis en post samsvarer med kommandostandardene; hvis det ikke finnes slike data, skjer ingenting. Når du legger til en ny rad i en tabell, vil PostgreSQL oppdatere raden hvis den eksisterte tidligere, ellers vil den inkludere den nye raden hvis raden ikke eksisterte. SQL-nøkkelordet 'Upsert' kombinerer ordene "oppdatering" og "sett inn".”Denne artikkelen viser deg hvordan PostgreSQL 'Upsert' -funksjonen fungerer, samt hvordan du bruker 'Upsert' -funksjonen til å legge til eller oppdatere informasjon hvis den innsatte raden allerede finnes i tabellen.

Syntaks

Følgende er syntaksen til 'Upsert' ON CONFLICT-spørringen.

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

Start PostgreSQL Command-Line Shell

For å starte, start PostgreSQL kommandolinjeskall fra applikasjonsmenyen. Koble den til ønsket server. Skriv inn databasenavnet du vil jobbe med. For å jobbe med en annen port, skriv inn portnummeret og brukernavnet du vil jobbe med. For å fortsette med standardparametrene, la mellomrom være som det er og trykk 'Enter' for hvert alternativ. Legg til et passord for det valgte brukernavnet, og kommandoskallet ditt skal være klart til bruk.

Eksempel 1:

Nå kan vi komme i gang med 'Upsert' i konflikt. Anta at du har en tabell med tittelen 'person' i en valgt database med noen felt som viser poster over forskjellige personer. Disse postene viser navnene på folket, deres alder og byer og land. Tabellen vises nedenfor.

>> VELG * FRA person;

Det er viktig å vite hvordan en feil eller konflikt kan oppstå. Tabellen felt 'id', som også er en primærnøkkel, inneholder verdier fra 1 til 15. Når brukeren prøver å sette inn noen duplikatposter i tabellen, oppstår konflikten.

La oss prøve følgende INSERT-setning, og sette inn postene i 'person' -tabellen. Dette spørsmålet vil forårsake en feil fordi verdien '3' i 'id' -feltet allerede finnes i tabellen.

>> INSERT IN person (id, name, age, city, country) VALUES ('3', 'Habib', '45', 'Chakwal', 'Pakistan');

Eksempel 2: Upsert With ON CONFLICT Clause

Vi vil bruke ON CONFLICT-klausulen for å unngå INSERT-spørringen som forårsaker denne feilen på grunn av å sette inn duplikatposter. ON CONFLICT-kommandoen kommer med to setninger med forskjellige bruksområder.

Eksempel 3: Upsert With DO NOTHING Clause

I dette eksemplet vil vi se på DO NOTHING-ledd. Denne paragrafen utdyper at ingen operasjoner vil bli utført ved feil eller konflikt. Med andre ord vil denne paragrafen bare unngå konflikt eller feil.

Så la oss prøve den samme INSERT-kommandoen som vi brukte tidligere for å legge til duplikatposter i 'person' -tabellen, med noen få endringer lagt til. Vi har lagt til ON CONFLICT-klausulen, sammen med DO NOTHING-setningen i denne klausulen. ON CONFLICT-leddet er brukt på den unike 'id'-kolonnen. Dette betyr at når brukeren prøver å sette inn duplikatverdien i 'id' -kolonnen, vil den unngå konflikten og ikke gjøre noe. Som du kan se på bildet nedenfor, vil den ikke engang sette inn den nye posten i tabellen, og den vil heller ikke oppdatere den forrige posten.

>> INSERT I person (id, navn, alder, by, land) VERDIER ('3', 'Habib', '45', 'Chakwal', 'Pakistan') PÅ KONFLIKT (id) IKKE;

La oss sjekke 'person' -tabellen igjen for ekthets skyld. Som du kan se på bildet nedenfor, er det ikke gjort noen endringer i tabellen.

>> VELG * FRA person;

Eksempel 2: Upsert With DO Clause

Deretter vil vi se på ON CONFLICT og DO-leddene. Som navnet antyder, vil ___-setningen utføre en handling ved feil eller konflikt når en duplikatverdi settes inn i en tabell. Vi vil bruke den samme innføringskommandoen som vi tidligere brukte for å sette inn en duplikatpost i 'person' -tabellen, med en mindre endring. Vi har lagt til ON CONFLICT-setningen med DO-setningen inne i den. Når brukeren prøver å sette inn den ikke-unike verdien i kolonnen 'id', vil den utføre en handling for å unngå konflikten. Vi har brukt UPDATE-setningen etter DO-setningen, som indikerer en oppdatering av dataene i persontabellen. SET-nøkkelordet brukes til å sette verdien til kolonnen 'navn' til den nye verdien, 'Habib', ved å bruke nøkkelordet EKSKLUDERT der 'id' er '3' for øyeblikket. Hvis du utfører følgende spørring, vil du se at spørringen er utført.

>> INSERT I person (id, navn, alder, by, land) VERDIER ('3', 'Habib', '45', 'Chakwal', 'Pakistan') PÅ KONFLIKT (id) DO UPDATE SET name = EXKLUDED.Navn;

Postene til persontabellen må hentes for å se endringene i spørringen ovenfor. Hvis du utfører følgende spørsmål i kommandolinjeskallet, bør du se den påfølgende utgangen.

>> VELG * FRA person;

Som du kan se fra utdataene nedenfor, har navnet på personen blitt oppdatert til 'Habib', der 'id' er '3.'

Du kan også oppdatere postene i mer enn en kolonne ved hjelp av EKSKLUDERT nøkkelord i ON CONFLICT-setningen i INSERT-spørringen, som vist nedenfor.

>> INSERT IN person (id, name, age, city, country) VALUES ('3', 'Habib', '45', 'Chakwal', 'Pakistan') ON CONFLICT (id) DO UPDATE SET name = EXKLUDED.navn, by = EKSKLUDERT.by;

Endringene er vist nedenfor.

>> VELG * FRA person;

Konklusjon

Denne artikkelen viste deg hvordan du bruker PostgreSQL 'Upsert' med ON CONFLICT-klausulen, sammen med handlingene DO og NOT NOTING. Etter å ha lest denne artikkelen, håper vi at du finner det lettere å forstå hvordan du bruker PostgreSQL 'Upsert.'

Shadow of the Tomb Raider for Linux Tutorial
Shadow of the Tomb Raider er det tolvte tilskuddet til Tomb Raider-serien - et action-eventyrspill-franchise opprettet av Eidos Montreal. Spillet ble ...
Hvordan øke FPS i Linux?
FPS står for Bilder per sekund. FPSs oppgave er å måle bildefrekvensen i videoavspilling eller spillprestasjoner. Med enkle ord betegnes antall uavbru...
Topp Oculus App Lab-spill
Hvis du er Oculus-hodesettinnehaver, må du være klar over sideloading. Sidelading er prosessen med å installere ikke-butikkinnhold på hodesettet. Side...