PostgreSQL

PostgreSQL Upsert o konfliktu

PostgreSQL Upsert o konfliktu
Výraz 'Upsert' je v RDBMS rozpoznán jako sloučení. ‚Upsert 'je užitečné mít s PostgreSQL, pokud nechcete řešit jedinečné chyby narušení omezení kvůli opakovaným vstupům. Když spustíte obecný příkaz UPDATE, k nezbytným úpravám dojde, pouze pokud záznam odpovídá standardům příkazu; pokud žádná taková data neexistují, pak se nic neděje. Když do tabulky přidáte nový řádek, PostgreSQL řádek aktualizuje, pokud již dříve existoval, nebo bude nový řádek obsahovat, pokud řádek neexistoval. Klíčové slovo „Upsert“ SQL kombinuje slova „update“ a „insert.„Tento článek ukazuje, jak funguje funkce PostgreSQL„ Upsert “a jak používat funkci„ Upsert “k přidání nebo aktualizaci informací, pokud již vložený řádek v tabulce existuje.

Syntax

Následuje syntaxe dotazu 'Upsert' ON CONFLICT.

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

Spusťte PostgreSQL prostředí příkazového řádku

Začněte spuštěním prostředí příkazového řádku PostgreSQL z nabídky Aplikace. Připojte jej k požadovanému serveru. Zadejte název databáze, na které chcete pracovat. Chcete-li pracovat na jiném portu, zadejte číslo portu a uživatelské jméno, se kterým chcete pracovat. Chcete-li pokračovat ve výchozích parametrech, ponechte mezery tak, jak jsou, a u každé možnosti stiskněte klávesu Enter. Přidejte heslo pro vybrané uživatelské jméno a váš příkazový shell by měl být připraven k použití.

Příklad 1:

Nyní můžeme začít s konfliktem „Upsert“. Předpokládejme, že máte ve vybrané databázi tabulku s názvem „osoba“ s některými poli, která zobrazují záznamy různých osob. Tyto záznamy ukazují jména lidí, jejich věk a jejich města a země. Tabulka je zobrazena níže.

>> VÝBĚR * OD osoby;

Je důležité vědět, jak může dojít k chybě nebo konfliktu. Pole tabulky „id“, které je také primárním klíčem, obsahuje hodnoty od 1 do 15. Když se uživatel pokusí vložit do tabulky duplicitní záznamy, dojde ke konfliktu.

Vyzkoušejte následující příkaz INSERT vložením záznamů do tabulky „osoba“. Tento dotaz způsobí chybu, protože hodnota „3“ pole „id“ již v tabulce existuje.

>> INSERT INTO person (id, name, age, city, country) VALUES ('3', 'Habib', '45', 'Chakwal', 'Pakistan');

Příklad 2: Upsert s klauzulí ON CONFLICT

Použijeme klauzuli ON CONFLICT, abychom se vyhnuli dotazu INSERT, který způsobuje tuto chybu kvůli vložení duplicitních záznamů. Příkaz ON CONFLICT přichází se dvěma frázemi s různým použitím.

Příklad 3: Upsert s klauzulí DO NIC

V tomto příkladu se podíváme na klauzuli DO NIC. Toto ustanovení rozvíjí, že po chybě nebo konfliktu nebude provedena žádná operace. Jinými slovy, toto ustanovení se vyhne pouze konfliktu nebo omylům.

Zkusme tedy stejný příkaz INSERT, který jsme použili dříve k přidání duplicitních záznamů do tabulky „osob“, s několika připojenými změnami. Přidali jsme klauzuli ON CONFLICT spolu s výrazem DO NOTHING v této klauzuli. Klauzule ON CONFLICT byla použita na jedinečný sloupec „id“. To znamená, že když se uživatel pokusí vložit duplicitní hodnotu do sloupce „id“, vyhne se konfliktu a nedělá nic. Jak vidíte na obrázku níže, nový záznam se ani nevloží do tabulky, ani neaktualizuje předchozí záznam.

>> INSERT INTO person (id, name, age, city, country) VALUES ('3', 'Habib', '45', 'Chakwal', 'Pakistan') ON CONFLICT (id) NIC;

Z důvodu autenticity si znovu prohlédněte tabulku „osob“. Jak vidíte na obrázku níže, v tabulce nebyly provedeny žádné změny.

>> VYBRAT * OD osoby;

Příklad 2: Upsert s klauzulí DO

Dále se podíváme na klauzule ON CONFLICT a DO. Jak naznačuje jeho název, klauzule ___ provede akci při chybě nebo konfliktu při vložení duplicitní hodnoty do tabulky. K vložení duplicitního záznamu do tabulky „osoba“ použijeme stejný příkaz pro vložení, který jsme použili dříve, s menší změnou. Přidali jsme klauzuli ON CONFLICT s klauzulí DO uvnitř. Když se uživatel pokusí vložit nejednoznačnou hodnotu do sloupce „id“, provede akci, aby se konfliktu vyhnul. Používáme klauzuli UPDATE po klauzuli DO, která označuje aktualizaci dat v tabulce osob. Klíčové slovo SET se používá k nastavení hodnoty sloupce „name“ na novou hodnotu „Habib“ pomocí klíčového slova EXCLUDED, kde je „id“ v aktuálním čase „3“. Pokud provedete následující dotaz, uvidíte, že dotaz byl proveden.

>> INSERT INTO person (id, name, age, city, country) VALUES ('3', 'Habib', '45', 'Chakwal', 'Pakistan') ON CONFLICT (id) DO UPDATE SET name = EXCLUSED.název;

Chcete-li zobrazit změny výše uvedeného dotazu, je třeba načíst záznamy tabulky „osoba“. Pokud spustíte následující dotaz v prostředí příkazového řádku, měl by se zobrazit následující výstup.

>> VÝBĚR * OD osoby;

Jak můžete vidět z výstupu níže, jméno osoby bylo aktualizováno na „Habib“, kde „id“ je „3.''

Můžete také aktualizovat záznamy ve více než jednom sloupci pomocí klíčového slova EXCLUDED v klauzuli ON CONFLICT dotazu INSERT, jak je uvedeno níže.

>> INSERT INTO person (id, name, age, city, country) VALUES ('3', 'Habib', '45', 'Chakwal', 'Pakistan') ON CONFLICT (id) DO UPDATE SET name = EXCLUSED.jméno, město = VYLOUČENO.město;

Změny jsou uvedeny níže.

>> VÝBĚR * OD osoby;

Závěr

Tento článek vám ukázal, jak používat PostgreSQL 'Upsert' s klauzulí ON CONFLICT, spolu s akcemi DO a DO NIC. Po přečtení tohoto článku doufáme, že vám bude snazší pochopit, jak používat PostgreSQL 'Upsert.''

Hry Vulkan pro uživatele Linuxu
Vulkan pro uživatele Linuxu
S každou novou generací grafických karet vidíme, že vývojáři her posouvají hranice grafické věrnosti a přibližují se k fotorealismu. Ale navzdory vešk...
Hry OpenTTD vs Simutrans
OpenTTD vs Simutrans
Vytvoření vlastní simulace dopravy může být zábavné, uvolňující a mimořádně lákavé. Proto se musíte ujistit, že vyzkoušíte co nejvíce her, abyste našl...
Hry Výukový program OpenTTD
Výukový program OpenTTD
OpenTTD je jednou z nejpopulárnějších her pro obchodní simulaci. V této hře musíte vytvořit skvělé dopravní podnikání. Začnete však na začátku kolem r...