Wie wird in Postgres bei Konflikten in einer von 2 Spalten Upgradet?

8

Ist upsert in Postgres 9.5 möglich, wenn ein Konflikt in einer von zwei Spalten in einer Tabelle auftritt? Im Grunde habe ich 2 Spalten und wenn eine Spalte eine eindeutige Integritätsbedingung verletzt, würde ich gerne eine Aktualisierungsoperation durchführen.

    
codefx 27.01.2016, 08:15
quelle

1 Antwort

5

Ja, und dieses Verhalten ist Standard. Jede eindeutige Einschränkungsverletzung stellt einen Konflikt dar, und dann wird UPDATE ausgeführt, wenn ON CONFLICT DO UPDATE angegeben wird. Die INSERT -Anweisung kann nur eine einzige ON CONFLICT -Klausel haben, aber die conflict_target dieser Klausel kann mehrere Spaltennamen angeben, von denen jeder einen Index haben muss, wie zum Beispiel eine UNIQUE -Einschränkung. Sie sind jedoch auf ein einzelnes conflict_action beschränkt und Sie haben keine Informationen darüber, welche Einschränkung den Konflikt bei der Verarbeitung dieser Aktion verursacht hat. Wenn Sie diese Art von Informationen oder eine bestimmte Aktion abhängig von der Constraint-Verletzung benötigen, sollten Sie eine Triggerfunktion schreiben, aber dann verlieren Sie die wichtige Atomizität der INSERT ... ON CONFLICT DO ... -Anweisung.

    
Patrick 27.01.2016 08:28
quelle