Sintakse
Šī ir vaicājuma “Upsert ON CONFLICT” sintakse.
>> INSERT INTO table_name (column_list) VALUSE (value_list) ON CONFLICT target action;Palaidiet PostgreSQL komandrindas apvalku
Lai sāktu, izvēlnē Lietojumprogramma palaidiet komandrindas čaulu PostgreSQL. Pievienojiet to vajadzīgajam serverim. Ievadiet datu bāzes nosaukumu, ar kuru vēlaties strādāt. Lai strādātu ar citu portu, ierakstiet porta numuru un lietotājvārdu, ar kuru vēlaties strādāt. Lai turpinātu ar noklusējuma parametriem, atstājiet atstarpes tādas, kādas tās ir, un pie katras opcijas nospiediet taustiņu Enter. Pievienojiet paroli atlasītajam lietotājvārdam, un jūsu komandu čaulai jābūt gatavai lietošanai.
1. piemērs:
Tagad mēs varam sākt darbu ar “Upsert” konfliktā. Pieņemsim, ka atlasītajā datu bāzē jums ir tabula ar nosaukumu “persona” ar dažiem laukiem, kas parāda dažādu personu ierakstus. Šie ieraksti parāda cilvēku vārdus, vecumu, kā arī viņu pilsētas un valstis. Tabula ir parādīta zemāk.
>> SELECT * NO personas;
Ir svarīgi zināt, kā var rasties kļūda vai konflikts. Tabulas laukā id, kas ir arī galvenā atslēga, ir vērtības no 1 līdz 15. Kad lietotājs mēģina tabulā ievietot dažus ierakstu dublikātus, rodas konflikts.
Izmēģināsim šo INSERT paziņojumu, ierakstus ievietojot tabulā “person”. Šis vaicājums radīs kļūdu, jo lauka “id” vērtība “3” jau pastāv tabulā.
>> IEVADĪT personai (ID, vārds, vecums, pilsēta, valsts) VĒRTĪBAS ('3', 'Habib', '45', 'Chakwal', 'Pakistan');
2. piemērs: Aizstājiet klauzulu ar ON CONFLICT
Mēs izmantosim klauzulu ON CONFLICT, lai izvairītos no vaicājuma INSERT, kas izraisa šo kļūdu ierakstu dublikātu ievietošanas dēļ. Komanda ON CONFLICT nāk klajā ar divām frāzēm ar dažādiem lietojumiem.
- DARĪT: Veiciet operācijas, lai pārvarētu konfliktu.
- NEKO NEDARĪT: Izvairieties no konflikta, neko nedarot.
3. piemērs: Pārliecinieties ar klauzulu NEKO nedarīt
Šajā piemērā mēs aplūkosim klauzulu NEKO NEDARĪT. Šajā klauzulā ir precizēts, ka kļūda vai konflikts netiks veikts. Citiem vārdiem sakot, šī klauzula tikai novērsīs konfliktus vai kļūdas.
Izmēģināsim to pašu komandu INSERT, kuru izmantojām iepriekš, lai tabulai “persona” pievienotu ierakstu dublikātus, pievienojot dažas izmaiņas. Mēs esam pievienojuši klauzulu ON CONFLICT kopā ar paziņojumu DO NOTHING šajā klauzulā. Klauja ON CONFLICT ir lietota unikālajai kolonnai “id”. Tas nozīmē, ka tad, kad lietotājs mēģina ievietot kolonnas “id” dublikāta vērtību, tas izvairīsies no konflikta un neko nedarīs. Kā redzat zemāk redzamajā attēlā, tas pat neievietos jauno ierakstu tabulā, kā arī neatjauninās iepriekšējo ierakstu.
>> IERAKSTIET personai (ID, vārds, vecums, pilsēta, valsts) VĒRTĪBAS ('3', 'Habib', '45', 'Chakwal', 'Pakistan') PAR KONFLIKTU (id) NEKO NEDARĪT;
Pārbaudīsim tabulu “persona” vēlreiz autentiskuma labad. Kā redzat attēlā zemāk, tabulā nav veiktas izmaiņas.
>> SELECT * NO personas;
2. piemērs: Ievietojiet klauzulu ar DO
Tālāk mēs aplūkosim klauzulas ON CONFLICT un DO. Kā norāda nosaukums, klauzula ___ veiks kļūdas vai konflikta gadījumā, kad tabulā tiks ievietota vērtības dublikāts. Mēs izmantosim to pašu komandu insert, kuru iepriekš izmantojām, lai tabulā “persona” ievietotu ieraksta dublikātu, ar nelielām izmaiņām. Mēs esam pievienojuši klauzulu ON CONFLICT ar DO klauzulu tās iekšpusē. Kad lietotājs mēģina kolonnā “id” ievietot unikālo vērtību, viņš veiks darbību, lai izvairītos no konflikta. Pēc DO klauzulas mēs izmantojām klauzulu UPDATE, kas norāda tabulas “persona” datu atjauninājumu. Atslēgvārdu SET izmanto, lai slejas “nosaukums” vērtību iestatītu uz jauno vērtību “Habib”, izmantojot atslēgvārdu EXCLUDED, kur pašreizējais “id” ir “3”. Izpildot šo vaicājumu, redzēsit, ka vaicājums ir izpildīts.
>> INSERT INTO persona (id, vārds, vecums, pilsēta, valsts).nosaukums;
Tabulas “person” ieraksti ir jāielādē, lai redzētu izmaiņas iepriekš minētajā vaicājumā. Ja izpildāt šo vaicājumu komandrindas čaulā, jums vajadzētu redzēt nākamo izvadi.
>> SELECT * NO personas;Kā redzams zemāk esošajā izvadā, personas vārds ir atjaunināts uz “Habib”, kur “id” ir “3."
Varat arī atjaunināt ierakstus vairākās kolonnās, izmantojot INSERT vaicājuma ON CONFLICT klauzulu EXCLUDED, kā parādīts zemāk.
>> INSERT INTO persona (id, vārds, vecums, pilsēta, valsts).nosaukums, pilsēta = IZSLĒGTS.pilsēta;
Izmaiņas ir parādītas zemāk.
>> SELECT * NO personas;
Secinājums
Šis raksts parādīja, kā izmantot PostgreSQL 'Upsert' ar klauzulu ON CONFLICT, kā arī ar DO un NOT NOTHING darbībām. Pēc šī raksta izlasīšanas mēs ceram, ka jums būs vieglāk saprast, kā lietot PostgreSQL 'Upsert."