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.
- TUN: Führen Sie Operationen durch, um den Konflikt zu überwinden.
- NICHTS TUN: Vermeiden Sie den Konflikt, ohne etwas zu tun.
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.'