sql >> Databáze >  >> RDS >> PostgreSQL

opravdu by postgres aktualizoval soubor stránky, když jsou všechna pole před a po aktualizaci stejná?

Postgres (stejně jako téměř všechny ostatní DBMS) nebude kontrolovat, zda se cílové hodnoty liší od původních. Takže odpověď zní:ano, aktualizuje řádek, i když se hodnoty liší.

V tomto případě však můžete "prázdné" aktualizaci snadno zabránit vložením klauzule where:

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

Klauzule where zabrání aktualizaci řádku, který je identický s tím, který se vkládá. Aby to správně fungovalo, vaše vložka vypsat všechny sloupců cílových tabulek. Jinak se topic is distinct from excluded podmínka bude vždy pravdivá, protože excluded řádek má méně sloupců než topic řádek, a proto se od něj "odlišuje".

Přidání kontroly na změněné hodnoty bylo v mailing listu probráno několikrát a vždy bylo zahozeno. Hlavním důvodem je, že nedává smysl mít režii na kontrolu změn pro každý prohlášení jen proto, aby se vyrovnalo s několika špatně napsanými.




  1. Vrácení více hodnot ve funkci

  2. Pochopení klauzule GROUP BY

  3. Sloupec V závislosti na jiném sloupci

  4. Nelze použít uživatele postgres v nové databázi pro rails 3 na serveru ubuntu 10.04