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

Khóa hàng SQLAlchemy with_for_update không hoạt động?

2 phiên sẽ giống như sau:

user = Student.query.with_for_update(of=Student, nowait=True).filter(Student.id == 122).first()
user.type = 1
db.session.commit()

user = Student.query.with_for_update(of=Student, nowait=True).filter(Student.id == 122).first()
user.type -= 1
db.session.commit()

Để FOR UPDATE để hoạt động bình thường, tất cả các giao dịch liên quan có ý định cập nhật hàng cần sử dụng nó.

Trong ví dụ của bạn, phiên 2 không sử dụng with_for_update . Vì bạn không yêu cầu nó sử dụng FOR UPDATE , có thể miễn phí đọc giá trị cũ của hàng (vì giá trị mới chưa được cam kết và khóa không chặn trình đọc thuần túy), sau đó sửa đổi giá trị trong bộ nhớ đó rồi ghi lại.

Nếu bạn không muốn sử dụng FOR UPDATE ở mọi nơi mà bạn đọc hàng với ý định thay đổi nó, thay vào đó, bạn có thể sử dụng isolation level serializable mọi nơi. Tuy nhiên, nếu bạn làm vậy, mọi thứ có thể không chặn, mà sẽ có vẻ thành công cho đến khi thực hiện cam kết, sau đó phát sinh các lỗi tuần tự hóa cần được phát hiện và xử lý.

Lưu ý: Ví dụ chỉnh sửa trước của bạn lẽ ra phải hoạt động vì cả hai phiên đều được gắn nhãn with_for_update .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hành vi kỳ lạ trong Postgresql

  2. Làm cách nào để xác định cột ARRAY trong phần di chuyển Postgresql của Phần tiếp theo?

  3. Truy vấn phù hợp với thẻ chuỗi

  4. Postgres UPDATE với ORDER BY, làm thế nào để làm điều đó?

  5. Khóa chính cho nhiều cột trong PostgreSQL?