Khôi phục từ các lỗi gây ra bởi truy cập cơ sở dữ tỷ lệ kèo bóng đá tối nay 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õ tỷ lệ kèo bóng đá tối nay.
Hãy xem xét một chức năng thực hiện chuyển đổi giữa hai tỷ lệ kèo bóng đá tối nay khoản:
10157_10659
Nếu thứ haiCập nhật
Báo cáo kết quả trong tỷ lệ kèo bóng đá tối nay 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ật
Tuy 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 tỷ lệ kèo bóng đá tối nay khoản của Joe, nhưng sẽ không được chuyển vào tỷ lệ kèo bóng đá tối nay khoản của Mary.
Để tránh tỷ lệ kèo bóng đá tối nay vấn đề như vậy, bạn có thể bọcplpy.execute
Cuộc gọi trong một phép trừ rõ tỷ lệ kèo bóng đá tối nay. Theplpy
11180_11277plpy.subtransaction ()
Hàm. tỷ lệ kèo bóng đá tối nay đố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õ tỷ lệ kèo bóng đá tối nay, 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 $$ thử: với plpy.subtransaction (): plpy.execute ("Cập nhật tỷ lệ kèo bóng đá tối nay khoản đặt số dư = số dư - 100 WHERE ACCCENT_NAME = 'Joe'")) plpy.execute ("Cập nhật tỷ lệ kèo bóng đá tối nay khoản đặt số dư = số dư + 100 where account_name = 'Mary'")) ngoại trừ plpy.spierror là e: result = "Lỗi chuyển tiền: % s" % e.args khác: result = "tiền được chuyển chính xác" plan = plpy.prepare ("chèn vào các giá trị hoạt động (kết quả) ($ 1)", ["văn bản"])) plpy.execute (kế hoạch, [kết quả]) $$ ngôn ngữ plpython3u;
Lưu ý rằng việc sử dụngthử
/ngoại trừ
12263_12407PostgreSQLLỗi, đểHoạt động
Bả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ữ liệu được thực thi trong phạm vi của nó sẽ được cam kết hoặc quay lại nguyên tử. Một sự cuộn lại của khối Subtransaction xảy ra trên bất kỳ loại thoát ngoại lệ nào, không chỉ các loại gây ra bởi các lỗi bắt nguồn từ truy cập cơ sở dữ liệu. Một ngoại lệ python thông thường được nêu ra bên trong một khối trừ rõ tỷ lệ kèo bóng đá tối nay cũng sẽ khiến cho việc trừ được cuộn trở lại.
Nếu bạn thấy bất cứ điều gì trong tỷ lệ kèo bóng đá tối nay không chính xác, không phù hợp Kinh nghiệm của bạn với tính năng cụ thể hoặc yêu cầu làm rõ thêm, Vui lòng sử dụngMẫu nàyĐể báo cáo vấn đề tỷ lệ kèo bóng đá tối nay.