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

Tại sao giao dịch có thể tuần tự hóa của PostgreSQL lại nghĩ rằng đây là xung đột?

Bạn có thể khắc phục sự cố này với chỉ mục sau:

CREATE INDEX accounts_user_idx ON accounts(user_id);

Vì có quá ít dữ liệu trong bảng ví dụ của bạn, bạn sẽ phải yêu cầu PostgreSQL sử dụng quét chỉ mục:

SET enable_seqscan=off;

Bây giờ ví dụ của bạn sẽ hoạt động!

Nếu điều đó có vẻ giống như ma thuật đen, hãy xem các kế hoạch thực thi truy vấn của SELECT của bạn và UPDATE tuyên bố.

Nếu không có chỉ mục, cả hai sẽ sử dụng quét tuần tự trên bảng, do đó đọc tất cả các hàng trong bảng . Vì vậy, cả hai giao dịch sẽ kết thúc bằng một SIReadLock trên toàn bộ bảng.

Điều này gây ra lỗi tuần tự hóa.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ràng buộc loại trừ `EXCLUDE USING gist (c WITH &&) 'nghĩa là gì?

  2. làm thế nào để trả về bảng tạm thời từ hàm postgres?

  3. chuỗi postgresql nextval trong giản đồ

  4. Vấn đề ngủ đông:phải xuất hiện trong mệnh đề GROUP BY hoặc được sử dụng trong một hàm tổng hợp

  5. học thuyết Dbal querybuilder dưới dạng tuyên bố chuẩn bị