PostgreSQL ON CONFLICT führt im Konfliktfall zusätzliche Operationen aus

Vorwort

Um ON CONFLICT zu verwenden, müssen Sie den Schlüssel festlegen. Andernfalls wird der Fehler „Es gibt keine eindeutige oder exklusive Einschränkung, die mit der ON CONFLICT-Beschreibung übereinstimmt“ gemeldet.


Die Klauseln von PostgreSQL ON CONFLICTbieten mehrere Konfliktbehandlungstypen für die Behandlung von Konflikten während Einfügevorgängen. Im Folgenden sind einige gängige Typen aufgeführt:

  1. DO NOTHING: Wenn ein Konflikt auftritt, wird kein Vorgang ausgeführt und die Originaldaten bleiben unverändert.
INSERT INTO table_name (column1, column2)
VALUES (value1, value2)
ON CONFLICT (column1) DO NOTHING;

Beispiel für eine Tastenkombination, Spalte1 und Spalte2 erfordern Tastenkombinationen

INSERT INTO table_name (column1, column2)
VALUES (value1, value2)
ON CONFLICT (column1, column2) DO NOTHING;
  1. DO UPDATE SET: Führen Sie einen Aktualisierungsvorgang aus, wenn ein Konflikt auftritt. Sie können die zu aktualisierenden Felder und die aktualisierten Werte angeben.

EXCLUDEDist ein spezielles Schlüsselwort, das verwendet wird, um bei Einfügevorgängen auf widersprüchliche Zeilen zu verweisen. Wenn hier ein Konflikt auftritt, wird der Wert von Spalte2 auf Wert2 aktualisiert

INSERT INTO table_name (column1, column2)
VALUES (value1, value2)
ON CONFLICT (column1) DO UPDATE SET column2 = EXCLUDED.column2;

Dies ist ein Beispiel für ein Attribut, das im Falle eines Konflikts erhöht wird und nicht durch den übergebenen Wert von value2 beeinflusst wird.

INSERT INTO table_name (column1, column2)
VALUES (value1, value2)
ON CONFLICT (column1) DO UPDATE SET column2 = table_name.column2 + 1;

Aktualisieren Sie beispielsweise mehrere Werte. Spalte3 ist ein Attribut in Tabellenname

INSERT INTO table_name (column1, column2)
VALUES (value1, value2)
ON CONFLICT (column1) DO UPDATE SET column2 = table_name.column2 + 1, column3 = table_name.column3 - 1;
  1. DO UPDATE WHERE: Führen Sie Aktualisierungsvorgänge durch, wenn Konflikte auftreten, und aktualisieren Sie basierend auf Bedingungen.
INSERT INTO table_name (column1, column2)
VALUES (value1, value2)
ON CONFLICT (column1) DO UPDATE SET column2 = EXCLUDED.column2 WHERE column2 < EXCLUDED.column2;
  1. DO NOTHING RETURNING: Führen Sie keine Operation aus, wenn ein Konflikt auftritt, und geben Sie die eingefügte Zeile zurück, wenn kein Konflikt vorliegt.
INSERT INTO table_name (column1, column2)
VALUES (value1, value2)
ON CONFLICT (column1) DO NOTHING RETURNING *;
  1. DO UPDATE SET ... WHERE ... RETURNING: Führt einen Aktualisierungsvorgang durch, wenn ein Konflikt auftritt, aktualisiert basierend auf Bedingungen und gibt die aktualisierten Zeilen zurück.
INSERT INTO table_name (column1, column2)
VALUES (value1, value2)
ON CONFLICT (column1) DO UPDATE SET column2 = EXCLUDED.column2 WHERE column2 < EXCLUDED.column2 RETURNING *;

おすすめ

転載: blog.csdn.net/xiaohuihui1400/article/details/133300982