PostgreSQL Upsert på konflikt

PostgreSQL Upsert på konflikt
Upsert -uttrykket er anerkjent som en sammenslåing i RDBMS. En 'Upsert' er nyttig å ha med PostgreSQL hvis du ikke vil håndtere unike begrensningsfeil på grunn av gjentatte oppføringer. Når du kjører en generisk oppdateringskommando, vil de nødvendige justeringene bare oppstå hvis en post passer til kommandostandardene; Hvis det ikke eksisterer slike data, skjer ingenting. Når du legger til en ny rad til et bord, vil PostgreSQL oppdatere raden hvis den eksisterte tidligere, ellers vil den innlemme den nye raden hvis raden ikke eksisterte. "Upsert" SQL -nøkkelordet kombinerer ordene "oppdatering" og "innsats.”Denne artikkelen viser deg hvordan PostgreSql 'Upsert' -funksjonen fungerer, samt hvordan du bruker 'Upsert' -funksjonen for å legge til eller oppdatere informasjon hvis den innsatte raden allerede finnes i tabellen.

Syntaks

Følgende er syntaks for 'Upsert' på konfliktforespørselen.

>> Sett inn i tabell_name (Column_list) valuse (verdi_list) om konfliktmålmål;

Start PostgreSQL kommandolinje skall

For å begynne. Koble den til den nødvendige serveren. Skriv inn databasenavnet du vil jobbe med. For å jobbe med en annen port, skriver du portnummeret og brukernavnet du vil jobbe med. For å fortsette med standardparametrene, la rommene som det er og trykk 'Enter' på 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 av forskjellige personer. Disse postene viser navnene på folket, deres aldre og deres byer og land. Tabellen vises nedenfor.

>> velg * fra person;

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

La oss prøve følgende innsatserklæring, sette inn postene i tabellen 'person'. Denne spørringen vil forårsake en feil fordi verdien '3' av 'ID' -feltet allerede eksisterer i tabellen.

>> sett inn i person (id, navn, alder, by, land) verdier ('3', 'habib', '45', 'chakwal', 'pakistan');

Eksempel 2: Upsert med On Conflict Clause

Vi vil bruke ON -konfliktklausulen for å unngå innsatsspørsmålet som forårsaker denne feilen på grunn av å sette inn duplikatpostene. On Conflict -kommandoen kommer med to setninger med forskjellige bruksområder.

  • GJØRE: Utføre operasjoner for å overvinne konflikten.
  • GJØR INGENTING: Unngå konflikten uten å gjøre noe.

Eksempel 3: Upsert med Do Nothing Clause

I dette eksemplet vil vi se på Do Nothing -leddet. Denne klausulen utdyper at ingen operasjoner vil bli utført ved feil eller konflikt. Med andre ord, denne klausulen vil bare unngå konflikt eller feil.

Så la oss prøve den samme innsatskommandoen som vi brukte tidligere til å legge til dupliserte poster til 'personens' tabell, med noen få endringer vedlagt. Vi har lagt til ON -konfliktklausulen, sammen med Do Nothing -uttalelsen i denne klausulen. On -konfliktbestemmelsen er brukt på den unike 'ID' -kolonnen. Dette betyr at når brukeren prøver å sette inn duplikatverdien til '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 forrige post.

>> sett inn i person (id, navn, alder, by, land) verdier ('3', 'habib', '45', 'chakwal', 'pakistan') på konflikt (id) gjør ingenting;

La oss sjekke tabellen 'person' igjen av hensyn til ektheten. Som du kan se på bildet nedenfor, er det ikke gjort noen endringer i tabellen.

>> velg * fra person;

Eksempel 2: Upsert med DO -klausul

Deretter vil vi se på ON -konflikten og gjøre klausuler. Som navnet indikerer, vil ___ -leddet utføre en handling ved feil eller konflikt når en duplikatverdi settes inn i en tabell. Vi vil bruke den samme innsatskommandoen som vi tidligere brukte til å sette inn en duplikatoppføring i "person" -tabellen, med en mindre endring. Vi har lagt til ON -konfliktklausulen med DO -klausulen inne i den. Når brukeren prøver å sette inn den ikke-unike verdien til 'ID' -kolonnen, vil den utføre en handling for å unngå konflikten. Vi har brukt oppdateringsklausulen etter DO -klausulen, som indikerer en oppdatering av dataene i "person" -tabellen. Det angitte nøkkelordet brukes til å angi verdien av 'Navn' -kolonnen til den nye verdien, 'Habib', ved å bruke nøkkelordet ekskludert der 'ID' er '3' på det nåværende tidspunktet. Hvis du utfører følgende spørsmål, vil du se at spørringen er utført.

>> sett inn i person (id, navn, alder, by, land) verdier ('3', 'habib', '45', 'chakwal', 'pakistan') på konflikt (id) do update set name = ekskludert.Navn;

Registreringene av "person" -tabellen må hentes for å se endringene i spørringen ovenfor. Hvis du utfører følgende spørring i kommandolinjeskallet, bør du se den påfølgende utgangen.

>> velg * fra person;

Som du ser fra utdataene nedenfor, er navnet på personen blitt oppdatert til 'Habib', der 'Id' er '3.'

Du kan også oppdatere postene i mer enn en kolonne ved å bruke det ekskluderte nøkkelordet i ON -konfliktklausulen i Sett inn -spørringen, som vist nedenfor.

>> sett inn i person (id, navn, alder, by, land) verdier ('3', 'habib', '45', 'chakwal', 'pakistan') på konflikt (id) do update set name = ekskludert.Navn, by = ekskludert.by;

Endringene vises nedenfor.

>> velg * fra person;

Konklusjon

Denne artikkelen viste deg hvordan du bruker PostgreSql 'Upsert' med ON -konfliktklausulen, sammen med DO og Do Nothing Actions. Etter å ha lest denne artikkelen, håper vi at du synes det er lettere å forstå hvordan du bruker PostgreSQL 'Upsert.'