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

38.7. Các loại biến động chức kèo bóng đá cúp c2

Mỗi chức kèo bóng đá cúp c2 đều cókèo bóng đá cúp c2Phân loại, với các khả kèo bóng đá cúp c2 là, Ổn địnhhoặcbất biến. Disrilelà mặc định nếuTạo chức kèo bóng đá cúp c2Lệnh không chỉ định danh mục. Danh mục kèo bóng đá cúp c2 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 cả việc sửa đổi cơ sở dữ liệu. Nó có thể trả về kèo bóng đá cúp c2 kết quả khác nhau cho kèo bóng đá cúp c2 cuộc gọi liên tiếp với cùng một đối số.

  • AỔn địnhHàm không thể sửa đổi cơ sở dữ liệu và được đảm bảo trả về kèo bóng đá cúp c2 kết quả tương tự với kèo bóng đá cúp c2 đối số tương tự cho tất cả kèo bóng đá cúp c2 hàng trong một câu lệnh. 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.hàm trong điều kiện quét chỉ mục.)

  • ANImmutableHàm không thể sửa đổi cơ sở dữ liệu và được đảm bảo trả về các kết quả tương tự được đưa ra theo các đối số tương tự mãi mãi. Danh mục này cho phép trình tối ưu hóa đánh giá trước chức kèo bóng đá cúp c2 khi một truy vấn gọi nó với các đối số không đổi.Chọn ... trong đó x = 2 + 2Có thể đơn giản hóa khi nhìn đếnChọn ... trong đó x = 4, vì hàm bên dưới toán tử bổ sung số nguyên được đánh dấuImmutable.

Để 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 bóng đá cúp c2 của mình với danh mục biến động nghiêm ngặt nhất có giá trị đối với chúng.

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

Một ví dụ quan trọng khác làcurrent_timestampGia đình chức kèo bóng đá cúp c2 đủ điều kiện làổn định, vì giá trị của chúng không thay đổi trong giao dịch.

Có rất ít sự khác biệt giữaổn địnhbất biếnCác danh mục khi xem xét các truy vấn tương tác đơn giản được lên kế hoạch và thực hiện ngay lập tức: Không quan trọng nhiều cho dù một chức kèo bóng đá cúp c2 được thực thi một lần trong quá trình lập kế hoạch hay một lần trong quá trình khởi động thực thi truy vấn. Nhưng có một sự khác biệt lớn nếu kế hoạch được lưu và tái sử dụng sau đó.bất biếnKhi nó thực sự không cho phép nó được gấp sớm thành một hằng số 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 tiếp theo của kế hoạch. Đâ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 các ngôn ngữ chức kèo bóng đá cúp c2 mà các kế hoạch bộ nhớ cache (chẳng hạn nhưPL/PGSQL).

Đối với các hàm được viết bằng SQL hoặc trong bất kỳ ngôn ngữ thủ tục tiêu chuẩn nào, có một thuộc tính quan trọng thứ hai được xác định bởi danh mục biến động, cụ thể là khả kèo bóng đá cúp c2 hiển thị của bất kỳ thay đổi dữ liệu nào được thực hiện bởi lệnh SQL đang gọi hàm. MỘTDisrileHàm sẽ thấy những thay đổi đó, Aổn địnhhoặcbất biếnHàm sẽ không. Hành vi này được thực hiện bằng cách sử dụng hành vi nhanh của MVCC (xemChương 13):Ổn địnhbất biếnCác chức kèo bóng đá cúp c2 Sử dụng ảnh chụp nhanh được thiết lập khi bắt đầu truy vấn gọi điện, trong khiDisrileCác chức kèo bóng đá cúp c2 có được một ảnh chụp nhanh mới khi bắt đầu mỗi truy vấn mà họ thực hiện.

Lưu ý

Các chức kèo bóng đá cúp c2 được viết trong C có thể quản lý ảnh chụp nhanh, tuy nhiên họ muốn, nhưng thường là một ý tưởng tốt để làm cho các hàm C hoạt động theo cách này.

Vì hành vi nhanh này, một hàm chỉ chứaChọnkèo bóng đá cúp c2 lệnh có thể được đánh dấu một cách an toànổn định, ngay cả khi nó chọn từ kèo bóng đá cúp c2 bảng có thể trải qua kèo bóng đá cúp c2 sửa đổi bằng kèo bóng đá cúp c2 truy vấn đồng thời.PostgreSQLSẽ thực thi tất cả kèo bóng đá cúp c2 lệnh của Aổn địnhHàm sử dụng ảnh chụp nhanh được thiết lập cho truy vấn gọi điện và do đó nó sẽ thấy một chế độ xem cố định của cơ sở dữ liệu trong suốt truy vấn đó.

Hành vi ảnh chụp nhanh tương tự được sử dụng choChọnkèo bóng đá cúp c2 lệnh trongImmutablechức kèo bóng đá cúp c2. 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 biếnchức kèo bóng đá cúp c2, vì tính bất biến sẽ bị phá vỡ nếu nội dung bảng thay đổi. Tuy nhiên,PostgreSQLKhông thực thi rằng bạn không làm điều đó.

Một lỗi phổ biến là dán nhãn hàmImmutableKhi kết quả của nó phụ thuộc vào tham số cấu hình. Ví dụ: một hàm thao tác với 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 bóng đá cúp c2 như vậy nên được dán nhãnổn địnhThay vào đó.

Lưu ý

PostgreSQLYêu cầu điều đóổn địnhbất biếnCác chức kèo bóng đá cúp c2 không chứa các lệnh SQL khác ngoàiChọnĐể ngăn chặn sửa đổi dữ liệu. (Đây không phải là một bài kiểm tra hoàn toàn chống đạn, vì các chức kèo bóng đá cúp c2 như vậy vẫn có thể gọiDisrilyCác chức kèo bóng đá cúp c2 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ặcbất biếnHàm không nhận thấy kèo bóng đá cúp c2 thay đổi cơ sở dữ liệu được áp dụng bởi hàm được gọi, vì chúng bị ẩn khỏi ảnh chụp nhanh của nó.)

Gửi hiệu chỉnh

Nếu bạn thấy bất cứ điều gì trong tài liệu không chính xác, không khớpMẫu nàyĐể báo cáo vấn đề tài liệu.