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

Các thủ tục được lưu trữ có chạy trong giao dịch cơ sở dữ liệu trong Postgres không?

Nói một cách chính xác, Postgres không thủ tục được lưu trữ như được định nghĩa trong tiêu chuẩn ISO / IEC trước phiên bản 11. Thuật ngữ này thường được sử dụng không chính xác để chỉ chức năng , cung cấp nhiều chức năng tương tự (và hơn thế nữa) như các RDBMS khác cung cấp "thủ tục được lưu trữ". Sự khác biệt chính là xử lý giao dịch.

  • Sự khác biệt giữa "Thủ tục được lưu trữ" và "Chức năng được lưu trữ" là gì?

Đúng quy trình được lưu trữ cuối cùng cũng được giới thiệu với Postgres 11:

  • Khi nào sử dụng thủ tục được lưu trữ / chức năng do người dùng xác định?

Chức năng nguyên tử trong Postgres và tự động chạy bên trong giao dịch của chính họ trừ khi được gọi trong một giao dịch bên ngoài. Chúng luôn chạy trong một giao dịch duy nhất và thành công hoặc thất bại hoàn toàn . Do đó, một người không thể bắt đầu hoặc thực hiện các giao dịch trong hàm. Và các lệnh như VACUUM , CREATE DATABASE hoặc CREATE INDEX CONCURRENTLY không được phép chạy trong ngữ cảnh giao dịch.

Hướng dẫn về PL / pgSQL:

Các hàm và thủ tục kích hoạt luôn được thực thi bên trong giao dịch được thiết lập bởi truy vấn bên ngoài - chúng không thể bắt đầu hoặc gửi giao dịch đó, vì sẽ không có ngữ cảnh nào để chúng thực thi. Tuy nhiên, một khối chứa EXCEPTION điều khoản hình thành một cách hiệu quả một giao dịch con có thể được khôi phục mà không ảnh hưởng đến giao dịch bên ngoài.

Xử lý lỗi:

Theo mặc định, bất kỳ lỗi nào xảy ra trong một hàm PL / pgSQL đều hủy bỏ việc thực thi chức năng và thực sự là các phiên dịch xung quanh. Bạn có thể mắc lỗi và khôi phục chúng bằng cách sử dụng BEGIN khối với EXCEPTION mệnh đề.

ngoại lệ , bao gồm nhưng không giới hạn:

  • dữ liệu được ghi vào tệp nhật ký
  • các thay đổi được thực hiện đối với một trình tự

    Quan trọng :Một số kiểu dữ liệu và hàm PostgreSQL có các quy tắc đặc biệt liên quan đến hành vi giao dịch. Đặc biệt, các thay đổi được thực hiện đối với thứ tự (và do đó là bộ đếm của cột được khai báo bằng cách sử dụng serial ) được hiển thị ngay lập tức cho tất cả các giao dịch khác và không được khôi phục nếu giao dịch thực hiện các thay đổi bị hủy bỏ.

  • báo cáo đã chuẩn bị sẵn

    • Bản trình diễn SQL Fiddle
  • cuộc gọi dblink (hoặc tương tự)

    • Postgres có hỗ trợ các giao dịch lồng ghép hay tự trị không?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nối nhiều hàng trong một mảng với SQL trên PostgreSQL

  2. Tính toán Khóa chính tiếp theo - có định dạng cụ thể

  3. Trả lại danh sách các múi giờ được hỗ trợ bởi PostgreSQL

  4. Tôi quên mật khẩu tôi đã nhập trong khi cài đặt postgres

  5. PostgreSQL:truyền chuỗi thành ngày DD / MM / YYYY