O Postgres (como quase todos os outros DBMS) não verificará se os valores de destino são diferentes dos originais. Portanto, a resposta é:sim, ele atualizará a linha mesmo que os valores sejam diferentes.
No entanto, você pode facilmente evitar a atualização "vazia" neste caso, incluindo uma cláusula where:
INSERT INTO topic (......)
VALUES (......)
ON CONFLICT (...)
DO UPDATE
set ... -- update all column
WHERE topic IS DISTINCT FROM excluded;
A cláusula where impedirá a atualização de uma linha idêntica à que está sendo inserida. Para que isso funcione corretamente, sua inserção tem para listar todos colunas das tabelas de destino. Caso contrário, o
topic is distinct from excluded
condição sempre será verdadeira porque o excluded
linha tem menos colunas que o topic
linha e, portanto, é "distinto" dela. Adicionar uma verificação para valores modificados foi discutido várias vezes na lista de discussão e sempre foi descartado. A principal razão é que não faz sentido ter a sobrecarga de verificar alterações para todas declaração apenas para lidar com alguns mal escritos.