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 / 7.4

38.2. ThePostgreSQLkèo bóng đá pháp hệ thống

PostgreSQLCác kèo bóng đá pháp dữ liệu có thể được chia thành các kèo bóng đá pháp cơ sở, kèo bóng đá pháp container, miền và kèo bóng đá pháp giả.

38.2.1. Các kèo bóng đá pháp cơ sở

Các kèo bóng đá pháp cơ sở là những kèo bóng đá pháp, nhưSố nguyên, được thực hiện dưới mức củaSQLNgôn ngữ (thường bằng ngôn ngữ cấp thấp như C). Chúng thường tương ứng với những gì thường được gọi là các kèo bóng đá pháp dữ liệu trừu tượng.PostgreSQLChỉ có thể hoạt động trên các kèo bóng đá pháp đó thông qua các chức năng do người dùng cung cấp và chỉ hiểu hành vi của các kèo bóng đá pháp đó trong phạm vi mà người dùng mô tả chúng. Các kèo bóng đá pháp cơ sở tích hợp được mô tả trongChương 8.

Các kèo bóng đá pháp được liệt kê (enum) có thể được coi là một tiểu thể kèo bóng đá pháp của các kèo bóng đá pháp cơ sở. Sự khác biệt chính là chúng có thể được tạo bằng cách sử dụngSQLkèo bóng đá pháp lệnh, không có bất kỳ chương trình cấp thấp nào. Tham khảoPhần 8.7Để biết thêm thông tin.

38.2.2. kèo bóng đá pháp container

PostgreSQLCó ba kèo bóng đá phápcontainerCác kèo bóng đá pháp, là các kèo bóng đá pháp chứa nhiều giá trị của các kèo bóng đá pháp khác. Đây là các mảng, vật liệu tổng hợp và phạm vi.

Mảng có thể chứa nhiều giá trị cùng kèo bóng đá pháp. Một kèo bóng đá pháp mảng được tự động tạo cho từng kèo bóng đá pháp cơ sở, kèo bóng đá pháp tổng hợp, kèo bóng đá pháp phạm vi và kèo bóng đá pháp miền.Phần 8.15Để biết thêm thông tin.

Các kèo bóng đá pháp tổng hợp hoặc kèo bóng đá pháp hàng, được tạo bất cứ khi nào người dùng tạo bảng. Nó cũng có thể sử dụngPostgreSQL: Tàđể xác định Ađộc lậpkèo bóng đá pháp tổng hợp không có bảng liên kết. Một kèo bóng đá pháp tổng hợp chỉ đơn giản là một danh sách các kèo bóng đá pháp có tên trường liên quan.Phần 8.16Để biết thêm thông tin.

Một kèo bóng đá pháp phạm vi có thể chứa hai giá trị cùng kèo bóng đá pháp, là giới hạn dưới và trên của phạm vi. Các kèo bóng đá pháp phạm vi được tạo ra, mặc dù một vài kèo bóng đá pháp tích hợp tồn tại.Phần 8.17Để biết thêm thông tin.

38.2.3. Miền

Một miền dựa trên một kèo bóng đá pháp cơ bản cụ thể và cho nhiều mục đích có thể hoán đổi với kèo bóng đá pháp cơ bản. Tuy nhiên, một miền có thể có các ràng buộc hạn chế các giá trị hợp lệ của nó đối với một tập hợp con của kèo bóng đá pháp cơ bản sẽ cho phép.SQLlệnhTạo tên miền. Tham khảoPhần 8.18Để biết thêm thông tin.

38.2.4. Pseudo-Types

Có một vàiHồiPseudo-TypesHồicho các mục đích đặc biệt. Các kèo bóng đá pháp giả không thể xuất hiện dưới dạng các cột của các bảng hoặc các thành phần của các kèo bóng đá pháp container, nhưng chúng có thể được sử dụng để khai báo các kèo bóng đá pháp đối số và kết quả của các hàm.Bảng 8.27Liệt kê các kèo bóng đá pháp giả hiện có.

38.2.5. Các kèo bóng đá pháp đa hình

Một số kèo bóng đá pháp giả quan tâm đặc biệt làCác kèo bóng đá pháp đa hình, được sử dụng để khai báoHàm đa hình. Tính năng mạnh mẽ này cho phép một định nghĩa hàm duy nhất hoạt động trên nhiều kèo bóng đá pháp dữ liệu khác nhau, với (các) kèo bóng đá pháp dữ liệu cụ thể được xác định bởi các kèo bóng đá pháp dữ liệu thực sự được truyền cho nó trong một cuộc gọi cụ thể.Bảng 38.1. Một số ví dụ về việc sử dụng của chúng xuất hiện trongPhần 38.5.11.

Bảng 38.1. Các kèo bóng đá pháp đa hình

tên Gia đình Mô tả
AnyEuity đơn giản Cho biết rằng một hàm chấp nhận bất kỳ kèo bóng đá pháp dữ liệu nào
AnyArray đơn giản Cho biết rằng một hàm chấp nhận bất kỳ kèo bóng đá pháp dữ liệu mảng nào
Anynonarray đơn giản Cho biết rằng một hàm chấp nhận bất kỳ kèo bóng đá pháp dữ liệu không phải nào
Anyenum đơn giản Cho biết rằng một hàm chấp nhận bất kỳ kèo bóng đá pháp dữ liệu enum nào (xemPhần 8.7)
Anyrange đơn giản Cho biết rằng một hàm chấp nhận bất kỳ kèo bóng đá pháp dữ liệu phạm vi nào (xemPhần 8.17)
Anymultirange đơn giản Cho biết rằng một hàm chấp nhận bất kỳ kèo bóng đá pháp dữ liệu đa dạng nào (xemPhần 8.17)
AnyCompitiated phổ biến chỉ ra rằng một hàm chấp nhận bất kỳ kèo bóng đá pháp dữ liệu nào, với việc quảng bá tự động nhiều đối số lên một kèo bóng đá pháp dữ liệu chung
AnycompatiBleArray phổ biến chỉ ra rằng một hàm chấp nhận bất kỳ kèo bóng đá pháp dữ liệu mảng nào, với tự động quảng bá nhiều đối số lên một kèo bóng đá pháp dữ liệu chung
AnycompatiblenonArray phổ biến 20207_20336
AnycompatiBlerange Common 20491_20616
AnycompatiSlapsultirange Common 20776_20906

Các đối số và kết quả đa hình được gắn với nhau và được giải quyết với các kèo bóng đá pháp dữ liệu cụ thể khi một truy vấn gọi hàm đa hình được phân tích cú pháp. Khi có nhiều hơn một đối số đa hình, các kèo bóng đá pháp dữ liệu thực tế của các giá trị đầu vào phải khớp với mô tả dưới đây.

chođơn giảnHồihọ các kèo bóng đá pháp đa hình, các quy tắc phù hợp và suy luận hoạt động như thế này:

Mỗi vị trí (đối số hoặc giá trị trả về) được khai báo làAnyEuityđược phép có bất kỳ kèo bóng đá pháp dữ liệu thực tế cụ thể nào, nhưng trong bất kỳ cuộc gọi nào, tất cả đều phải làcùngkèo bóng đá pháp thực tế. Mỗi vị trí được khai báo làAnyArraycó thể có bất kỳ kèo bóng đá pháp dữ liệu mảng nào, nhưng tương tự tất cả chúng phải là cùng một kèo bóng đá pháp. Và tương tự, các vị trí được khai báo làAnyrangeTất cả phải là cùng kèo bóng đá pháp phạm vi. Tương tự như vậy choAnymultirange.

Hơn nữa, nếu có kèo bóng đá pháp vị trí được tuyên bốAnyArrayvà những người khác được tuyên bốAnyEuity, kèo bóng đá pháp mảng thực tế trongAnyArrayVị trí phải là một mảng có các phần tử là cùng kèo bóng đá pháp xuất hiện trongAnyEuityVị trí.Anynonarrayđược đối xử giống hệt nhưAnyEuity, nhưng thêm ràng buộc bổ sung rằng kèo bóng đá pháp thực tế không phải là kèo bóng đá pháp mảng.Anyenumđược đối xử giống hệt nhưAnyEuity, nhưng thêm ràng buộc bổ sung rằng kèo bóng đá pháp thực tế phải là kèo bóng đá pháp enum.

Tương tự, nếu có kèo bóng đá pháp vị trí được khai báoAnyrangevà những người khác được tuyên bốAnyEuityhoặcAnyArray, kèo bóng đá pháp phạm vi thực tế trongAnyrangeVị trí phải là một phạm vi có kiểu con là cùng kèo bóng đá pháp xuất hiện trongAnyEuityVị trí và giống như kèo bóng đá pháp phần tử củaAnyArrayVị trí. Nếu có kèo bóng đá pháp vị trí được khai báoAnymultirange, kèo bóng đá pháp đa dạng thực tế của chúng phải chứa các phạm vi phù hợp với các tham số được khai báoAnyrangevà kèo bóng đá pháp phần tử cơ sở phù hợp với kèo bóng đá pháp tham số được khai báoAnyEuityAnyArray.

Do đó, khi có nhiều hơn một vị trí đối số được khai báo với kèo bóng đá pháp đa hình, hiệu ứng ròng là chỉ được phép kết hợp một số kèo bóng đá pháp đối số thực tế. Ví dụ: một hàm được khai báo làbằng (AnyEuity, AnyEuity)sẽ lấy bất kỳ hai giá trị đầu vào nào, miễn là chúng thuộc cùng một kèo bóng đá pháp dữ liệu.

Khi giá trị trả về của hàm được khai báo là kèo bóng đá pháp đa hình, phải có ít nhất một vị trí đối số cũng có tính đa hình và kèo bóng đá pháp dữ liệu thực tế được cung cấp cho các đối số đa hình xác định kèo bóng đá pháp kết quả thực tế cho cuộc gọi đó. Ví dụ: nếu chưa có cơ chế đăng ký mảng, người ta có thể xác định một hàm thực hiện đăng ký làĐăng ký (AnyArray, Integer) trả về AnyEuity. Tuyên bố này hạn chế đối số đầu tiên thực tế là một kèo bóng đá pháp mảng và cho phép trình phân tích cú pháp suy ra kèo bóng đá pháp kết quả chính xác từ kèo bóng đá pháp đối số đầu tiên thực tế.f (AnyArray) trả về AnyenumSẽ chỉ chấp nhận các mảng của các kèo bóng đá pháp enum.

Trong hầu hết các trường hợp, trình phân tích cú pháp có thể suy ra kèo bóng đá pháp dữ liệu thực tế cho kèo bóng đá pháp kết quả đa hình từ các đối số thuộc kèo bóng đá pháp đa hình khác nhau trong cùng một họ; Ví dụAnyArraycó thể được suy luận từAnyEuityhoặc ngược lại. Một ngoại lệ là kết quả đa hình của kèo bóng đá phápAnyrangeYêu cầu đối số kèo bóng đá phápAnyrange; nó không thể được suy luận từAnyArrayhoặcAnyEuityĐối số. Điều này là do có thể có nhiều kèo bóng đá pháp phạm vi với cùng một kèo bóng đá pháp phụ.

Lưu ý rằngAnynonarrayAnyenumKhông đại diện cho các biến kèo bóng đá pháp riêng biệt; chúng giống nhưAnyEuity, chỉ với một ràng buộc bổ sung. Ví dụ: khai báo một hàm làf (AnyEuity, Anyenum)tương đương với việc khai báo nó làf (Anyenum, Anyenum): Cả hai đối số thực tế phải là cùng một kèo bóng đá pháp enum.

choHồiCommonxônghọ các kèo bóng đá pháp đa hình, các quy tắc phù hợp và khấu trừ hoạt động xấp xỉ như đối vớiHồiđơn giảngia đình, với một sự khác biệt lớn: các kèo bóng đá pháp thực tế của các đối số không cần phải giống hệt nhau, miễn là chúng có thể được sử dụng một cách ngầm định cho một kèo bóng đá pháp phổ biến. kèo bóng đá pháp phổ biến được chọn theo các quy tắc tương tự như đối vớiUnionvà kèo bóng đá pháp cấu trúc liên quan (xemPhần 10.5). Lựa chọn kèo bóng đá pháp phổ biến xem xét các kèo bóng đá pháp thực tế củaAnyCompitiatedAnycompatiblenonArrayĐầu vào, các kèo bóng đá pháp phần tử mảng củaAnycompatiBleArrayĐầu vào, kèo bóng đá pháp phân nhóm phạm vi củaAnycompatiBlerangeĐầu vào và kèo bóng đá pháp kiểu con đa năng củaAnycompatiSlapsultirangeĐầu vào. Nếu nhưAnycompatiblenonArrayCó mặt thì kèo bóng đá pháp phổ biến được yêu cầu là kèo bóng đá pháp không phải là một kèo bóng đá pháp. Khi một kèo bóng đá pháp chung được xác định, các đối số trongAnyCompitiatedAnycompatiblenonArrayVị trí được tự động đúc theo kèo bóng đá pháp đó và đối số trongAnycompatiBleArrayVị trí được tự động chuyển vào kèo bóng đá pháp mảng cho kèo bóng đá pháp đó.

Vì không có cách nào để chọn kèo bóng đá pháp phạm vi chỉ biết phân nhóm của nó, sử dụngAnycompatiBlerangevà/hoặc27571_27596Yêu cầu tất cả các đối số được khai báo với kèo bóng đá pháp đó có cùng phạm vi thực tế và/hoặc kèo bóng đá pháp đa kèo bóng đá pháp và kèo bóng đá pháp phụ của kèo bóng đá pháp đó đồng ý với kèo bóng đá pháp chung được chọn, để không cần sử dụng giá trị phạm vi. Như vớiAnyrangeAnymultirange, Sử dụngAnycompatiBlerangeAnymultirangeLà kèo bóng đá pháp kết quả hàm yêu cầu cóAnycompatiBlerangehoặcAnycompatiSlapsultirangeĐối số.

Lưu ý rằng không cóAnycompatibleEnumkèo bóng đá pháp. Một kèo bóng đá pháp như vậy sẽ không hữu ích lắm, vì thông thường không có bất kỳ diễn viên ngầm nào cho các kèo bóng đá pháp enum, có nghĩa là sẽ không có cách nào để giải quyết một kèo bóng đá pháp chung cho các đầu vào enum không giống nhau.

TheHồiđơn giảnHồiHồiCommonHồiCác họ đa hình đại diện cho hai bộ biến kèo bóng đá pháp độc lập. Xem xét ví dụ

Tạo chức năng MyFunc (A AnyEuity, B Anyelement,

Trong một cuộc gọi thực tế của chức năng này, hai đầu vào đầu tiên phải có cùng một kèo bóng đá pháp. Hai đầu vào cuối cùng phải được thúc đẩy thành một kèo bóng đá pháp chung, nhưng kèo bóng đá pháp này không cần phải làm gì với kèo bóng đá pháp của hai đầu vào đầu tiên.

29167_29239Phần 38.5.6) Có thể đa hình: Điều này được thực hiện bằng cách khai báo tham số cuối cùng của nó làVariadic AnyArrayhoặcVariadic AnycompatiBleArray. Đối với các mục đích của đối số khớp và xác định kèo bóng đá pháp kết quả thực tế, một hàm như vậy hoạt động giống như khi bạn đã viết số lượng thích hợp củaAnynonarrayhoặcAnycompatiblenonArraytham số.

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.