Phiên bản được hỗ trợ:hiện tại(17) /16 / 15 / 14 / 13
Phiên bản phát triển:18 / Devel
Phiên bản không được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0
Tài liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cùng một trang chohiện tạiPhiên bản hoặc một trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

33.6. Biến động chức kèo chấp bóng đá hôm nay Thể loại

Mỗi chức kèo chấp bóng đá hôm nay đều cókèo chấp bóng đá hôm nayPhân loại, với các khả kèo chấp bóng đá hôm nay là, Ổn địnhhoặcbất kèo chấp bóng đá hôm nay. là mặc định nếuTạo chức kèo chấp bóng đá hôm nayLệnh không Chỉ định một danh mục. Danh mục kèo chấp bóng đá hôm nay là một lời hứa cho Trình tối ưu hóa về hành vi của hàm:

  • AHàm có thể làm Bất cứ điều gì, bao gồm sửa đổi cơ sở dữ liệu. Nó có thể trở lại kết quả khác nhau về các cuộc gọi liên tiếp với cùng lập luận. Trình tối ưu hóa không đưa ra giả định nào về hành vi của các chức kèo chấp bóng đá hôm nay như vậy. Một truy vấn sử dụng chức kèo chấp bóng đá hôm nay dễ bay hơi sẽ đánh giá lại hàm ở mỗi hàng nơi giá trị của nó cần thiết.

  • AỔn địnhHàm không thể sửa đổi cơ sở dữ liệu và được đảm bảo sẽ trả về các kết quả tương tự đưa ra các đối số tương tự cho tất cả các hàng trong một tuyên bố. Danh mục này cho phép trình tối ưu hóa tối ưu hóa Nhiều cuộc gọi của hàm thành một cuộc gọi. TRONG đặc biệt, là an toàn khi sử dụng một biểu thức chứa một chức kèo chấp bóng đá hôm nay trong một điều kiện quét chỉ mục. (Kể từ khi quét chỉ mục sẽ đánh giá giá trị so sánh chỉ một lần, không một lần tại mỗi hàng, nó không hợp lệ khi sử dụngDisrileChức kèo chấp bóng đá hôm nay trong quét chỉ mục tình trạng.)

  • anImmutableHàm không thể Sửa đổi cơ sở dữ liệu và được đảm bảo trả về cùng một Kết quả đưa ra những lập luận tương tự mãi mãi. Thể loại này cho phép trình tối ưu hóa đánh giá trước chức kèo chấp bóng đá hôm nay khi Truy vấn gọi nó với các đối số liên tục. Ví dụ: một truy vấn giốngChọn ... trong đó x = 2 + 2có thể được đơn giản hóa trên tầm nhìnChọn ... Trong đó x = 4, vì hàm dưới số nguyên Toán tử bổ sung được đánh dấubất kèo chấp bóng đá hôm nay.

Để có kết quả tối ưu hóa tốt nhất, bạn nên dán nhãn các chức kèo chấp bóng đá hôm nay của mình với danh mục biến động nghiêm ngặt nhất có giá trị họ.

Bất kỳ chức kèo chấp bóng đá hôm nay nào có tác dụng phụphảiđược dán nhãn, để không thể tối ưu hóa các cuộc gọi đến nó xa. Ngay cả một chức kèo chấp bóng đá hôm nay không có tác dụng phụ cũng cần được dán nhãnNếu giá trị của nó có thể thay đổi bên trong một truy vấn duy nhất; Một số ví dụ làngẫu nhiên (), currval (), timeofday ().

Có rất ít sự khác biệt giữaỔn địnhbất kèo chấp bóng đá hôm nay13547_13863bất kèo chấp bóng đá hôm nayKhi nó thực sự không cho phép nó được gấp lại một cách sớm một cách liên tục trong quá trình lập kế hoạch, dẫn đến Giá trị cũ được sử dụng lại trong quá trình sử dụng kế hoạch tiếp theo. Đây là một mối nguy hiểm khi sử dụng các câu lệnh đã chuẩn bị hoặc khi sử dụng Ngôn ngữ chức kèo chấp bóng đá hôm nay mà Cache kế hoạch (chẳng hạn nhưPL/PGSQL).

Vì hành vi nhanh của MVCC (xemChương 12) Một hàm chỉ chứaChọnCác lệnh có thể được đánh dấu một cách an toànỔn định, ngay cả khi nó chọn từ các bảng có thể đang trải qua các sửa đổi bởi các truy vấn đồng thời.PostgreSQLsẽ thực thi mộtổn định14646_14806current_timestampGia đình chức kèo chấp bóng đá hôm nay đủ điều kiện ổn định như vậy, vì giá trị của chúng không thay đổi trong giao dịch.

Hành vi nhanh tương tự được sử dụng choChọnlệnh trongbất kèo chấp bóng đá hôm naychức kèo chấp bóng đá hôm nay. Nói chung là không khôn ngoan để Chọn từ các bảng cơ sở dữ liệu trong mộtbất kèo chấp bóng đá hôm naychức kèo chấp bóng đá hôm nay, vì tính bất biến sẽ bị hỏng nếu nội dung bảng thay đổi. Tuy nhiên,PostgreSQLkhông thực thi điều đó bạn không làm điều đó.

Một lỗi phổ kèo chấp bóng đá hôm nay là dán nhãn hàmbất kèo chấp bóng đá hôm nayKhi kết quả của nó phụ thuộc vào một tham số cấu hình. Ví dụ: một chức kèo chấp bóng đá hôm nay thao túng Dấu thời gian có thể có kết quả phụ thuộc vàotimezoneCài đặt. Để an toàn, các chức kèo chấp bóng đá hôm nay như vậy nên được dán nhãnổn địnhthay vào đó.

Lưu ý:trướcPostgreSQLPhát hành 8.0, yêu cầu cái đóổn địnhbất kèo chấp bóng đá hôm nay16059_16298Chọn. (Đây không phải là một Kiểm tra chống đạn, vì các chức kèo chấp bóng đá hôm nay như vậy vẫn có thể gọiDisrileCác chức kèo chấp bóng đá hôm nay sửa đổi cơ sở dữ liệu. Nếu bạn làm điều đó, bạn sẽ thấy rằngổn địnhhoặcImmutableHàm không nhận thấy các thay đổi cơ sở dữ liệu được áp dụng bởi được gọi là chức kèo chấp bóng đá hôm nay.)