Как без предварительной проверки существования записи по первичному ключу, сразу вставлять ее, а при возникновения конфликта — просто обновить? И все за раз. Необходимо воспользоваться предложением on conflict … do …
Подробней об этом расскажет страница документации.
Я покажу пример, как при возникновении нарушения уникальности первичного ключа обновить данные.
Где таблица products содержит следующие поля: product_id, product_name, amount_in_stock. products_pkey — ограничение первичного ключа. В итоге, если вставляется запись с уже имеющимся в таблице product_id = 111, она будет просто обновлена с указанными значениями.
Для обновления записи теми же значениями, что указываются в перечне values(), необходимо использовать обращение excluded: