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

Các hàm PostgreSQL có giao dịch không?

Bản cập nhật PostgreSQL 12 :hỗ trợ hạn chế cho PROCEDURE cấp cao nhất s có thể kiểm soát giao dịch. Bạn vẫn không thể quản lý các giao dịch trong các hàm SQL-có thể gọi thông thường, vì vậy điều dưới đây vẫn đúng ngoại trừ khi sử dụng các thủ tục cấp cao nhất mới.

Các chức năng là một phần của giao dịch mà chúng được gọi từ đó. Hiệu ứng của chúng sẽ được quay trở lại nếu giao dịch quay trở lại. Công việc của họ cam kết nếu giao dịch được cam kết. Mọi BEGIN ... EXCEPT các khối bên trong hàm hoạt động giống như (và sử dụng ẩn) các điểm lưu như SAVEPOINTROLLBACK TO SAVEPOINT Câu lệnh SQL.

Hàm thành công toàn bộ hoặc không thành công toàn bộ, chặn BEGIN ... EXCEPT xử lý lỗi. Nếu một lỗi được phát sinh trong hàm và không được xử lý, giao dịch gọi hàm sẽ bị hủy bỏ. Các giao dịch bị hủy bỏ không thể cam kết và nếu chúng cố gắng cam kết COMMIT được coi là ROLLBACK , giống như đối với bất kỳ giao dịch bị lỗi nào khác. Quan sát:

regress=# BEGIN;
BEGIN
regress=# SELECT 1/0;
ERROR:  division by zero
regress=# COMMIT;
ROLLBACK

Xem cách giao dịch đang ở trạng thái lỗi do phép chia 0, quay trở lại COMMIT ?

Nếu bạn gọi một hàm mà không có giao dịch bao quanh rõ ràng, các quy tắc giống hệt như đối với bất kỳ câu lệnh Pg nào khác:

BEGIN;
SELECT refresh_materialized_view(name);
COMMIT;

(trong đó COMMIT sẽ không thành công nếu SELECT đã xảy ra lỗi).

PostgreSQL không (chưa) hỗ trợ các giao dịch tự trị trong các hàm, trong đó thủ tục / hàm có thể cam kết / khôi phục độc lập với giao dịch gọi. Điều này có thể được mô phỏng bằng một phiên mới thông qua dblink.

NHƯNG , những thứ không mang tính giao dịch hoặc giao dịch không hoàn hảo tồn tại trong PostgreSQL. Nếu nó có hành vi không giao dịch trong BEGIN; do stuff; COMMIT; , nó cũng có hành vi không giao dịch trong một chức năng. Ví dụ:nextvalsetval , TRUNCATE , v.v.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hướng dẫn của một chuyên gia về sao chép Slony cho PostgreSQL

  2. Không thể cài đặt PG gem trên máy Mac của tôi với Mavericks

  3. PostgreSQL:So sánh chuỗi phân biệt chữ hoa chữ thường

  4. Nhận giá trị nối tiếp mặc định sau khi INSERT bên trong PL / pgSQL

  5. Cách bật đăng nhập truy vấn chậm trong PostgreSQL