Postgres (zoals bijna alle andere DBMS) zal niet controleren of de doelwaarden verschillen van de originele. Het antwoord is dus:ja, het zal de rij bijwerken, zelfs als de waarden verschillen.
U kunt in dit geval echter eenvoudig de "lege" update voorkomen door een waar-clausule op te nemen:
INSERT INTO topic (......)
VALUES (......)
ON CONFLICT (...)
DO UPDATE
set ... -- update all column
WHERE topic IS DISTINCT FROM excluded;
De where-clausule voorkomt dat een rij wordt bijgewerkt die identiek is aan de rij die wordt ingevoegd. Om dat correct te laten werken, heeft uw invoeging heeft om alle weer te geven kolommen van de doeltabellen. Anders is het topic is distinct from excluded
voorwaarde zal altijd waar zijn omdat de excluded
rij heeft minder kolommen dan het topic
rij en is er dus "onderscheidend" van.
Het toevoegen van een cheque voor gewijzigde waarden is meerdere keren besproken op de mailinglijst en is altijd weggegooid. De belangrijkste reden is dat het geen zin heeft om de overhead te hebben van het controleren op wijzigingen voor elke verklaring alleen maar om een paar slecht geschreven uitspraken het hoofd te bieden.