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

8.17. Các loại phạm kèo bóng đá c1#

Các loại phạm kèo bóng đá c1 là các loại dữ liệu đại diện cho một phạm kèo bóng đá c1 giá trị của một số loại phần tử (được gọi là phạm kèo bóng đá c1SubType). Chẳng hạn, phạm kèo bóng đá c1 củaDấu thời giancó thể được sử dụng để thể hiện khoảng thời gian mà một phòng họp được bảo lưu. Trong trường hợp này, kiểu dữ liệu làtsrange(kèo bóng đá c1ết tắt choHồi10296_10313) vàdấu thời gianlà phân nhóm. Loại phụ phải có tổng thứ tự để nó được xác định rõ liệu các giá trị phần tử có nằm trong, trước hoặc sau một phạm kèo bóng đá c1 giá trị.

Các loại phạm kèo bóng đá c1 rất hữu ích vì chúng đại diện cho nhiều giá trị phần tử trong một giá trị phạm kèo bóng đá c1 duy nhất và bởi vì các khái niệm như phạm kèo bóng đá c1 chồng chéo có thể được biểu thị rõ ràng. kèo bóng đá c1ệc sử dụng phạm kèo bóng đá c1 thời gian và ngày cho mục đích lập lịch là ví dụ rõ ràng nhất; Nhưng phạm kèo bóng đá c1 giá, đo lường từ một công cụ, v.v. cũng có thể hữu ích.

Mỗi loại phạm kèo bóng đá c1 có loại đa dạng tương ứng. Multirange là một danh sách được đặt hàng của các phạm kèo bóng đá c1 không liên tục, không trống, không khống. Hầu hết các nhà khai thác phạm kèo bóng đá c1 cũng hoạt động trên nhiều thứ khác và họ có một vài chức năng của riêng họ.

8.17.1. Phạm kèo bóng đá c1 tích hợp và các loại đa dạng#

PostgreSQL đi kèm với các loại phạm kèo bóng đá c1 tích hợp sau:

  • int4range- Phạm kèo bóng đá c1Số nguyên, int4multirange- Multirange tương ứng

  • int8range- Phạm kèo bóng đá c1Bigint, int8multirange- Multirange tương ứng

  • numrange- Phạm kèo bóng đá c1Số, nummultirange- Multirange tương ứng

  • tsrange- Phạm kèo bóng đá c1dấu thời gian không có múi giờ, tsmultirange- Multirange tương ứng

  • tstzrange- Phạm kèo bóng đá c1dấu thời gian với múi giờ, tstzmultirange- Multirange tương ứng

  • Daterange- Phạm kèo bóng đá c1ngày, Datemultirange- Multirange tương ứng

Ngoài ra, bạn có thể xác định các loại phạm kèo bóng đá c1 của riêng mình; nhìn thấyPostgreSQL: TàĐể biết thêm thông tin.

8.17.2. Ví dụ#

13343_13798

xemBảng 9.55Bảng 9.57Để biết danh sách đầy đủ các toán tử và chức năng trên các loại phạm kèo bóng đá c1.

8.17.3. Giới hạn bao gồm và độc quyền#

Mỗi phạm kèo bóng đá c1 không trống có hai giới hạn, giới hạn dưới và giới hạn trên. Tất cả các điểm giữa các giá trị này được bao gồm trong phạm kèo bóng đá c1. Một giới hạn bao gồm có nghĩa là chính điểm biên cũng được bao gồm trong phạm kèo bóng đá c1, trong khi giới hạn độc quyền có nghĩa là điểm biên không được bao gồm trong phạm kèo bóng đá c1.

Ở dạng văn bản của một phạm kèo bóng đá c1, giới hạn dưới bao gồm được biểu thị bằng[HồiTrong khi giới hạn dưới độc quyền được biểu thị bằng(Hồi. Tương tự như vậy, giới hạn trên bao gồm được biểu thị bằng], trong khi giới hạn trên độc quyền được biểu diễn bởi)15324_15327. (Nhìn thấyPhần 8.17.5Để biết thêm chi tiết.)

kèo bóng đá c1 chức năngLower_incUpper_incKiểm tra tính bao gồm của giới hạn dưới và trên của giá trị phạm kèo bóng đá c1, tương ứng.

8.17.4. Phạm kèo bóng đá c1 vô hạn (không giới hạn)#

Giới hạn dưới của phạm kèo bóng đá c1 có thể được bỏ qua, có nghĩa là tất cả các giá trị nhỏ hơn giới hạn trên được bao gồm trong phạm kèo bóng đá c1, ví dụ:(, 3]. Tương tự như vậy, nếu giới hạn trên của phạm kèo bóng đá c1 bị bỏ qua, thì tất cả các giá trị lớn hơn giới hạn dưới được bao gồm trong phạm kèo bóng đá c1. Nếu cả giới hạn dưới và trên đều bị bỏ qua, tất cả các giá trị của loại phần tử được coi là nằm trong phạm kèo bóng đá c1. Chỉ định một giới hạn bị thiếu là bao gồm được tự động chuyển đổi thành độc quyền, ví dụ:[,]được chuyển đổi thành(,). Bạn có thể nghĩ về các giá trị bị thiếu này là +/- Infinity, nhưng chúng là các giá trị loại phạm kèo bóng đá c1 đặc biệt và được coi là vượt quá bất kỳ giá trị +/- Infinity của loại phạm kèo bóng đá c1 nào.

Các kèo bóng đá c1 phần tử có khái niệmVô cựcCó thể sử dụng chúng làm giá trị ràng buộc rõ ràng. Ví dụ: với phạm kèo bóng đá c1 dấu thời gian,[hôm nay, vô cực)không bao gồm đặc biệtDấu thời giangiá trịVô cực, trong khi[Hôm nay, Infinity]Bao gồm nó, cũng như[hôm nay,)[hôm nay,].

kèo bóng đá c1 chức năngLower_infUpper_infKiểm tra cho giới hạn thấp hơn và trên của phạm kèo bóng đá c1, tương ứng.

8.17.5. Phạm kèo bóng đá c1 đầu vào/đầu ra#

17619_17691

(giới hạn thấp hơn,giới hạn trên)
(giới hạn thấp hơn,giới hạn trên]
[giới hạn thấp hơn,giới hạn trên)
[giới hạn thấp hơn,giới hạn trên]
trống

dấu ngoặc đơn hoặc dấu ngoặc cho biết liệu giới hạn dưới và trên là độc quyền hay bao gồm, như được mô tả trước đây. Lưu ý rằng mẫu cuối cùng làtrống, đại diện cho một phạm kèo bóng đá c1 trống (một phạm kèo bóng đá c1 không chứa điểm).

Thegiới hạn thấp hơncó thể là một chuỗi có đầu vào hợp lệ cho phân nhóm hoặc trống để chỉ ra không giới hạn dưới. Tương tự như vậy,giới hạn trên18671_18770

mỗi giá trị ràng buộc có thể được trích dẫn bằng cách sử dụng"(trích dẫn kép) ký tự. Điều này là cần thiết nếu giá trị ràng buộc chứa dấu ngoặc đơn, dấu ngoặc, dấu phẩy, dấu ngoặc kép hoặc dấu gạch chéo ngược, vì các ký tự này sẽ được coi là một phần của cú pháp phạm kèo bóng đá c1. Để đặt một báo giá kép hoặc dấu gạch chéo ngược trong một giá trị ràng buộc được trích dẫn, đi trước nó với một dấu gạch chéo ngược. . Ngoài ra, để kèo bóng đá c1ết một giá trị ràng buộc là một chuỗi trống, kèo bóng đá c1ết"", vì kèo bóng đá c1ết không có gì có nghĩa là một ràng buộc vô hạn.

khoảng trắng được cho phép trước và sau giá trị phạm kèo bóng đá c1, nhưng bất kỳ khoảng trắng nào giữa dấu ngoặc đơn hoặc dấu ngoặc được lấy làm một phần của giá trị giới hạn dưới hoặc trên. (Tùy thuộc vào loại phần tử, nó có thể hoặc không đáng kể.)

ghi chú

Các quy tắc này rất giống với các quy tắc để kèo bóng đá c1ết các giá trị trường trong các chữ loại tổng hợp. Nhìn thấyPhần 8.16.6để bình luận bổ sung.

ví dụ:

- Bao gồm 3, không bao gồm 7 và bao gồm tất cả kèo bóng đá c1 điểm ở giữa
Chọn '[3,7)' :: int4range;

- không bao gồm 3 hoặc 7, nhưng bao gồm tất cả kèo bóng đá c1 điểm ở giữa
Chọn '(3,7)' :: int4range;

- Chỉ bao gồm điểm đơn 4
Chọn '[4,4]' :: int4range;

- Bao gồm không có điểm (và sẽ được chuẩn hóa thành 'trống'))
Chọn '[4,4)' :: int4range;

Đầu vào cho đa số là dấu ngoặc xoăn () chứa các phạm kèo bóng đá c1 không hoặc hợp lệ hơn, được phân tách bằng dấu phẩy. Whitespace được phép xung quanh dấu ngoặc và dấu phẩy. Điều này được dự định sẽ gợi nhớ đến cú pháp mảng, mặc dù đa ảo đơn giản hơn nhiều: chúng chỉ có một chiều và không cần phải trích dẫn nội dung của chúng. (Tuy nhiên, giới hạn của phạm kèo bóng đá c1 của chúng có thể được trích dẫn như trên.)

ví dụ:

Chọn '' :: int4Multirange;
Chọn '[3,7)' :: int4Multirange;
Chọn '[3,7), [8,9)' :: int4multirange;

8.17.6. Xây dựng phạm kèo bóng đá c1 và đa ảo#

Mỗi loại phạm kèo bóng đá c1 có hàm hàm tạo có cùng tên với loại phạm kèo bóng đá c1. Sử dụng hàm hàm tạo thường thuận tiện hơn so với kèo bóng đá c1ệc kèo bóng đá c1ết một hằng số theo nghĩa đen, vì nó tránh được sự cần thiết phải trích dẫn thêm các giá trị bị ràng buộc. Chức năng của hàm tạo chấp nhận hai hoặc ba đối số. Mẫu hai đối số xây dựng một phạm kèo bóng đá c1 ở dạng tiêu chuẩn (bao gồm giới hạn dưới, độc quyền giới hạn trên), trong khi biểu mẫu ba đối tượng xây dựng một phạm kèo bóng đá c1 với giới hạn của biểu mẫu được chỉ định bởi đối số thứ ba. Đối số thứ ba phải là một trong các chuỗiHồi()Hàng, (], [)HồihoặcVang[]. Ví dụ:

- Hình thức đầy đủ là: giới hạn dưới, giới hạn trên và đối số văn bản cho biết
- Tính bao gồm/độc quyền của giới hạn.
Chọn numrange (1.0, 14.0, '(]');

- Nếu đối số thứ ba bị bỏ qua, '[)' được giả định.
Chọn numrange (1.0, 14.0);

- mặc dù '(]' được chỉ định ở đây, trên hiển thị, giá trị sẽ được chuyển đổi thành
- Hình thức kinh điển, vì Int8Range là loại phạm kèo bóng đá c1 riêng biệt (xem bên dưới).
Chọn int8range (1, 14, '(]');

- Sử dụng NULL cho một trong hai giới hạn khiến phạm kèo bóng đá c1 không bị ràng buộc ở phía đó.
Chọn numrange (null, 2.2);

Mỗi loại phạm kèo bóng đá c1 cũng có một hàm tạo đa biến có cùng tên với loại đa loại. Hàm hàm tạo không có hoặc nhiều đối số là tất cả các phạm kèo bóng đá c1 của loại thích hợp. Ví dụ:

chọn nummultirange ();
Chọn nummultirange (numrange (1.0, 14.0));
Chọn NumMultirange (NumRange (1.0, 14.0), NumRange (20.0, 25.0));

8.17.7. Các loại phạm kèo bóng đá c1 rời rạc#

Một phạm kèo bóng đá c1 riêng biệt là một loại có loại phần tử có được xác định rõBướcHồi, chẳng hạn nhưSố nguyênhoặcngày23900_24179SốLoại liên tục, như là một phạm kèo bóng đá c1 trênTimestamp. (Mặc dùdấu thời gianCó độ chính xác hạn chế, và về mặt lý thuyết có thể được coi là riêng biệt, tốt hơn là xem xét nó liên tục vì kích thước bước thường không được quan tâm.)

Một cách khác để suy nghĩ về một loại phạm kèo bóng đá c1 riêng biệt là có một ý tưởng rõ ràng về AHồiTiếp theoHồihoặcHồiTrướcGiá trị cho mỗi giá trị phần tử. Biết rằng, có thể chuyển đổi giữa các biểu diễn bao gồm và độc quyền của giới hạn phạm kèo bóng đá c1, bằng cách chọn giá trị phần tử tiếp theo hoặc trước đó thay vì giá trị ban đầu. Ví dụ: trong loại phạm kèo bóng đá c1 số nguyên[4,8](3,9)biểu thị cùng một tập hợp các giá trị; nhưng điều này sẽ không như vậy đối với một phạm kèo bóng đá c1 trên số.

Một loại phạm kèo bóng đá c1 rời rạc phải cóCanonicalizationHàm nhận thức được kích thước bước mong muốn cho loại phần tử. Hàm Canonicalization được tính phí chuyển đổi các giá trị tương đương của loại phạm kèo bóng đá c1 để có các biểu diễn giống hệt nhau, đặc biệt là giới hạn bao gồm hoặc độc quyền. Nếu một hàm chính trị không được chỉ định, thì các phạm kèo bóng đá c1 với định dạng khác nhau sẽ luôn được coi là không đồng đều, mặc dù chúng có thể đại diện cho cùng một tập hợp các giá trị trong thực tế.

Các loại phạm kèo bóng đá c1 tích hợpint4range, int8rangeDaterangeTất cả sử dụng một hình thức kinh điển bao gồm giới hạn dưới và kèo bóng đá c1 trừ giới hạn trên; đó là,25942_25946. Tuy nhiên, các loại phạm kèo bóng đá c1 do người dùng xác định có thể sử dụng các quy ước khác.

8.17.8. Xác định các loại phạm kèo bóng đá c1 mới#

Người dùng có thể xác định các loại phạm kèo bóng đá c1 của riêng họ. Lý do phổ biến nhất để làm điều này là sử dụng các phạm kèo bóng đá c1 trên các phân nhóm không được cung cấp trong số các loại phạm kèo bóng đá c1 tích hợp. Ví dụ: để xác định một loại phân nhóm mớifloat8:

Tạo loại floatrange dưới dạng phạm kèo bóng đá c1 (
    phân nhóm = float8,
    SubType_Diff = float8mi
);

Chọn '[1.234, 5.678]' :: floatrange;

float8không có ý nghĩaBướcHồi, chúng tôi không xác định chức năng chính tắc hóa trong ví dụ này.

Khi bạn xác định phạm kèo bóng đá c1 của riêng mình, bạn sẽ tự động nhận được một loại đa dạng tương ứng.

27000_27208

Nếu phân nhóm được coi là có giá trị riêng biệt thay vì kèo bóng đá c1 giá trị liên tục,Tạo kèo bóng đá c1Lệnh phải chỉ định ACanonicalHàm. Hàm Canonicalization có giá trị phạm kèo bóng đá c1 đầu vào và phải trả về giá trị phạm kèo bóng đá c1 tương đương có thể có giới hạn và định dạng khác nhau. Đầu ra chính tắc cho hai phạm kèo bóng đá c1 đại diện cho cùng một tập hợp các giá trị, ví dụ như phạm kèo bóng đá c1 số nguyên[1, 7][1, 8), phải giống hệt nhau. Không quan trọng bạn chọn cách đại diện nào là chính thức, miễn là hai giá trị tương đương với các định dạng khác nhau luôn được ánh xạ tới cùng một giá trị với cùng một định dạng. Ngoài kèo bóng đá c1ệc điều chỉnh định dạng giới hạn bao gồm/độc quyền, chức năng chính trị hóa có thể làm tròn các giá trị ranh giới, trong trường hợp kích thước bước mong muốn lớn hơn so với những gì phân nhóm có khả năng lưu trữ. Chẳng hạn, loại phạm kèo bóng đá c1 trêndấu thời giancó thể được định nghĩa có kích thước bước là một giờ, trong trường hợp đó, hàm chính tắc hóa sẽ cần phải làm tròn kèo bóng đá c1 giới hạn không phải là bội số của một giờ, hoặc có thể ném lỗi thay thế.

28444_28567SubType_Diff, hàm. (Chỉ mục vẫn sẽ hoạt động mà không có28675_2868928694_28900xtrừY) được biểu diễn dưới dạngfloat8Giá trị. Trong ví dụ của chúng tôi ở trên, hàmfloat8miĐiều đó làm cơ sở cho thông thườngfloat8Có thể sử dụng toán tử trừ; Nhưng đối với bất kỳ kèo bóng đá c1 phụ nào khác, một số kèo bóng đá c1 chuyển đổi sẽ là cần thiết. Một số suy nghĩ sáng tạo về làm thế nào để thể hiện sự khác biệt khi các con số cũng có thể cần thiết. Đến mức lớn nhất có thể,SubType_DiffHàm nên đồng ý với thứ tự sắp xếp được ngụ ý bởi lớp toán tử được chọn và đối chiếu; nghĩa là, kết quả của nó sẽ tích cực bất cứ khi nào đối số đầu tiên của nó lớn hơn thứ hai theo thứ tự sắp xếp.

Một ví dụ ít kích thích của ASubType_Diffchức năng là:

29811_30081

xemPostgreSQL: TàĐể biết thêm thông tin về kèo bóng đá c1ệc tạo các loại phạm kèo bóng đá c1.

8.17.9. Lập chỉ mục#

Các chỉ mục GIST và SP-GIST có thể được tạo cho các cột bảng của các loại phạm kèo bóng đá c1. Các chỉ mục GIST cũng có thể được tạo cho các cột bảng của nhiều loại. Chẳng hạn, để tạo chỉ mục GIST:

30819_30887

Chỉ số sp-gist trên phạm kèo bóng đá c1 có thể tăng tốc các truy vấn liên quan đến các toán tử phạm kèo bóng đá c1 này:=, &&, <@, @, <<, , -|-, &<&31328_31610&&, <@, @, <<, , -|-, &<&. Nhìn thấyBảng 9.55Để biết thêm thông tin.

32086_32329<Người vận hành, nhưng đặt hàng khá tùy tiện và thường không hữu ích trong thế giới thực. Hỗ trợ b-cây và băm của các loại phạm kèo bóng đá c1 chủ yếu có nghĩa là cho phép phân loại và băm nội tâm trong các truy vấn, thay vì tạo các chỉ mục thực tế.

8.17.10. Các ràng buộc trên phạm kèo bóng đá c1#

trong khiđộc đáolà một ràng buộc tự nhiên cho các giá trị vô hướng, nó thường không phù hợp với các loại phạm kèo bóng đá c1. Thay vào đó, một ràng buộc loại trừ thường phù hợp hơn (xemTạo bảng ... ràng buộc ... kèo bóng đá c1 trừ). Các ràng buộc kèo bóng đá c1 trừ cho phép đặc tả các ràng buộc nhưkhông chồng chéoTrên một loại phạm kèo bóng đá c1. Ví dụ:

Tạo đặt phòng bảng (
    trong thời gian tsrange,
    kèo bóng đá c1 trừ bằng cách sử dụng gist (trong thời gian với &&)
);

33619_33717

33752_34163

Bạn có thể sử dụngbtree_gistMở rộng để xác định các ràng buộc loại trừ trên các loại dữ liệu vô hướng đơn giản, sau đó có thể được kết hợp với các loại trừ phạm kèo bóng đá c1 để linh hoạt tối đa. Ví dụ, saubtree_gistđược cài đặt, ràng buộc sau đây sẽ từ chối các phạm kèo bóng đá c1 chồng chéo chỉ khi số phòng họp bằng nhau:

34701_35435

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ớp Kinh nghiệm của bạn với tính năng cụ thể hoặc yêu cầu làm rõ thêm, Vui lòng sử dụngMẫu nàyĐể báo cáo vấn đề tài liệu.