2016-01-27 10 views

risposta

5

Sì, e questo comportamento è predefinito. Qualsiasi violazione del vincolo univoco costituisce un conflitto e quindi lo UPDATE viene eseguito se è specificato ON CONFLICT DO UPDATE. L'istruzione INSERT può avere solo una singola clausola ON CONFLICT, ma la clausola conflict_target può specificare più nomi di colonna ciascuno dei quali deve avere un indice, ad esempio un vincolo UNIQUE. Si è, tuttavia, limitato a un singolo conflict_action e non si disporrà di informazioni su quale vincolo ha causato il conflitto durante l'elaborazione di tale azione. Se hai bisogno di quel tipo di informazioni, o di un'azione specifica a seconda della violazione del vincolo, dovresti scrivere una funzione di trigger, ma poi perdi l'atomicità fondamentale dell'istruzione INSERT ... ON CONFLICT DO ....

+2

Non sono sicuro che sia corretto al 100%, ma la domanda è vaga. Se le 2 colonne hanno vincoli univoci diversi (cosa ho capito dalla domanda), allora il CONFLITTO ON può essere usato solo per NON FARE NULLA. Non riesci a concatenare o "disgiungere" il cosiddetto conflict_target. – Jeff

+0

@Jeff Espansione della mia risposta. – Patrick

+0

Grazie per il tuo aggiornamento. Risponde alla mia domanda su cosa sia o meno in grado di gestire due diverse violazioni con lo stesso INSERT. – Jeff

Problemi correlati