PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Postgres có thực sự cập nhật tệp trang khi tất cả các trường đều bằng nhau trước và sau khi cập nhật không?

Postgres (giống như gần như tất cả các DBMS khác) sẽ không kiểm tra xem các giá trị đích có khác với các giá trị ban đầu hay không. Vì vậy, câu trả lời là:có, nó sẽ cập nhật hàng ngay cả khi các giá trị khác nhau.

Tuy nhiên, bạn có thể dễ dàng ngăn cập nhật "trống" trong trường hợp này bằng cách thêm mệnh đề where:

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

Mệnh đề where sẽ ngăn cập nhật một hàng giống với hàng đang được chèn. Để làm cho điều đó hoạt động chính xác, phụ trang của bạn để liệt kê tất cả cột của các bảng mục tiêu. Nếu không, chủ đề topic is distinct from excluded điều kiện sẽ luôn đúng vì excluded hàng có ít cột hơn thì topic hàng và do đó id "khác biệt" với nó.

Việc thêm kiểm tra các giá trị đã sửa đổi đã được thảo luận nhiều lần trong danh sách gửi thư và luôn bị loại bỏ. Lý do chính là, không có ý nghĩa gì khi có chi phí kiểm tra các thay đổi cho mọi chỉ để đối phó với một vài câu viết không hay.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thông số JDBC có ngăn chặn 'không?' từ được sử dụng như một toán tử (bên ngoài dấu ngoặc kép)?

  2. Hệ điều hành Android và postgreSQL

  3. Postgresql làm thế nào để chọn các giá trị trong cột từ một bảng mà chỉ có sẵn trong một bảng khác?

  4. Làm cách nào để tắt tạm thời các trình kích hoạt trong PostgreSQL?

  5. Chia mảng JSON khổng lồ (95Mb) thành nhiều phần nhỏ hơn?