Süntaks
Järgmine on päringu 'Upsert ON CONFLICT' süntaks.
>> INSERT INTO tabeli_nimi (veeru_loend) VALUSE (väärtus_loend) VASTUVÕTU sihttoimingule;Käivitage PostgreSQL käsurea kest
Alustuseks käivitage menüü Rakendus rakenduse PostgreSQL käsurea kest. Ühendage see vajaliku serveriga. Sisestage andmebaasi nimi, millega soovite töötada. Teises pordis töötamiseks tippige pordi number ja kasutajanimi, millega soovite töötada. Vaikeparameetritega jätkamiseks jätke tühikud nii, nagu need on, ja vajutage iga võimaluse juures sisestusklahvi. Lisage valitud kasutajanimele parool ja teie käsk-shell peaks olema kasutamiseks valmis.
Näide 1:
Nüüd võime alustada konflikti tekitanud 'Upsert'. Oletame, et teil on valitud andmebaasis tabel pealkirjaga "inimene", millel on mõned väljad, mis näitavad erinevate isikute kirjeid. Need andmed näitavad inimeste nimesid, nende vanust ning linnu ja riike. Tabel kuvatakse allpool.
>> VALI * INIMESELT;
Oluline on teada, kuidas võib tekkida viga või konflikt. Tabeli väli id, mis on ka esmane võti, sisaldab väärtusi vahemikus 1 kuni 15. Kui kasutaja proovib tabelisse lisada duplikaatkirjeid, tekib konflikt.
Proovime järgmist INSERT-lauset, sisestades kirjed tabelisse „inimene”. See päring põhjustab vea, kuna välja „id” väärtus „3” on tabelis juba olemas.
>> INSERT INTO (isik, nimi, vanus, linn, riik) VÄÄRTUSED ('3', 'Habib', '45', 'Chakwal', 'Pakistan');
Näide 2: asendage olekuga ON CONFLICT
Kasutame klauslit ON CONFLICT, et vältida duplikaadikirjete sisestamise tõttu seda tõrke põhjustavat päringut INSERT. Käsuga ON KONFLIKT tuleb välja kaks erineva kasutusega fraasi.
- TEE: Tehke konflikti ületamiseks toiminguid.
- ÄRA TEE MIDAGI: Vältige konflikti ilma midagi tegemata.
Näide 3: asendage lause ÄRA MIDAGI
Selles näites vaatleme klauslit ÄRA MIDAGI. Selles klauslis täpsustatakse, et vigade või konfliktide korral toiminguid ei tehta. Teisisõnu väldib see klausel ainult konflikte või vigu.
Nii et proovime sama käsku INSERT, mida varem kasutasime tabelisse "inimene" duplikaatide lisamiseks, lisades mõned muudatused. Oleme lisanud klausli ON CONFLICT koos lausega ÄRA MIDAGI. Unikaalsele veerule id on rakendatud klausel ON CONFLICT. See tähendab, et kui kasutaja proovib sisestada veergu „ID” duplikaadi, väldib see konflikti ja ei tee midagi. Nagu näete alloleval pildil, ei sisesta see isegi uut kirjet tabelisse ega uuenda eelmist kirjet.
>> INSERT INTO (ID, nimi, vanus, linn, riik) VÄÄRTUSED ('3', 'Habib', '45', 'Chakwal', 'Pakistan') VASTU (id) EI TEHA MIDAGI;
Kontrollime autentsuse huvides uuesti tabelit „inimene”. Nagu näete alloleval pildil, pole tabelis muudatusi tehtud.
>> VALI * INIMESELT;
Näide 2: asendage DO klausliga
Järgmisena vaatame klausleid ON CONFLICT ja DO. Nagu selle nimi osutab, täidab ___ klausel vea või konflikti korral toimingu, kui tabelisse lisatakse duplikaatväärtus. Kasutame sama käsku, mida varem kasutasime tabelisse "inimene" duplikaadi sisestamiseks väikeste muudatustega. Oleme lisanud ON CONFLICT-klausli, mille sees on DO-klausel. Kui kasutaja üritab veergu „ID” lisada unikaalse väärtuse, teeb ta konflikti vältimiseks toimingu. Oleme kasutanud klahvi UPDATE pärast DO-klauslit, mis näitab tabeli 'isik' andmete värskendamist. Märksõna SET kasutatakse veeru „nimi” väärtuse määramiseks uueks väärtuseks „Habib”, kasutades märksõna EXCLUDED, kus 'id' on praegusel ajal '3'. Kui täidate järgmise päringu, näete, et päring on täidetud.
>> INSERT INTO (ID, nimi, vanus, linn, riik) VÄÄRTUSED ('3', 'Habib', '45', 'Chakwal', 'Pakistan') VASTUVÕTTEL (id) DO UPDATE SET name = EXCLUDED.nimi;
Tabeli 'inimene' kirjed tuleb tuua, et näha ülaltoodud päringu muudatusi. Kui täidate järgmise päringu käsurea kestas, peaksite nägema järgmist väljundit.
>> VALI * INIMESELT;Nagu näete allpool olevast väljundist, on inimese nimi muudetud nimeks „Habib”, kus „id” on „3”."
Samuti saate kirjeid värskendada rohkem kui ühes veerus, kasutades päringu INSERT klauslis ON CONFLICT olevat märksõna EXCLUDED, nagu allpool näidatud.
>> INSERT INTO (ID, nimi, vanus, linn, riik) VÄÄRTUSED ('3', 'Habib', '45', 'Chakwal', 'Pakistan') VASTUVÕTTEL (id) DO UPDATE SET name = EXCLUDED.nimi, linn = VÄLISTATUD.linn;
Muudatused on toodud allpool.
>> VALI * INIMESELT;
Järeldus
See artikkel näitas teile, kuidas kasutada PostgreSQL-i 'Upsert' klausliga ON CONFLICT koos toimingutega DO and NOT NOTHING. Pärast selle artikli lugemist loodame, et teil on lihtsam mõista, kuidas PostgreSQL 'Upsertit kasutada."