Postgres (som næsten alle andre DBMS) vil ikke kontrollere, om målværdierne er anderledes end de originale. Så svaret er:ja, det vil opdatere rækken, selvom værdierne er forskellige.
Du kan dog nemt forhindre den "tomme" opdatering i dette tilfælde ved at inkludere en where-klausul:
INSERT INTO topic (......)
VALUES (......)
ON CONFLICT (...)
DO UPDATE
set ... -- update all column
WHERE topic IS DISTINCT FROM excluded;
Where-klausulen forhindrer opdatering af en række, der er identisk med den, der indsættes. For at få det til at fungere korrekt har din indsats for at liste alle kolonner i måltabellerne. Ellers er topic is distinct from excluded
betingelse vil altid være sand, fordi den excluded
rækken har færre kolonner end topic
række og dermed er den "adskilt" fra den.
Tilføjelse af en check for ændrede værdier er blevet diskuteret flere gange på mailinglisten og er altid blevet kasseret. Hovedårsagen er, at det ikke giver mening at have overhead til at tjekke for ændringer for hver udsagn bare for at klare nogle få dårligt skrevne.