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ả.
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.
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.
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.
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ó.
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àAnyArray
có 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àAnyrange
Tấ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ốAnyArray
và những người khác được tuyên bốAnyEuity
, kèo bóng đá pháp mảng thực tế trongAnyArray
Vị 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 trongAnyEuity
Vị 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áoAnyrange
và những người khác được tuyên bốAnyEuity
hoặcAnyArray
, kèo bóng đá pháp phạm vi thực tế trongAnyrange
Vị 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 trongAnyEuity
Vị trí và giống như kèo bóng đá pháp phần tử củaAnyArray
Vị 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áoAnyrange
và 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áoAnyEuity
vàAnyArray
.
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ề Anyenum
Sẽ 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ụAnyArray
có thể được suy luận từAnyEuity
hoặc ngược lại. Một ngoại lệ là kết quả đa hình của kèo bóng đá phápAnyrange
Yêu cầu đối số kèo bóng đá phápAnyrange
; nó không thể được suy luận từAnyArray
hoặ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ằngAnynonarray
vàAnyenum
Khô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ớiUnion
và 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ủaAnyCompitiated
vàAnycompatiblenonArray
Đầ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ưAnycompatiblenonArray
Có 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ố trongAnyCompitiated
vàAnycompatiblenonArray
Vị trí được tự động đúc theo kèo bóng đá pháp đó và đối số trongAnycompatiBleArray
Vị 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ụngAnycompatiBlerange
và/hoặc27571_27596
Yê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ớiAnyrange
vàAnymultirange
, Sử dụngAnycompatiBlerange
vàAnymultirange
Là kèo bóng đá pháp kết quả hàm yêu cầu cóAnycompatiBlerange
hoặcAnycompatiSlapsultirange
Đối số.
Lưu ý rằng không cóAnycompatibleEnum
kè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ồivàHồ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
AnyArray
hoặ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ủaAnynonarray
hoặcAnycompatiblenonArray
tham số.
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.