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

Việc gọi hàm hoặc thủ tục đã lưu trữ sẽ không chèn và vẫn tiếp tục các thay đổi

Trường hợp sử dụng cụ thể này được chỉ ra trong "Hiểu về tự động gửi":

Có thể kiểm soát hoàn toàn hành vi “tự động gửi” bằng cách sử dụng Connection.execution_options() chung phương pháp được cung cấp trên Connection , Engine , Executable , bằng cách sử dụng cờ “tự động gửi” sẽ bật hoặc tắt tính năng tự động gửi cho phạm vi đã chọn. Ví dụ:một text() cấu trúc đại diện cho một thủ tục được lưu trữ mà các cam kết có thể sử dụng nó để một câu lệnh SELECT sẽ đưa ra một COMMIT:

engine.execute(text("SELECT my_mutating_procedure()").execution_options(autocommit=True))

Cách SQLAlchemy autocommit phát hiện các hoạt động thay đổi dữ liệu là nó khớp câu lệnh với một mẫu, tìm kiếm những thứ như UPDATE, DELETE và những thứ tương tự. Nó không thể phát hiện xem một hàm / thủ tục được lưu trữ có thực hiện các đột biến hay không và do đó, kiểm soát rõ ràng đối với tự động gửi được cung cấp.

Trình tự được tăng lên ngay cả khi bị lỗi vì nextval()setval() cuộc gọi không bao giờ được khôi phục.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CHÈN với tên bảng động trong chức năng kích hoạt

  2. Trả lại một truy vấn từ một hàm?

  3. sử dụng lệnh database_name trong PostgreSQL

  4. Tạo bảng tổng hợp với PostgreSQL

  5. PostgreSQL:Cảnh báo:Trang mã bảng điều khiển (437) khác với trang mã Windows (1252)