Szintaxis
A következő az 'Upsert ON CONFLICT' lekérdezés szintaxisa.
>> INSERT INTO tábla_neve (oszlop_lista) VALUSE (érték_lista) BE KONFLIKTUS célművelet;Indítsa el a PostgreSQL parancssori héjat
Először indítsa el a PostgreSQL parancssori héjat az Alkalmazás menüből. Csatlakoztassa a szükséges szerverhez. Írja be az adatbázis nevét, amelyen dolgozni szeretne. Ha másik porton szeretne dolgozni, írja be a portszámot és a felhasználónévet, amellyel dolgozni szeretne. Az alapértelmezett paraméterek folytatásához hagyja a szóközöket a jelenlegi állapotban, és minden lehetőségnél nyomja meg az „Enter” gombot. Adjon meg jelszót a kiválasztott felhasználónévhez, és a parancssorának készen kell állnia a használatra.
1. példa:
Most elkezdhetjük az „Upsert” -t konfliktusban. Tegyük fel, hogy van egy kiválasztott adatbázisban egy "személy" nevű tábla, amely néhány mezővel különböző személyek rekordjait mutatja. Ezek a feljegyzések mutatják az emberek nevét, életkorát, városait és országait. A táblázat alább látható.
>> SELECT * FROM személy;
Fontos tudni, hogy hogyan keletkezhet hiba vagy konfliktus. Az 'id' tábla mező, amely szintén elsődleges kulcs, 1 és 15 közötti értékeket tartalmaz. Amikor a felhasználó megpróbál beilleszteni néhány duplikált rekordot a táblába, akkor az ütközés bekövetkezik.
Próbáljuk meg a következő INSERT utasítást, beszúrva a rekordokat a 'személy' táblába. Ez a lekérdezés hibát okoz, mert az „id” mező „3” értéke már létezik a táblázatban.
>> INSERT INTO személy (azonosító, név, életkor, város, ország) ÉRTÉKEK ('3', 'Habib', '45', 'Chakwal', 'Pakisztán');
2. példa: Helyezze be az ON CONFLICT záradékkal
Az ON CONFLICT záradékot használjuk az INSERT lekérdezés elkerülésére, amely ezt a hibát okozza az ismétlődő rekordok beszúrása miatt. Az ON CONFLICT parancs két, különböző felhasználású frázissal áll elő.
- DO: Végezzen műveleteket a konfliktus leküzdésére.
- NE CSINÁLJ SEMMIT: Kerülje el a konfliktust anélkül, hogy bármit is tenne.
3. példa: Helyezze fel a DO NOTHING záradékot
Ebben a példában a DO NOTHING záradékot vesszük szemügyre. Ez a záradék részletezi, hogy hiba vagy konfliktus esetén semmilyen műveletet nem hajtanak végre. Más szavakkal, ez a záradék csak elkerüli az ütközéseket vagy hibákat.
Próbáljuk meg ugyanazt az INSERT parancsot, amelyet korábban használtunk duplikált rekordok hozzáadásához a "személy" táblához, néhány változtatással kiegészítve. Hozzáadtuk az ON CONFLICT záradékot, a DO NOTHING kijelentéssel együtt. Az ON CONFLICT záradékot alkalmaztuk az egyedi 'id' oszlopra. Ez azt jelenti, hogy amikor a felhasználó megpróbálja beilleszteni az ismétlődő értéket az „id” oszlopba, elkerüli a konfliktust és nem tesz semmit. Amint az alábbi képen látható, nem is illeszti be az új rekordot a táblázatba, és nem is frissíti az előző rekordot.
>> INSERT INTO személy (azonosító, név, életkor, város, ország) ÉRTÉKEK ('3', 'Habib', '45', 'Chakwal', 'Pakisztán') A KONFLIKTUSOKON (id) SEMMI;
Ellenőrizzük még egyszer a „személy” táblázatot a hitelesség kedvéért. Amint az alábbi képen látható, a táblázatban nem történt változás.
>> SELECT * FROM személy;
2. példa: Utasítás DO záradékkal
Ezután megvizsgáljuk az ON CONFLICT és a DO záradékokat. Ahogy a neve is jelzi, a ___ záradék hibát vagy ütközést fog végrehajtani, amikor egy duplikált értéket beillesztenek egy táblába. Ugyanazt az insert parancsot fogjuk használni, amelyet korábban használtunk egy duplikátum bejegyzés beillesztésére a 'személy' táblába, kisebb változtatásokkal. Hozzáadtuk az ON CONFLICT záradékot, benne a DO záradékot. Amikor a felhasználó megpróbálja beilleszteni a nem egyedi értéket az „id” oszlopba, a konfliktus elkerülése érdekében műveletet hajt végre. A DO záradék után használtuk az UPDATE záradékot, amely a 'személy' táblázat adatainak frissítését jelzi. A SET kulcsszóval a „név” oszlop értékét az új, „Habib” értékre állíthatjuk, a KIZÁRVA kulcsszóval, ahol az „id” az adott pillanatban „3”. Ha végrehajtja a következő lekérdezést, látni fogja, hogy a lekérdezés végrehajtásra került.
>> INSERT INTO személy (azonosító, név, életkor, város, ország) ÉRTÉKEK ('3', 'Habib', '45', 'Chakwal', 'Pakisztán') KONFLIKTUSON (id) DO UPDATE SET SET name = EXCLUDED.név;
A fenti lekérdezés változásainak megtekintéséhez be kell tölteni a „személy” tábla rekordjait. Ha a következő lekérdezést hajtja végre a parancssori héjban, látnia kell a következő kimenetet.
>> SELECT * FROM személy;Amint az alábbi kimenetből látható, a személy neve „Habib” -ra változott, ahol az „id” '3."
Az INSERT lekérdezés ON CONFLICT záradékában található EXCLUDED kulcsszó segítségével az oszlopokat egynél több oszlopban is frissítheti, az alábbiak szerint.
>> INSERT INTO személy (azonosító, név, életkor, város, ország) ÉRTÉKEK ('3', 'Habib', '45', 'Chakwal', 'Pakisztán') KONFLIKTUSON (id) DO UPDATE SET SET name = EXCLUDED.név, város = KIZÁRVA.város;
A változásokat az alábbiakban mutatjuk be.
>> SELECT * FROM személy;
Következtetés
Ez a cikk bemutatta, hogyan kell használni a PostgreSQL 'Upsert' funkciót az ON CONFLICT záradékkal, a DO and DO NOTHING műveletekkel együtt. A cikk elolvasása után reméljük, hogy könnyebben meg fogja érteni, hogyan kell használni a PostgreSQL 'Upsert alkalmazást."