PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

наистина ли postgres ще актуализира файла на страницата, когато всички полета са равни преди и след актуализация?

Postgres (както почти всички други СУБД) няма да проверява дали целевите стойности са различни от оригиналните. Така че отговорът е:да, ще актуализира реда, дори ако стойностите са различни.

Въпреки това можете лесно да предотвратите „празната“ актуализация в този случай, като включите клауза where:

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

Клаузата where ще предотврати актуализирането на ред, който е идентичен на този, който се вмъква. За да работи правилно, вашата вложкаима за изброяване на всички колони на целевите таблици. В противен случай topic is distinct from excluded условието винаги ще бъде вярно, защото excluded ред има по-малко колони от topic ред и по този начин той е "различен" от него.

Добавянето на проверка за променени стойности е обсъждано многократно в пощенския списък и винаги е било отхвърляно. Основната причина е, че няма смисъл да имате допълнителни разходи за проверка за промени за всеки изявление само за да се справите с няколко зле написани.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. грешка при инсталиране на psycopg2, библиотеката не е намерена за -lssl

  2. Моите любими разширения на PostgreSQL - втора част

  3. Entity Framework Core PostgreSQL json заявка

  4. Напълно управляван PostgreSQL хостинг на AWS и Azure стартира навреме за наследени миграции

  5. Преглед на промените в индекса в PostgreSQL 11