Postgres (както почти всички други СУБД) няма да проверява дали целевите стойности са различни от оригиналните. Така че отговорът е:да, ще актуализира реда, дори ако стойностите са различни.
Въпреки това можете лесно да предотвратите „празната“ актуализация в този случай, като включите клауза where:
INSERT INTO topic (......)
VALUES (......)
ON CONFLICT (...)
DO UPDATE
set ... -- update all column
WHERE topic IS DISTINCT FROM excluded;
Клаузата where ще предотврати актуализирането на ред, който е идентичен на този, който се вмъква. За да работи правилно, вашата вложкаима за изброяване на всички колони на целевите таблици. В противен случай topic is distinct from excluded
условието винаги ще бъде вярно, защото excluded
ред има по-малко колони от topic
ред и по този начин той е "различен" от него.
Добавянето на проверка за променени стойности е обсъждано многократно в пощенския списък и винаги е било отхвърляно. Основната причина е, че няма смисъл да имате допълнителни разходи за проверка за промени за всеки изявление само за да се справите с няколко зле написани.