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.
Tags und Links postgresql upsert postgresql-9.5