Разница между ON CONFLICT DO NOTHING и ON CONFLICT DO UPDATE в PostgreSQL заключается в том, что они выполняют разные действия в случае конфликта при добавлении строки. 12
ON CONFLICT DO NOTHING отменяет добавление строки. 1 По сути, это действие не вносит изменений, но подавляет ошибку, которая обычно возникает при попытке вставить строку, нарушающую условие. 2
ON CONFLICT DO UPDATE изменяет существующую строку, вызвавшую конфликт со строкой, предложенной для добавления. 1 Синтаксис обновления при этом такой же, как у обычной команды UPDATE. 2
Выбор между этими вариантами зависит от того, как добавляемые данные относятся к существующему контенту. 2 DO NOTHING позволяет молча пропускать конфликтующие строки, позволяя добавить любые дополнительные записи, которые не конфликтуют. 2 DO UPDATE даёт возможность условно изменить существующую запись при возникновении конфликта, при этом можно использовать значения из исходной предложенной строки. 2