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

46.7. SubtransActions rõ soi kèo bóng đá truoctran#

Khôi phục từ các lỗi gây ra bởi truy cập cơ sở dữ soi kèo bóng đá truoctran như được mô tả trongPhần 46.6.2có thể dẫn đến một tình huống không mong muốn trong đó một số hoạt động thành công trước khi một trong số chúng thất bại và sau khi khôi phục lỗi đó, dữ liệu bị bỏ lại ở trạng thái không nhất quán. PL/Python cung cấp một giải pháp cho vấn đề này dưới dạng các phép trừ rõ soi kèo bóng đá truoctran.

46.7.1. Trình quản lý bối cảnh phụ#

Hãy xem xét một chức năng thực hiện chuyển đổi giữa hai soi kèo bóng đá truoctran khoản:

Tạo hàm Transfer_funds () trả về void dưới dạng $$

Nếu thứ haiCập nhậtBáo cáo kết quả trong một ngoại lệ được nêu ra, chức năng này sẽ báo cáo lỗi, nhưng kết quả của lần đầu tiênCập nhậttuy nhiên sẽ được cam kết. Nói cách khác, các khoản tiền sẽ được rút khỏi soi kèo bóng đá truoctran khoản của Joe, nhưng sẽ không được chuyển vào soi kèo bóng đá truoctran khoản của Mary.

Để tránh các vấn đề như vậy, bạn có thể bọc của mìnhplpy.executegọi trong một phép trừ rõ soi kèo bóng đá truoctran. TheplpyMô -đun cung cấp một đối tượng trợ giúp để quản lý các phép trừ rõ soi kèo bóng đá truoctran được tạo bằngplpy.subtransaction ()Hàm. Các đối tượng được tạo bởi chức năng này thực hiệnGiao diện Trình quản lý bối cảnh. Sử dụng các phép trừ rõ soi kèo bóng đá truoctran, chúng tôi có thể viết lại chức năng của mình như:

Tạo chức năng Transfer_funds2 () trả về void dưới dạng $$

Lưu ý rằng việc sử dụngthử/ngoại trừvẫn được yêu cầu. Nếu không, ngoại lệ sẽ lan truyền lên đỉnh của ngăn xếp Python và sẽ khiến toàn bộ chức năng hủy bỏ vớiPostgreSQLLỗi, đểHoạt độngBảng sẽ không có bất kỳ hàng nào được chèn vào nó. Trình quản lý ngữ cảnh Subtransaction không bẫy các lỗi, nó chỉ đảm bảo rằng tất cả các hoạt động cơ sở dữ soi kèo bóng đá truoctran được thực thi trong phạm vi của nó sẽ được cam kết hoặc quay lại nguyên tử.

Gửi hiệu chỉnh

Nếu bạn thấy bất cứ điều gì trong tài soi kèo bóng đá truoctran không chính xác, không khớpMẫu nàyĐể báo cáo vấn đề tài soi kèo bóng đá truoctran.