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

Các từ khóa NGAY LẬP TỨC, ỔN ĐỊNH và VOLATILE ảnh hưởng đến hành vi của chức năng như thế nào?

Từ khóa IMMUTABLE không bao giờ được thêm tự động bởi pgAdmin hoặc Postgres. Ai đã tạo hoặc thay thế hàm đã làm điều đó.

Sự biến động chính xác cho hàm đã cho là VOLATILE (cũng là mặc định), không phải STABLE - hoặc sẽ không hợp lý nếu sử dụng clock_timestamp()VOLATILE trái ngược với now() hoặc CURRENT_TIMESTAMP STABLE :chúng trả về cùng một dấu thời gian trong cùng một giao dịch. Hướng dẫn sử dụng:

clock_timestamp() trả về thời gian hiện tại thực tế và do đó giá trị của nó thay đổi ngay cả trong một lệnh SQL.

Hướng dẫn sử dụng cảnh báo rằng chức năng không ổn định STABLE ...

không thích hợp cho AFTER kích hoạt muốn truy vấn các hàng được sửa đổi bằng lệnh hiện tại.

.. bởi vì đánh giá lặp lại chức năng kích hoạt có thể trả về khác nhau kết quả cho cùng một hàng. Vì vậy, không phải STABLE .

Bạn hỏi:

Bạn có biết tại sao hàm trả về chính xác năm lần trước khi gắn vào giá trị thứ năm khi được đặt là IMMUTABLE không ?

Wiki của Postgres:

Với 9.2, người lập kế hoạch sẽ sử dụng các kế hoạch cụ thể liên quan đến các tham số được gửi (truy vấn sẽ được lập kế hoạch khi thực thi), ngoại trừ nếu truy vấn được thực thi nhiều lần và người lập kế hoạch quyết định rằng kế hoạch chung không đắt hơn nhiều so với các kế hoạch cụ thể.

Tôi nhấn mạnh đậm. Có vẻ không hợp lý với một IMMUTABLE chức năng không có tham số đầu vào. Nhưng nhãn sai bị ghi đè bởi VOLATILE chức năng trong cơ thể (khoảng trống chức năng nội tuyến ):một kế hoạch truy vấn khác vẫn có thể có ý nghĩa.

  • Hiệu suất thủ tục được lưu trữ PostgreSQL

Bên cạnh

trunc() nhanh hơn một chút so với floor() và thực hiện tương tự ở đây, vì số dương được đảm bảo:

SELECT (trunc(EXTRACT(EPOCH FROM clock_timestamp()) * 10) - 13885344000)::int



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres không sử dụng chỉ mục khi quét chỉ mục là tùy chọn tốt hơn nhiều

  2. Cách ngăn chặn thông báo INFO khi chạy tập lệnh psql

  3. Làm thế nào để chuyển đổi cơ sở dữ liệu postgres sang sqlite

  4. PostgreSQL:Làm thế nào để chuyển đổi từ Unix epoch sang date?

  5. Nâng cấp cơ sở dữ liệu của bạn lên phiên bản PostgreSQL 10 - Những điều bạn nên biết