sql >> Database >  >> RDS >> PostgreSQL

zou postgres het paginabestand echt bijwerken als de velden voor en na de update allemaal gelijk zijn?

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.




  1. Hulp bij tijdzonefuncties

  2. Hoe kan ik een door een orakel opgeslagen procedure geretourneerde resultatenset in een andere tabel invoegen met behulp van een tweede opgeslagen procedure?

  3. PostgreSQL Bitwise-operators met bitvariatie kunnen EN-bitreeksen van verschillende groottes niet

  4. Hoe kan ik een primaire sleutelreeks in Django veilig doorsturen?