sql >> Databasteknik >  >> RDS >> PostgreSQL

skulle postgres verkligen uppdatera sidfilen när alla fält är lika före och efter uppdatering?

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.




  1. Gruppera efter vecka och välj poster från aktuell vecka

  2. Nummermaskering &nls_parameter

  3. Applikationen fryser när databasen anropas

  4. markerad användare med etikett efter tid för varje månad