sql >> Database teknologi >  >> RDS >> PostgreSQL

ville postgres virkelig opdatere sidefilen, når felterne alle er lige før og efter opdatering?

Postgres (som næsten alle andre DBMS) vil ikke kontrollere, om målværdierne er anderledes end de originale. Så svaret er:ja, det vil opdatere rækken, selvom værdierne er forskellige.

Du kan dog nemt forhindre den "tomme" opdatering i dette tilfælde ved at inkludere en where-klausul:

INSERT INTO topic (......) 
VALUES (......)
ON CONFLICT (...) 
DO UPDATE 
    set ... -- update all column
WHERE topic IS DISTINCT FROM excluded;

Where-klausulen forhindrer opdatering af en række, der er identisk med den, der indsættes. For at få det til at fungere korrekt har din indsats for at liste alle kolonner i måltabellerne. Ellers er topic is distinct from excluded betingelse vil altid være sand, fordi den excluded rækken har færre kolonner end topic række og dermed er den "adskilt" fra den.

Tilføjelse af en check for ændrede værdier er blevet diskuteret flere gange på mailinglisten og er altid blevet kasseret. Hovedårsagen er, at det ikke giver mening at have overhead til at tjekke for ændringer for hver udsagn bare for at klare nogle få dårligt skrevne.




  1. Konverter BibTex-fil til databaseposter ved hjælp af Python

  2. docker mysqld:kan ikke læse dir af '/etc/mysql/mysql.conf.d' (os fejl nr. 2 - ingen sådan fil eller mappe)

  3. Tovejs synkronisering mellem lokal mysql-database og AWS RDS

  4. Seneste datetime fra unikt mysql-indeks