PostgreSQL Upsert über Konflikte

PostgreSQL Upsert über Konflikte
Der "Upsert" -Scharakter wird als Verschmelzung in RDBMs erkannt. Ein "Upsert" ist hilfreich mit PostgreSQL, wenn Sie aufgrund wiederholter Einträge nicht mit eindeutigen Fehlerverletzungsfehlern zu tun haben möchten. Wenn Sie einen generischen Aktualisierungsbefehl ausführen, treten die erforderlichen Anpassungen nur dann auf, wenn ein Datensatz den Befehlsstandards entspricht. Wenn keine solchen Daten vorhanden sind, passiert nichts. Wenn Sie einer Tabelle eine neue Zeile hinzufügen, aktualisiert PostgreSQL die Zeile, wenn sie zuvor vorhanden ist, oder enthält die neue Zeile, wenn die Zeile nicht vorhanden ist. Das SQL -Schlüsselwort "Upsert" kombiniert die Wörter "Update" und "Einfügen).In diesem Artikel wird angezeigt, wie die Funktion postgresql 'upsert' funktioniert und wie die Funktion "Upsert" verwendet wird, um Informationen hinzuzufügen oder zu aktualisieren, wenn die eingefügte Zeile bereits in der Tabelle vorhanden ist.

Syntax

Das Folgende ist die Syntax des "Upsert" auf Konfliktabfrage.

>> In table_name (column_list) valuse (value_list) in Konfliktzielaktionen einfügen;

Starten Sie Postgresql-Befehlszeilenschale

Starten Sie zunächst die PostgreSQL-Befehlszeilenschale aus dem Anwendungsmenü. Schließen Sie es mit dem erforderlichen Server an. 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 Räume so wie es ist und drücken Sie bei jeder Option 'Eingabetaste'. Fügen Sie ein Passwort für den ausgewählten Benutzernamen hinzu, und Ihre Befehlsschale sollte zur Verwendung bereit sein.

Beispiel 1:

Jetzt können wir mit "Upsert" in Konflikten beginnen. Angenommen, Sie haben eine Tabelle mit dem Titel "Person" in einer ausgewählten Datenbank mit einigen Feldern, die Datensätze von verschiedenen Personen anzeigen. Diese Aufzeichnungen zeigen die Namen der Menschen, ihrer Altersgruppen und ihrer Städte und Länder. Die Tabelle wird unten angezeigt.

>> aus der Person auswählen;

Es ist wichtig zu wissen, wie ein Fehler oder ein Konflikt auftreten können. Das Feld "ID" -Tabelle, das ebenfalls 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.

Probieren Sie die folgende Einfügungsanweisung aus und geben Sie die Datensätze in die Tabelle "Person" ein. Diese Abfrage verursacht einen Fehler, da der Wert '3' des Felds 'ID' bereits in der Tabelle vorhanden ist.

>> In die Person (ID, Name, Alter, Stadt, Land) Werte ('3', 'Habib', '45', 'Chakwal', 'Pakistan') einfügen;

Beispiel 2: Verbesserung mit der Konfliktklausel

Wir werden die Ein -Konflikt -Klausel verwenden, um die Einfügungsabfrage zu vermeiden, die diesen Fehler verursacht, da die doppelten Datensätze eingefügt werden. Der ON -Konfliktbefehl erstellt zwei Phrasen mit unterschiedlichen Verwendungen.

  • TUN: Operationen durchführen, um den Konflikt zu überwinden.
  • NICHTS TUN: Vermeiden Sie den Konflikt, ohne etwas zu tun.

Beispiel 3: Upsert With Do Nothing Claus

In diesem Beispiel werden wir uns die Do Nothing -Klausel ansehen. Diese Klausel erläutert, dass bei Fehler oder Konflikten keine Operation durchgeführt wird. Mit anderen Worten, diese Klausel vermeidet nur Konflikte oder Fehler.

Versuchen wir also denselben Einfügenbefehl, den wir zuvor verwendet haben, um die Tabelle "Person" doppelte Datensätze hinzuzufügen, wobei einige Änderungen angehängt sind. Wir haben die ON -Konfliktklausel zusammen mit der DO -nichts -Aussage in dieser Klausel hinzugefügt. Die ON -Konfliktklausel wurde auf die eindeutige "ID" -Säule angewendet. Dies bedeutet, dass, wenn der Benutzer versucht, den doppelten Wert in die Spalte "ID" einzufügen, den Konflikt vermeidet und nichts tut. Wie Sie im Bild unten sehen können, wird der neue Datensatz nicht einmal in die Tabelle eingefügt, noch aktualisiert es den vorherigen Datensatz.

>> Einfügen in die Person (ID, Name, Alter, Stadt, Land) Werte ('3', 'Habib', '45', 'Chakwal', 'Pakistan') über Konflikte (ID) tun nichts;

Lassen Sie uns die Tabelle "Person" erneut im Hinblick auf die Authentizität überprüfen. Wie Sie im Bild unten sehen können, wurden keine Änderungen an der Tabelle vorgenommen.

>> aus der Person auswählen;

Beispiel 2: Verbesserung mit DO -Klausel

Als nächstes werden wir uns die Konflikte ansehen und Klauseln machen. Wie der Name angibt, führt die ___ Klausel eine Aktion nach Fehlern oder Konflikten durch, wenn ein doppelter Wert in eine Tabelle eingefügt wird. Wir werden denselben Einfügungsbefehl verwenden, den wir zuvor verwendet haben, um einen doppelten Datensatz in die Tabelle "Person" mit einer geringfügigen Änderung einzufügen. Wir haben die ON -Konfliktklausel 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 Aktualisierungsklausel nach der DO -Klausel verwendet, die eine Aktualisierung der Daten in der Tabelle "Person" angibt. Mit dem Schlüsselwort SET wird der Wert der Spalte 'Name' auf den neuen Wert 'Habib' festgelegt, wobei das Schlüsselwort ausgeschlossen wurde, wobei die 'ID' zum aktuellen Zeitpunkt '3' ist. Wenn Sie die folgende Abfrage ausführen, werden Sie feststellen, dass die Abfrage durchgeführt wurde.

>> In die Person (ID, Name, Alter, Stadt, Land) Werte ('3', 'Habib', '45', 'Chakwal', 'Pakistan') auf Konflikt (ID) einfügen.Name;

Die Aufzeichnungen der Tabelle "Person" müssen abgerufen werden, um die Änderungen an der obigen Abfrage anzuzeigen. Wenn Sie die folgende Abfrage in der Befehlszeilenschale ausführen, sollten Sie die nachfolgende Ausgabe sehen.

>> aus der Person auswählen;

Wie Sie aus der folgenden Ausgabe 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 mit dem ausgeschlossenen Schlüsselwort in der Einsatzklausel der Einfügenabfrage aktualisieren, wie unten gezeigt.

>> In die Person (ID, Name, Alter, Stadt, Land) Werte ('3', 'Habib', '45', 'Chakwal', 'Pakistan') auf Konflikt (ID) einfügen.Name, Stadt = ausgeschlossen.Stadt;

Die Änderungen sind unten angezeigt.

>> aus der Person auswählen;

Abschluss

Dieser Artikel hat Ihnen gezeigt, wie Sie PostgreSQL "Upsert" mit der ON -Konfliktklausel zusammen mit dem Do und Tun nichts Aktionen verwenden können. Nachdem wir diesen Artikel gelesen haben, hoffen wir, dass Sie es einfacher finden, zu verstehen.''