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

Khóa một hàng cụ thể trong postgres

Nếu bạn muốn khóa bảng trong một hàng đã chọn cụ thể, bạn cần phải LOCK FIRST họ sử dụng FOR UPDATE / FOR SHARE Ví dụ:trong trường hợp của bạn, nếu bạn cần khóa hàng đầu tiên, bạn thực hiện điều này:

BEGIN;

LOCK TABLE person IN ROW EXCLUSIVE MODE;

-- BLOCK 1

SELECT * FROM person WHERE name = 'John' and money = 1 FOR UPDATE;

-- BLOCK 2

UPDATE person set name = 'John 2' WHERE name = 'John' and money = 1;

END;

Trong BLOCK1 trước SELECT tuyên bố bạn không làm gì chỉ nói với cơ sở dữ liệu "Này, tôi sẽ làm một cái gì đó trong bảng này, vì vậy khi tôi làm, hãy khóa bảng này ở chế độ này". Bạn có thể chọn / cập nhật / xóa bất kỳ hàng nào.

Nhưng trong BLOCK2 khi bạn sử dụng FOR UPDATE bạn khóa hàng đó với các giao dịch khác ở các chế độ cụ thể (đọc doc để biết thêm chi tiết). Sẽ bị khóa cho đến khi giao dịch đó kết thúc.

Nếu bạn cần một ví dụ, hãy làm một bài kiểm tra và cố gắng thực hiện một SELECT ... FOR UPDATE khác trong BLOCK2 trước khi kết thúc giao dịch đầu tiên. Nó sẽ đợi giao dịch đầu tiên kết thúc và sẽ chọn ngay sau đó.

Tôi đang sử dụng nó trong một chức năng để kiểm soát các chuỗi con và nó thật tuyệt. Hy vọng bạn sẽ thích.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy cập Postgres RDS từ cụm Kubernetes trong AWS

  2. Trong pg_restore, làm cách nào bạn có thể sử dụng chuỗi kết nối postgres để chỉ định máy chủ / cơ sở dữ liệu / tên người dùng / mật khẩu?

  3. Có phải thiết kế tồi khi sử dụng các mảng trong cơ sở dữ liệu không?

  4. fe_sendauth:không cung cấp mật khẩu

  5. Điều chỉnh hiệu suất Postgresql và sử dụng bộ nhớ trong quy trình làm việc python