PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

O postgres realmente atualizaria o arquivo de página quando os campos fossem todos iguais antes e depois da atualização?


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.