Ja, och detta beteende är standard. Varje överträdelse av unika begränsningar utgör en konflikt och sedan UPDATE
utförs om ON CONFLICT DO UPDATE
är specificerad. INSERT
sats kan bara ha en enda ON CONFLICT
satsen, men conflict_target
i den satsen kan ange flera kolumnnamn som var och en måste ha ett index, till exempel en UNIQUE
begränsning. Du är dock begränsad till en enda conflict_action
och du kommer inte att ha information om vilken begränsning som orsakade konflikten när du bearbetar den åtgärden. Om du behöver den typen av information, eller specifik åtgärd beroende på begränsningsöverträdelsen, bör du skriva en triggerfunktion men då förlorar du den avgörande atomiciteten i INSERT ... ON CONFLICT DO ...
uttalande.