Postgres (som nästan alla andra DBMS) kommer inte att kontrollera om målvärdena är annorlunda än de ursprungliga. Så svaret är:ja, det kommer att uppdatera raden även om värdena är olika.
Du kan dock enkelt förhindra den "tomma" uppdateringen i det här fallet genom att inkludera en where-klausul:
INSERT INTO topic (......)
VALUES (......)
ON CONFLICT (...)
DO UPDATE
set ... -- update all column
WHERE topic IS DISTINCT FROM excluded;
Where-satsen förhindrar uppdatering av en rad som är identisk med den som infogas. För att få det att fungera korrekt har din inlaga för att lista alla kolumner i måltabellerna. Annars är topic is distinct from excluded
villkoret kommer alltid att vara sant eftersom excluded
rad har färre kolumner än topic
rad och därmed är den "skild" från den.
Att lägga till en kontroll för ändrade värden har diskuterats flera gånger på e-postlistan och har alltid kasserats. Den främsta anledningen är att det inte är meningsfullt att behöva kontrollera om det finns ändringar för varje uttalande bara för att klara av några dåligt skrivna.