sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo upsert en Postgres en conflicto en una de 2 columnas?

Sí, y este comportamiento es el predeterminado. Cualquier violación de restricción única constituye un conflicto y luego UPDATE se realiza si ON CONFLICT DO UPDATE está especificado. El INSERT declaración puede tener sólo un único ON CONFLICT cláusula, pero el conflict_target de esa cláusula puede especificar varios nombres de columna, cada uno de los cuales debe tener un índice, como UNIQUE restricción. Sin embargo, está limitado a una sola conflict_action y no tendrá información sobre qué restricción causó el conflicto al procesar esa acción. Si necesita ese tipo de información, o una acción específica dependiendo de la violación de la restricción, debe escribir una función de activación, pero luego pierde la atomicidad tan importante del INSERT ... ON CONFLICT DO ... declaración.