„PostgreSQL“

„PostgreSQL“ skelbia konfliktą

„PostgreSQL“ skelbia konfliktą
„Upsert“ išraiška RDBMS pripažįstama kaip sujungimas. „Upsert“ naudinga turėti naudojant „PostgreSQL“, jei nenorite spręsti unikalių apribojimų pažeidimų klaidų dėl pakartotinių įrašų. Paleidus bendrą UPDATE komandą, būtini pakeitimai bus atliekami tik tuo atveju, jei įrašas atitinka komandos standartus; jei tokių duomenų nėra, tada nieko neįvyksta. Kai prie lentelės pridedate naują eilutę, „PostgreSQL“ atnaujins eilutę, jei ji egzistavo anksčiau, arba kitaip ji įtrauks naują eilutę, jei eilutės nebuvo. „Upsert“ SQL raktinis žodis sujungia žodžius „atnaujinti“ ir „įterpti“.Šiame straipsnyje parodyta, kaip veikia „PostgreSQL“ funkcija „Upsert“, taip pat kaip naudoti funkciją „Upsert“ norint pridėti ar atnaujinti informaciją, jei lentelėje jau yra įterpta eilutė.

Sintaksė

Toliau pateikiama užklausos „Upsert ON CONLLICT“ sintaksė.

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

Paleiskite „PostgreSQL“ komandų eilutės apvalkalą

Norėdami pradėti, paleiskite „PostgreSQL“ komandinės eilutės apvalkalą iš „Application“ meniu. Prijunkite jį prie reikalingo serverio. Įveskite duomenų bazės pavadinimą, prie kurio norite dirbti. Norėdami dirbti kitame prievade, įveskite prievado numerį ir vartotojo vardą, su kuriuo norite dirbti. Norėdami tęsti numatytuosius parametrus, palikite tarpus tokius, kokie yra, ir kiekvienoje parinktyje paspauskite „Enter“. Pridėkite pasirinkto vartotojo vardo slaptažodį ir jūsų komandų apvalkalas turėtų būti paruoštas naudoti.

1 pavyzdys:

Dabar galime pradėti nuo „Upsert“ konflikto. Tarkime, kad pasirinktoje duomenų bazėje turite lentelę pavadinimu „asmuo“ su keliais laukais, kuriuose rodomi skirtingų asmenų įrašai. Šie įrašai rodo žmonių vardus, amžių, miestus ir šalis. Lentelė rodoma žemiau.

>> PASIRINKTI * IŠ asmens;

Svarbu žinoti, kaip gali atsirasti klaida ar konfliktas. Lentelės „id“ lauke, kuris taip pat yra pagrindinis raktas, yra reikšmės nuo 1 iki 15. Kai vartotojas bando į lentelę įterpti kelis pasikartojančius įrašus, įvyksta konfliktas.

Pabandykime šį INSERT teiginį, įterpdami įrašus į lentelę „asmuo“. Ši užklausa sukels klaidą, nes „id“ lauko „3“ vertė jau yra lentelėje.

>> INSERT INTO asmuo (asmens kodas, vardas, amžius, miestas, šalis) VERTYBĖS („3“, „Habib“, „45“, „Chakwal“, „Pakistan“);

2 pavyzdys: pakeiskite sąlygą ĮJUNGTI KONFLIKTĄ

Norėdami išvengti INSERT užklausos, kuri sukelia šią klaidą dėl įterptų įrašų dublikatų, naudosime sąlygą ON CONFLICT. Komanda ON CONFLICT pateikia dvi frazes su skirtingais naudojimo būdais.

3 pavyzdys: Patvirtinkite sąlygą „NIEKO NIEKO“

Šiame pavyzdyje mes pažvelgsime į sąlygą NIEKO NIEKO. Šiame punkte patikslinama, kad jokia operacija nebus atliekama dėl klaidos ar konflikto. Kitaip tariant, ši sąlyga padės išvengti tik konfliktų ar klaidų.

Taigi, pabandykime tą pačią INSERT komandą, kurią naudojome anksčiau, kad pridėtume įrašų dublikatus į lentelę „asmuo“, pridėdami keletą pakeitimų. Pridėjome sąlygą „KONFLIKTAS“ kartu su sakiniu „NIEKO NEVEIKTI“. ON CONFLICT sąlyga pritaikyta unikaliam stulpeliui „id“. Tai reiškia, kad kai vartotojas bandys įterpti reikšmės kopiją į stulpelį „id“, jis išvengs konflikto ir nieko nedarys. Kaip matote paveikslėlyje žemiau, jis net neįtrauks naujojo įrašo į lentelę ir neatnaujins ankstesnio įrašo.

>> INSERT INTO asmuo (ID, vardas, amžius, miestas, šalis) VERTYBĖS ('3', 'Habib', '45', 'Chakwal', 'Pakistan') Į KONFLIKTĄ (id) NIEKO NEDARYKITE;

Patikrinkime „asmens“ lentelę dar kartą, kad būtų tikrumas. Kaip matote paveikslėlyje žemiau, lentelėje nebuvo atlikti jokie pakeitimai.

>> PASIRINKTI * IŠ asmens;

2 pavyzdys: pakeiskite DO sąlygą

Toliau mes pažvelgsime į ON CONFLICT ir DO sąlygas. Kaip rodo jo pavadinimas, sąlyga ___ atliks klaidos ar konflikto veiksmą, kai į lentelę bus įterpta reikšmės kopija. Mes naudosime tą pačią įterpimo komandą, kurią anksčiau naudojome įterpdami įrašo kopiją į lentelę „asmuo“, su nedideliais pakeitimais. Įtraukėme sąlygą ON CONFLICT su DO sąlyga jos viduje. Kai vartotojas bandys į „id“ stulpelį įterpti ne unikalią vertę, jis atliks veiksmą, kad išvengtų konflikto. Mes naudojome sąlygą UPDATE po sąlyga DO, kuri nurodo duomenų, esančių lentelėje „asmuo“, atnaujinimą. Raktinis žodis „SET“ naudojamas stulpelio „vardas“ reikšmei nustatyti į naują reikšmę „Habib“, naudojant raktinį žodį IŠIMTAS, kai „id“ šiuo metu yra „3“. Jei vykdysite šią užklausą, pamatysite, kad užklausa buvo atlikta.

>> ĮRAŠYKITE asmenį (ID, vardą, amžių, miestą, šalį).vardas;

Lentelės „asmuo“ įrašai turi būti paimti, kad būtų galima pamatyti anksčiau nurodytos užklausos pakeitimus. Jei vykdote šią užklausą komandinės eilutės apvalkale, turėtumėte pamatyti tolesnę išvestį.

>> PASIRINKTI * IŠ asmens;

Kaip matote iš žemiau pateiktos išvesties, asmens vardas atnaujintas į „Habib“, kur „id“ yra „3“."

Taip pat galite atnaujinti įrašus daugiau nei viename stulpelyje naudodami užklausos INSERT sąlygą ON CONFLICT raktinį žodį EXCLUDED, kaip parodyta žemiau.

>> ĮRAŠYKITE asmenį (ID, vardą, amžių, miestą, šalį).vardas, miestas = IŠIMTAS.miestas;

Pakeitimai parodyti žemiau.

>> PASIRINKTI * IŠ asmens;

Išvada

Šis straipsnis parodė, kaip naudoti „PostgreSQL“ Upsert “su sąlyga ON CONFLICT, kartu su„ DO and DO NOTHING “veiksmais. Perskaitę šį straipsnį, tikimės, kad jums bus lengviau suprasti, kaip naudotis „PostgreSQL 'Upsert“."

Kaip parodyti FPS skaitiklį „Linux“ žaidimuose
„Linux“ žaidimai gavo didelį postūmį, kai „Valve“ paskelbė „Linux“ palaikymą „Steam“ klientui ir jų žaidimams 2012 m. Nuo tada daugelis AAA ir indie ž...
Kaip atsisiųsti ir paleisti „Sid Meier Civilization VI“ sistemoje „Linux“
Įvadas į žaidimą „Civilization 6“ yra šiuolaikinė klasikinės koncepcijos, pristatytos „Age of Empires“ žaidimų serijoje, koncepcija. Idėja buvo gana p...
Kaip įdiegti ir žaisti „Doom“ sistemoje „Linux“
Įvadas į Doom „Doom“ serija atsirado 90-aisiais, išleidus originalų „Doom“. Tai buvo tiesioginis hitas, o nuo to laiko žaidimų serija gavo daugybę apd...