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.
- GJØRE: Utfør operasjoner for å overvinne konflikten.
- GJØR INGENTING: Unngå konflikten uten å gjøre noe.
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.'