PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come inserire in Postgres un conflitto su una delle 2 colonne?

Sì, e questo comportamento è predefinito. Qualsiasi violazione del vincolo univoco costituisce un conflitto e quindi il UPDATE viene eseguito se ON CONFLICT DO UPDATE è specificato. Il INSERT l'istruzione può avere un solo ON CONFLICT clausola, ma il conflict_target di tale clausola può specificare più nomi di colonna, ognuno dei quali deve avere un indice, come un UNIQUE vincolo. Tuttavia, sei limitato a una singola conflict_action e non avrai 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 trigger ma poi perdi l'importantissima atomicità di INSERT ... ON CONFLICT DO ... dichiarazione.