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

khóa các hàng cho đến khi các postgres chọn tiếp theo

Tôi không nghĩ rằng điều này là có thể. Bạn không thể chặn quyền truy cập chỉ đọc vào một bảng (trừ khi lựa chọn đó được thực hiện xong FOR UPDATE )

Theo như tôi có thể nói, cơ hội duy nhất bạn có là sử dụng pg_advisory_lock() hàm số.
http:// www .postgresql.org / docs / current / static / functions-admin.html # FUNCTIONS-ADVISORY-LOCKS

Nhưng điều này đòi hỏi phải giải phóng "thủ công" các ổ khóa có được thông qua nó. Bạn sẽ không nhận được mở khóa tự động với điều đó.

Để khóa các hàng, bạn sẽ cần một cái gì đó như sau:

select pg_advisory_lock(id), * 
from 
( 
  select * table1 order by id limit 5
) t

(Lưu ý việc sử dụng bảng dẫn xuất cho phần LIMIT. Xem liên kết thủ công tôi đã đăng để giải thích)

Sau đó, bạn cần lưu trữ các ID đã truy xuất và sau đó gọi pg_advisory_unlock() cho mỗi ID.

Nếu mỗi quá trình luôn phát hành tất cả ID ngay lập tức, bạn có thể chỉ cần sử dụng pg_advisory_unlock_all() thay vì. Sau đó, bạn sẽ không cần phải lưu trữ các ID đã truy xuất.

Lưu ý rằng điều này sẽ không ngăn người khác đọc các hàng bằng cách sử dụng các lựa chọn "bình thường". Nó sẽ chỉ hoạt động nếu mọi quy trình truy cập vào bảng đó sử dụng cùng một kiểu lấy khó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. PostgreSQL qua cận âm

  2. `khởi tạo ':lược đồ postgres không chấp nhận phần đăng ký:postgres:@ (hoặc tên máy chủ không hợp lệ?) (URI ::InvalidURIError) với Docker

  3. SQL nhóm mối quan tâm / hàng chồng chéo

  4. kiểu do người dùng xác định làm tham số đầu vào trong hàm PostgreSQL

  5. Chỉ xuất các chế độ xem trong Postgres