PostgreSQL

PostgreSQL uppåt på konflikt

PostgreSQL uppåt på konflikt
UPS-uttrycket känns igen som en sammanslagning i RDBMS. En "Upsert" är bra att ha med PostgreSQL om du inte vill ta itu med unika fel i restriktionsbrott på grund av upprepade poster. När du kör ett generiskt UPDATE-kommando kommer nödvändiga justeringar endast att ske om en post passar kommandostandarderna. om det inte finns några sådana uppgifter händer ingenting. När du lägger till en ny rad i en tabell kommer PostgreSQL att uppdatera raden om den fanns tidigare, annars kommer den nya raden att inkluderas om raden inte fanns. SQL-nyckelordet "Upsert" kombinerar orden "uppdatera" och "infoga.”Den här artikeln visar hur PostgreSQL-funktionen 'Upsert' fungerar, samt hur du använder funktionen 'Upsert' för att lägga till eller uppdatera information om den infogade raden redan finns i tabellen.

Syntax

Följande är syntaxen för "Upsert" ON CONFLICT-frågan.

>> INSÄTTA I tabellnamn (kolumnlista) VALUS (värde_lista) PÅ KONFLIKT målåtgärd;

Starta PostgreSQL Command-Line Shell

Till att börja med startar du PostgreSQL-kommandoradsskalet från applikationsmenyn. Anslut den till önskad server. Ange databasnamnet som du vill arbeta med. För att arbeta på en annan port, skriv portnumret och användarnamnet som du vill arbeta med. För att fortsätta med standardparametrarna, lämna mellanslag som de är och tryck 'Enter' vid varje alternativ. Lägg till ett lösenord för det valda användarnamnet och ditt kommandoskal ska vara klart att användas.

Exempel 1:

Nu kan vi komma igång med 'Upsert' i konflikt. Anta att du har en tabell med titeln "person" i en vald databas med några fält som visar register över olika personer. Dessa register visar namnen på folket, deras ålder och deras städer och länder. Tabellen visas nedan.

>> VÄLJ * FRÅN person;

Det är viktigt att veta hur ett fel eller en konflikt kan uppstå. Tabellfältet "id", som också är en primär nyckel, innehåller värden från 1 till 15. När användaren försöker infoga några dubbletter i tabellen uppstår konflikten.

Låt oss prova följande INSERT-uttalande och infoga posterna i tabellen 'person'. Denna fråga kommer att orsaka ett fel eftersom värdet '3' i fältet 'id' redan finns i tabellen.

>> INSÄTTA I person (id, namn, ålder, stad, land) VÄRDEN ('3', 'Habib', '45', 'Chakwal', 'Pakistan');

Exempel 2: Upsert With ON CONFLICT Clause

Vi kommer att använda ON CONFLICT-klausulen för att undvika INSERT-frågan som orsakar detta fel på grund av att infoga dubbletterna. Kommandot ON CONFLICT kommer med två fraser med olika användningsområden.

Exempel 3: Uppåt med DO NOTHING-klausul

I det här exemplet kommer vi att titta på DO NOTHING-klausulen. Denna klausul utarbetar att ingen åtgärd kommer att utföras vid fel eller konflikt. Med andra ord kommer denna klausul bara att undvika konflikter eller fel.

Så, låt oss prova samma INSERT-kommando som vi använde tidigare för att lägga till dubbla poster i tabellen "person", med några ändringar bifogade. Vi har lagt till ON CONFLICT-satsen, tillsammans med uttalandet DO NOTHING i denna sats. ON CONFLICT-klausulen har tillämpats på den unika kolumnen "id". Detta innebär att när användaren försöker infoga det dubbla värdet i kolumnen "id" kommer det att undvika konflikten och göra ingenting. Som du kan se på bilden nedan infogar den inte ens den nya posten i tabellen, och den uppdaterar inte heller den tidigare posten.

>> INSÄTTA I person (id, namn, ålder, stad, land) VÄRDEN ('3', 'Habib', '45', 'Chakwal', 'Pakistan') PÅ KONFLIK (id) INGENTING;

Låt oss kontrollera tabellen "person" igen för äkthetens skull. Som du kan se på bilden nedan har inga ändringar gjorts i tabellen.

>> VÄLJ * FRÅN person;

Exempel 2: Uppåt med DO-klausul

Därefter ska vi titta på ON CONFLICT och DO-klausulerna. Som namnet antyder kommer ___-satsen att utföra en åtgärd vid fel eller konflikt när ett duplikatvärde infogas i en tabell. Vi kommer att använda samma infoga kommando som vi tidigare använde för att infoga en dubblettpost i 'person' -tabellen, med en mindre ändring. Vi har lagt till ON CONFLICT-satsen med DO-satsen inuti den. När användaren försöker infoga det icke-unika värdet i kolumnen "id" kommer den att utföra en åtgärd för att undvika konflikten. Vi har använt UPDATE-klausulen efter DO-klausulen, vilket indikerar en uppdatering av data i 'person-tabellen'. SET-nyckelordet används för att ställa in värdet för kolumnen "namn" till det nya värdet "Habib" med hjälp av nyckelordet EXKLUDERAT där "id" är "3" vid den aktuella tiden. Om du kör följande fråga ser du att frågan har utförts.

>> INSÄTTA I person (id, namn, ålder, stad, land) VÄRDEN ('3', 'Habib', '45', 'Chakwal', 'Pakistan') PÅ KONFLIK (id) UPPDATERA INSTÄLLNAMN = EXKLUDERAT.namn;

Posterna för "person" -tabellen måste hämtas för att se ändringarna i ovanstående fråga. Om du kör följande fråga i kommandoradsskalet bör du se den efterföljande utmatningen.

>> VÄLJ * FRÅN person;

Som du kan se från utdata nedan har namnet på personen uppdaterats till 'Habib' där 'id' är '3.''

Du kan också uppdatera posterna i mer än en kolumn med hjälp av EXKLUDERAT nyckelord i avsnittet ON CONFLICT i INSERT-frågan, som visas nedan.

>> INSÄTTA I person (id, namn, ålder, stad, land) VÄRDEN ('3', 'Habib', '45', 'Chakwal', 'Pakistan') PÅ KONFLIK (id) UPPDATERA INSTÄLLNAMN = EXKLUDERAT.namn, stad = EXKLUDERAD.stad;

Ändringarna visas nedan.

>> VÄLJ * FRÅN person;

Slutsats

Den här artikeln visade dig hur du använder PostgreSQL 'Upsert' med ON CONFLICT-klausulen, tillsammans med DO och DO NOTHING-åtgärderna. Efter att ha läst den här artikeln hoppas vi att du har lättare att förstå hur du använder PostgreSQL 'Upsert.''

Hur man utvecklar ett spel på Linux
För ett decennium sedan skulle inte många Linux-användare förutsäga att deras favoritoperativsystem en dag skulle vara en populär spelplattform för ko...
Portar med öppen källkod för kommersiella spelmotorer
Gratis, öppen källkod och plattformsmekaniska rekreationer kan användas för att spela gamla såväl som några av de ganska senaste speltitlarna. I den h...
Bästa kommandoradsspel för Linux
Kommandoraden är inte bara din största allierade när du använder Linux, det kan också vara källan till underhållning eftersom du kan använda den för a...