Sintaksa
Sledi sintaksa poizvedbe 'Upsert' ON CONFLICT.
>> INSERT INTO ime_tabele (stolpec_list) VALUSE (seznam_vrednosti) ON CONFLICT ciljno dejanje;Zaženite lupino ukazne vrstice PostgreSQL
Za začetek v meniju Aplikacije zaženite lupino ukazne vrstice PostgreSQL. Povežite ga z zahtevanim strežnikom. Vnesite ime baze podatkov, s katero želite delati. Če želite delati na drugih vratih, vnesite številko vrat in uporabniško ime, s katerim želite delati. Če želite nadaljevati s privzetimi parametri, pustite presledke takšne, kot so, in pri vsaki možnosti pritisnite 'Enter'. Dodajte geslo za izbrano uporabniško ime in vaša ukazna lupina mora biti pripravljena za uporabo.
Primer 1:
Zdaj lahko začnemo z navzkrižjem 'Upsert'. Recimo, da imate v izbrani bazi podatkov tabelo z naslovom "oseba" z nekaterimi polji, ki prikazujejo zapise različnih oseb. Ti zapisi prikazujejo imena ljudi, njihove starosti ter njihova mesta in države. Tabela je prikazana spodaj.
>> IZBERI * OD osebe;
Pomembno je vedeti, kako lahko pride do napake ali konflikta. Polje tabele 'id', ki je hkrati tudi primarni ključ, vsebuje vrednosti od 1 do 15. Ko uporabnik poskuša v tabelo vstaviti nekaj podvojenih zapisov, pride do konflikta.
Poskusimo z naslednjo izjavo INSERT in vstavimo zapise v tabelo 'oseba'. Ta poizvedba bo povzročila napako, ker vrednost '3' polja 'id' že obstaja v tabeli.
>> VSTAVITE V OSOBO (ID, ime, starost, mesto, država) VREDNOSTI ('3', 'Habib', '45', 'Chakwal', 'Pakistan');
Primer 2: Podstavite s klavzulo ON CONFLICT
S stavkom ON CONFLICT se bomo izognili poizvedbi INSERT, ki povzroča to napako zaradi vstavljanja podvojenih zapisov. Ukaz ON CONFLICT ima dva stavka z različnimi načini uporabe.
- DO: Izvedite operacije za premagovanje konflikta.
- DELATI NIČ: Izogibajte se konfliktu, ne da bi kaj storili.
3. primer: podstavite s klavzulo DO NIČ
V tem primeru si bomo ogledali klavzulo DO NIČ. Ta klavzula pojasnjuje, da nobena operacija ne bo izvedena ob napaki ali konfliktu. Z drugimi besedami, ta klavzula se bo izognila le konfliktom ali napakam.
Torej, poskusimo z istim ukazom INSERT, ki smo ga prej uporabili za dodajanje podvojenih zapisov v tabelo 'oseba', z nekaj priloženimi spremembami. Dodali smo stavek ON CONFLICT, skupaj s stavkom DO NOTHING v tem stavku. Klavzula ON CONFLICT je bila uporabljena za enolični stolpec 'id'. To pomeni, da se bo uporabnik, ko bo poskušal podvojeno vrednost vstaviti v stolpec 'id', izognil konfliktu in ne bo naredil ničesar. Kot lahko vidite na spodnji sliki, novega zapisa niti ne bo vstavil v tabelo niti posodobil prejšnjega zapisa.
>> VKLJUČITE V OSOBO (id, ime, starost, mesto, država) VREDNOSTI ('3', 'Habib', '45', 'Chakwal', 'Pakistan') O KONFLIKTU (id) NIČ NIČ;
Zaradi verodostojnosti ponovno preverimo tabelo 'oseba'. Kot lahko vidite na spodnji sliki, tabela ni bila spremenjena.
>> IZBERI * OD osebe;
Primer 2: Zgornja klavzula DO
Nato si bomo ogledali klavzuli ON CONFLICT in DO. Kot že ime pove, bo stavek ___ izvedel dejanje ob napaki ali konfliktu, ko bo v tabelo vstavljena podvojena vrednost. Uporabili bomo isti ukaz za vstavljanje, kot smo ga prej uporabili za vstavljanje podvojenega zapisa v tabelo 'oseba', z manjšo spremembo. Dodali smo stavek ON CONFLICT s klavzulo DO znotraj njega. Ko uporabnik poskuša v stolpec 'id' vstaviti neenotno vrednost, bo izvedel dejanje, da se izogne konfliktu. Za stavkom DO uporabljamo stavek UPDATE, ki označuje posodobitev podatkov v tabeli 'oseba'. Ključna beseda SET se uporablja za nastavitev vrednosti stolpca »ime« na novo vrednost, »Habib«, z uporabo ključne besede IZKLJUČENO, kjer je trenutno »id« 3 ». Če izvedete naslednjo poizvedbo, boste videli, da je bila poizvedba izvedena.
>> VSTAVITE V OSOBO (id, ime, starost, mesto, država) VREDNOTE ('3', 'Habib', '45', 'Chakwal', 'Pakistan') O KONFLIKTU (id) UPORABI NASTAVITEV NAST.ime;
Za ogled sprememb v zgornji poizvedbi je treba pridobiti zapise tabele 'oseba'. Če v lupini ukazne vrstice izvedete naslednjo poizvedbo, bi morali videti naslednji izhod.
>> IZBERI * OD osebe;Kot lahko vidite iz spodnjega izhoda, je bilo ime osebe posodobljeno na "Habib", kjer je "id" 3."
Zapise lahko posodobite tudi v več kot enem stolpcu z uporabo ključne besede EXCLUDED v stavku ON CONFLICT poizvedbe INSERT, kot je prikazano spodaj.
>> VSTAVITE V OSOBO (id, ime, starost, mesto, država) VREDNOSTI ('3', 'Habib', '45', 'Chakwal', 'Pakistan') V KONFLIKTU (id) UPORABI NASTAVITEV NASTAVITEV = IZKLJUČENO.ime, mesto = IZKLJUČENO.mesto;
Spremembe so prikazane spodaj.
>> IZBERI * OD osebe;
Zaključek
Ta članek vam je pokazal, kako uporabljati PostgreSQL 'Upsert' s klavzulo ON CONFLICT, skupaj z dejanji DO in DO NOTHING. Po branju tega članka upamo, da boste lažje razumeli, kako uporabljati PostgreSQL 'Upsert."