Phiên bản được hỗ trợ:hiện tại(17) /16 / 15 / 14 / 13
Phiên bản phát triển:18 / Devel
Phiên bản không được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1
Tài liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cùng một trang chohiện tạiPhiên bản hoặc một trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

50.5. Chỉ kèo bóng đá pháp kiểm tra tính duy nhất

PostgreSQLThực thi SQL Các ràng buộc kèo bóng đá pháp độc đáo bằng cách sử dụngĐộc đáo chỉ kèo bóng đá pháp, là những chỉ kèo bóng đá pháp không cho phép nhiều kèo bóng đá pháp với các khóa giống hệt nhau. Một phương thức truy cập hỗ trợ tính năng này đặtpg_am.AmcanuniqueĐúng. (Hiện tại, chỉ có B-Tree hỗ trợ nó.)

Vì MVCC, luôn luôn cần phải cho phép trùng lặp Các kèo bóng đá pháp nhập tồn tại về mặt vật lý trong một chỉ kèo bóng đá pháp: các kèo bóng đá pháp có thể tham khảo đến các phiên bản liên tiếp của một hàng logic duy nhất. Hành vi chúng tôi thực sự muốn thực thi là không có ảnh chụp nhanh MVCC nào có thể bao gồm Hai hàng với các phím chỉ số bằng nhau. Điều này bị phá vỡ vào Các trường hợp sau phải được kiểm tra khi chèn một hàng mới thành một chỉ kèo bóng đá pháp duy nhất:

  • Nếu một hàng hợp lệ xung đột đã bị xóa bởi hiện tại Giao dịch, không sao cả. (Đặc biệt, kể từ khi cập nhật Luôn xóa phiên bản hàng cũ trước khi chèn phiên bản, điều này sẽ cho phép một bản cập nhật trên một hàng mà không cần thay đổi khóa.)

  • Nếu một hàng xung đột đã được chèn bởi một giao dịch khi được cam kết, mà người đưa vào phải Đợi xem giao dịch đó có cam kết không. Nếu nó quay trở lại Sau đó không có xung đột. Nếu nó cam kết mà không xóa Hàng xung đột một lần nữa, có một vi phạm độc đáo. (TRONG Thực hành chúng tôi chỉ chờ giao dịch khác kết thúc và sau đó làm lại kèo bóng đá pháp khả năng hiển thị trong toto.)

  • Tương tự, nếu một hàng hợp lệ xung đột đã bị xóa bởi một giao dịch chưa có cam kết, người sẽ phải là chờ giao dịch đó cam kết hoặc hủy bỏ, sau đó lặp lại bài kèo bóng đá pháp.

Hơn nữa, ngay trước khi tăng vi phạm tính độc đáo Theo các quy tắc trên, phương thức truy cập phải kèo bóng đá pháp lại khả năng sống của hàng được chèn. Nếu nó đã chết thì Không có lỗi nên được nêu ra. (Trường hợp này không thể xảy ra trong Kịch bản thông thường là chèn một hàng vừa được tạo ra bởi giao dịch hiện tại. Nó có thể xảy ra trongTạo chỉ kèo bóng đá pháp duy nhất đồng thời, tuy nhiên.)

Chúng tôi yêu cầu phương thức truy cập chỉ kèo bóng đá pháp để áp dụng các thử nghiệm này chính nó, có nghĩa là nó phải chạm vào đống để kiểm tra Trạng thái cam kết của bất kỳ hàng nào được hiển thị có khóa trùng lặp Theo nội dung chỉ số. Điều này chắc chắn là xấu xí và không mô-đun, nhưng nó tiết kiệm công việc dư thừa: nếu chúng ta làm riêng thăm dò sau đó tìm kiếm chỉ kèo bóng đá pháp cho một hàng mâu thuẫn sẽ là về cơ bản lặp đi lặp lại trong khi tìm nơi chèn kèo bóng đá pháp nhập chỉ kèo bóng đá pháp của hàng. Hơn nữa, không có cách nào rõ ràng để tránh điều kiện chủng tộc trừ khi kiểm tra xung đột là một phần không thể thiếu của Lắp kèo bóng đá pháp nhập chỉ kèo bóng đá pháp mới.

Giới hạn chính của sơ đồ này là nó không có cách thuận tiện để hỗ trợ kèo bóng đá pháp duy nhất trì hoãn.