Postgres (comme presque tous les autres SGBD) ne vérifiera pas si les valeurs cibles sont différentes de celles d'origine. La réponse est donc :oui, la ligne sera mise à jour même si les valeurs sont différentes.
Cependant, vous pouvez facilement empêcher la mise à jour "vide" dans ce cas en incluant une clause where :
INSERT INTO topic (......)
VALUES (......)
ON CONFLICT (...)
DO UPDATE
set ... -- update all column
WHERE topic IS DISTINCT FROM excluded;
La clause where empêchera la mise à jour d'une ligne identique à celle qui est insérée. Pour que cela fonctionne correctement, votre insert a pour lister tous colonnes des tables cibles. Sinon, le topic is distinct from excluded
condition sera toujours vraie car le excluded
la ligne a moins de colonnes que le topic
ligne et donc elle s'identifie "distincte" de celle-ci.
L'ajout d'une vérification des valeurs modifiées a été discuté à plusieurs reprises sur la liste de diffusion et a toujours été rejeté. La raison principale étant qu'il n'est pas logique d'avoir la charge de vérifier les modifications pour chaque déclaration juste pour faire face à quelques-unes mal écrites.