PostgreSQL

PostgreSQL-Upsert zu Konflikten

PostgreSQL-Upsert zu Konflikten
Der 'Upsert'-Ausdruck wird in RDBMS als Zusammenführung erkannt. Ein 'Upsert' ist bei PostgreSQL hilfreich, wenn Sie nicht mit eindeutigen Einschränkungsverletzungsfehlern aufgrund wiederholter Eingaben umgehen möchten. Wenn Sie einen generischen UPDATE-Befehl ausführen, werden die erforderlichen Anpassungen nur durchgeführt, wenn ein Datensatz den Befehlsstandards entspricht; wenn keine solchen Daten vorhanden sind, passiert nichts nothing. Wenn Sie einer Tabelle eine neue Zeile hinzufügen, aktualisiert PostgreSQL die Zeile, wenn sie zuvor existierte, oder fügt die neue Zeile ein, wenn die Zeile nicht existierte. Das SQL-Schlüsselwort „Upsert“ kombiniert die Wörter „update“ und „insert“.” Dieser Artikel zeigt Ihnen, wie die PostgreSQL 'Upsert'-Funktion funktioniert und wie Sie die 'Upsert'-Funktion verwenden, um Informationen hinzuzufügen oder zu aktualisieren, wenn die eingefügte Zeile bereits in der Tabelle vorhanden ist.

Syntax

Das Folgende ist die Syntax der 'Upsert' ON CONFLICT-Abfrage.

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

Starten Sie die PostgreSQL-Befehlszeilen-Shell

Starten Sie zunächst die PostgreSQL-Befehlszeilen-Shell über das Anwendungsmenü. Verbinden Sie es mit dem erforderlichen Server. Geben Sie den Datenbanknamen ein, an dem Sie arbeiten möchten. Um an einem anderen Port zu arbeiten, geben Sie die Portnummer und den Benutzernamen ein, mit dem Sie arbeiten möchten. Um mit den Standardparametern fortzufahren, lassen Sie die Leerzeichen unverändert und drücken Sie bei jeder Option die Eingabetaste. Fügen Sie ein Passwort für den ausgewählten Benutzernamen hinzu und Ihre Befehls-Shell sollte einsatzbereit sein.

Beispiel 1:

Jetzt können wir mit 'Upsert' im Konflikt beginnen. Angenommen, Sie haben eine Tabelle mit dem Titel „Person“ in einer ausgewählten Datenbank mit einigen Feldern, die Datensätze verschiedener Personen anzeigen. Diese Aufzeichnungen zeigen die Namen der Menschen, ihr Alter, ihre Städte und Länder. Die Tabelle wird unten angezeigt.

>> AUSWÄHLEN * VON Person;

Es ist wichtig zu wissen, wie ein Fehler oder Konflikt entstehen kann. Das Tabellenfeld 'id', das auch ein Primärschlüssel ist, enthält Werte von 1 bis 15. Wenn der Benutzer versucht, einige doppelte Datensätze in die Tabelle einzufügen, tritt der Konflikt auf.

Versuchen wir es mit der folgenden INSERT-Anweisung und fügen Sie die Datensätze in die Tabelle 'person' ein. Diese Abfrage führt zu einem Fehler, da der Wert '3' des Felds 'id' bereits in der Tabelle vorhanden ist.

>> INSERT INTO Person (ID, Name, Alter, Stadt, Land) WERTE ( '3', 'Habib', '45', 'Chakwal', 'Pakistan');

Beispiel 2: Upsert mit ON CONFLICT-Klausel

Wir verwenden die ON CONFLICT-Klausel, um die INSERT-Abfrage zu vermeiden, die diesen Fehler aufgrund des Einfügens der doppelten Datensätze verursacht. Der Befehl ON CONFLICT enthält zwei Sätze mit unterschiedlicher Verwendung.

Beispiel 3: Upsert mit DO NOTHING-Klausel

In diesem Beispiel betrachten wir die DO NOTHING-Klausel. In dieser Klausel wird ausgeführt, dass bei Fehlern oder Konflikten keine Operation ausgeführt wird. Mit anderen Worten, diese Klausel vermeidet nur Konflikte oder Fehler.

Versuchen wir also den gleichen INSERT-Befehl, den wir zuvor verwendet haben, um der Tabelle 'person' doppelte Datensätze hinzuzufügen, mit einigen angehängten Änderungen. Wir haben die ON CONFLICT-Klausel zusammen mit der DO NOTHING-Anweisung in dieser Klausel hinzugefügt. Die ON CONFLICT-Klausel wurde auf die eindeutige 'id'-Spalte angewendet. Dies bedeutet, dass, wenn der Benutzer versucht, den doppelten Wert in die Spalte 'id' einzufügen, der Konflikt vermieden und nichts unternommen wird. Wie Sie in der Abbildung unten sehen können, wird nicht einmal der neue Datensatz in die Tabelle eingefügt, noch wird der vorherige Datensatz aktualisiert.

>> EINFÜGEN IN Person (ID, Name, Alter, Stadt, Land) WERTE ( '3', 'Habib', '45', 'Chakwal', 'Pakistan') AUF KONFLIKT (ID) NICHTS TUN;

Lassen Sie uns die 'Person'-Tabelle noch einmal der Authentizität halber überprüfen. Wie Sie im Bild unten sehen können, wurden keine Änderungen an der Tabelle vorgenommen.

>> AUSWÄHLEN * VON Person;

Beispiel 2: Upsert mit DO-Klausel

Als nächstes werden wir uns die ON CONFLICT- und DO-Klauseln ansehen. Wie der Name schon sagt, führt die ___-Klausel bei Fehlern oder Konflikten eine Aktion aus, wenn ein doppelter Wert in eine Tabelle eingefügt wird. Wir verwenden den gleichen Einfügebefehl, den wir zuvor verwendet haben, um einen doppelten Datensatz in die Tabelle 'Person' einzufügen, mit einer geringfügigen Änderung. Wir haben die ON CONFLICT-Klausel mit der DO-Klausel darin hinzugefügt. Wenn der Benutzer versucht, den nicht eindeutigen Wert in die Spalte 'id' einzufügen, führt er eine Aktion aus, um den Konflikt zu vermeiden. Wir haben die UPDATE-Klausel nach der DO-Klausel verwendet, die eine Aktualisierung der Daten in der 'person'-Tabelle anzeigt. Das Schlüsselwort SET wird verwendet, um den Wert der Spalte 'name' auf den neuen Wert 'Habib' zu setzen, indem das Schlüsselwort EXCLUDED verwendet wird, wobei die 'id' zur aktuellen Zeit '3' ist. Wenn Sie die folgende Abfrage ausführen, sehen Sie, dass die Abfrage ausgeführt wurde.

>> INSERT INTO person (id, name, alter, city, country) VALUES ( '3', 'Habib', '45', 'Chakwal', 'Pakistan') ON CONFLICT (id) DO UPDATE SET name = AUSGESCHLOSSEN.Name;

Die Datensätze der Tabelle 'person' müssen abgerufen werden, um die Änderungen an der obigen Abfrage zu sehen. Wenn Sie die folgende Abfrage in der Kommandozeilen-Shell ausführen, sollten Sie die folgende Ausgabe sehen.

>> AUSWÄHLEN * VON Person;

Wie Sie in der Ausgabe unten sehen können, wurde der Name der Person auf „Habib“ aktualisiert, wobei die „ID“ „3“ ist.'

Sie können die Datensätze auch in mehr als einer Spalte aktualisieren, indem Sie das Schlüsselwort EXCLUDED in der ON CONFLICT-Klausel der INSERT-Abfrage verwenden, wie unten gezeigt.

>> INSERT INTO person (id, name, alter, city, country) VALUES ( '3', 'Habib', '45', 'Chakwal', 'Pakistan') ON CONFLICT (id) DO UPDATE SET name = EXCLUDED.Name, Stadt = AUSGESCHLOSSEN.Stadt;

Die Änderungen sind unten aufgeführt.

>> AUSWÄHLEN * VON Person;

Fazit

In diesem Artikel wurde gezeigt, wie Sie PostgreSQL 'Upsert' mit der ON CONFLICT-Klausel zusammen mit den Aktionen DO und DO NOTHING verwenden. Nachdem Sie diesen Artikel gelesen haben, hoffen wir, dass Sie die Verwendung von PostgreSQL 'Upsert . leichter verstehen.'

Beste Gamepad-Mapping-Apps für Linux
Wenn du Spiele unter Linux gerne mit einem Gamepad statt mit einem typischen Tastatur- und Maus-Eingabesystem spielst, gibt es einige nützliche Apps f...
Nützliche Tools für Linux-Spieler
Wenn Sie gerne unter Linux spielen, haben Sie wahrscheinlich Apps und Dienstprogramme wie Wine, Lutris und OBS Studio verwendet, um das Spielerlebnis ...
HD-Remastered-Spiele für Linux, die noch nie zuvor eine Linux-Version hatten
Viele Spieleentwickler und -herausgeber entwickeln HD-Remaster alter Spiele, um die Lebensdauer des Franchise zu verlängern. Bitte Fans, die Kompatibi...