Postgres (stejně jako téměř všechny ostatní DBMS) nebude kontrolovat, zda se cílové hodnoty liší od původních. Takže odpověď zní:ano, aktualizuje řádek, i když se hodnoty liší.
V tomto případě však můžete "prázdné" aktualizaci snadno zabránit vložením klauzule where:
INSERT INTO topic (......)
VALUES (......)
ON CONFLICT (...)
DO UPDATE
set ... -- update all column
WHERE topic IS DISTINCT FROM excluded;
Klauzule where zabrání aktualizaci řádku, který je identický s tím, který se vkládá. Aby to správně fungovalo, vaše vložka má vypsat všechny sloupců cílových tabulek. Jinak se topic is distinct from excluded podmínka bude vždy pravdivá, protože excluded řádek má méně sloupců než topic řádek, a proto se od něj "odlišuje".
Přidání kontroly na změněné hodnoty bylo v mailing listu probráno několikrát a vždy bylo zahozeno. Hlavním důvodem je, že nedává smysl mít režii na kontrolu změn pro každý prohlášení jen proto, aby se vyrovnalo s několika špatně napsanými.