Các loại phạm kèo bóng đá cúp c2 là các loại dữ liệu đại diện cho một phạm kèo bóng đá cúp c2 các giá trị của một số loại phần tử (được gọi là phạm kèo bóng đá cúp c2SubType). Chẳng hạn, phạm kèo bóng đá cúp c2 củaDấu thời gian
có thể được sử dụng để thể hiện phạm kèo bóng đá cúp c2 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 đá cúp c2ết tắt choHồiPhạm kèo bóng đá cúp c2 dấu thời gian10236_10245dấu thời gian
là 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 đá cúp c2 giá trị.
Các loại phạm kèo bóng đá cúp c2 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 đá cúp c2 duy nhất và bởi vì các khái niệm như phạm kèo bóng đá cúp c2 chồng chéo có thể được biểu thị rõ ràng. kèo bóng đá cúp c2ệc sử dụng phạm kèo bóng đá cúp c2 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 đá cúp c2 giá, đo lường từ một công cụ, v.v. cũng có thể hữu ích.
PostgreSQL đi kèm với các loại phạm kèo bóng đá cúp c2 tích hợp sau:
int4range
- Phạm kèo bóng đá cúp c2Số nguyên
int8range
- Phạm kèo bóng đá cúp c2Bigint
numrange
- Phạm kèo bóng đá cúp c2Số
tsrange
- Phạm kèo bóng đá cúp c2dấu thời gian không có múi giờ
tstzrange
- Phạm kèo bóng đá cúp c2dấu thời gian với múi giờ
Daterange
- Phạm kèo bóng đá cúp c2ngày
Ngoài ra, bạn có thể xác định các loại phạm kèo bóng đá cúp c2 của riêng bạn; nhìn thấyTạo kèo bóng đá cúp c2Để biết thêm thông tin.
Tạo đặt phòng bảng (phòng int, trong thời gian tsrange); Chèn vào giá trị đặt phòng (1108, '[2010-01-01 14:30, 2010-01-01 15:30)'); - ngăn chặn Chọn Int4Range (10, 20) @ 3; - Sự chồng chéo Chọn numrange (11.1, 22.2) && numrange (20.0, 30.0); - Trích xuất giới hạn trên Chọn trên (int8range (15, 25)); - Tính toán giao lộ Chọn int4range (10, 20) * int4range (15, 25); - Phạm kèo bóng đá cúp c2 có trống không? Chọn isempty (numrange (1, 5));
xemBảng 9.53vàBảng 9.54Để 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 đá cúp c2.
13530_13840
Ở dạng văn bản của một phạm kèo bóng đá cúp c2, giới hạn dưới bao gồm được biểu thị bằng[
14000_14003Trong khi giới hạn dưới độc quyền được biểu diễn bởi(
. Tương tự như vậy, giới hạn trên bao gồm được biểu thị bằngMạnh]
Hồi, trong khi giới hạn trên độc quyền được biểu diễn bởi)
. (Nhìn thấyPhần 8.17.5Để biết thêm chi tiết.)
kèo bóng đá cúp c2 chức năngLower_inc
vàUpper_inc
Kiể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 đá cúp c2, tương ứng.
14989_15117(, 3]
15148_15475[,]
đượ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 đá cúp c2 đặc biệt và được coi là vượt xa mọi giá trị +/- Infinity của loại phạm kèo bóng đá cúp c2.
Các kèo bóng đá cúp c2 phần tử có khái niệmVô cựcHồiCó 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 đá cúp c2 dấu thời gian,[hôm nay, vô cực)
không bao gồm đặc biệtDấu thời gian
giá trịVô cực
, trong khi[Hôm nay, Infinity]
Bao gồm nó, cũng như[hôm nay,)
và[Hôm nay,]
.
kèo bóng đá cúp c2 chức năngLower_inf
vàUpper_inf
Kiểm tra cho giới hạn thấp hơn và trên của phạm kèo bóng đá cúp c2, tương ứng.
Đầu vào cho giá trị phạm kèo bóng đá cúp c2 phải tuân theo một trong các mẫu sau:
(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 đá cúp c2 trống (một phạm kèo bóng đá cúp c2 không chứa điểm).
Thegiới hạn thấp hơn
có 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ên
có 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 trên.
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 đá cúp c2. Để đặ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 đá cúp c2ết một giá trị ràng buộc là một chuỗi trống, kèo bóng đá cúp c2ết""
, Vì kèo bóng đá cúp c2ế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 đá cúp c2, 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ể.)
Các quy tắc này rất giống với các quy tắc để kèo bóng đá cúp c2ế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ụ:
19248_19600
19828_20390()
Hồi, (]
Hồi, [)
Hồihoặc20678_20681[]
Hồi. 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 đá cúp c2 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 đá cúp c2 không bị ràng buộc ở phía đó. Chọn numrange (null, 2.2);
Một phạm kèo bóng đá cúp c2 riêng biệt là một loại có loại phần tử có một phần được xác định rõBướcHồi, chẳng hạn nhưSố nguyên
hoặcngày
. Trong các loại này, hai yếu tố có thể nói là liền kề, khi không có giá trị hợp lệ giữa chúng. Điều này tương phản với các phạm kèo bóng đá cúp c2 liên tục, trong đó nó luôn luôn (hoặc hầu như luôn luôn) có thể xác định các giá trị phần tử khác giữa hai giá trị đã cho. Ví dụ: một phạm kèo bóng đá cúp c2 trênSố
Loại liên tục, như là một phạm kèo bóng đá cúp c2 trêndấu thời gian
. (Mặc dùTimestamp
Có độ chính xác hạn chế, và về mặt lý thuyết có thể được coi là rời rạc, 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 đá cúp c2 riêng biệt là có một ý tưởng rõ ràng về AHồiTiếp theoHànghoặ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 đá cúp c2, 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 đá cúp c2 số nguyên[4,8]
và(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 đá cúp c2 trên số.
Một loại phạm kèo bóng đá cúp c2 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 đá cúp c2 để 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 đá cúp c2 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 đá cúp c2 tích hợpint4range
, int8range
vàDaterange
Tất cả đều 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 đá cúp c2 trừ giới hạn trên; đó là,[)
. Tuy nhiên, các loại phạm kèo bóng đá cúp c2 do người dùng xác định có thể sử dụng các quy ước khác.
Người dùng có thể xác định các loại phạm kèo bóng đá cúp c2 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 đá cúp c2 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 đá cúp c2 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 đá cúp c2 ( phân nhóm = float8, SubType_Diff = float8mi ); Chọn '[1.234, 5.678]' :: floatrange;
vìfloat8
không có ý nghĩaBước, chúng tôi không xác định chức năng chính tắc hóa trong ví dụ này.
24697_24905
Nếu phân nhóm được coi là có kèo bóng đá cúp c2 giá trị riêng biệt thay vì liên tục,Tạo kèo bóng đá cúp c2
lệnh phải chỉ địnhCanonical
Hàm. Hàm Canonicalization có giá trị phạm kèo bóng đá cúp c2 đầu vào và phải trả về giá trị phạm kèo bóng đá cúp c2 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 đá cúp c2 đạ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 đá cúp c2 số nguyên[1, 7]
và[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 đá cúp c2ệ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 đá cúp c2 trênDấu thời gian
25934_26131
26141_26264SubType_Diff
, chức năng. (Chỉ mục vẫn sẽ hoạt động mà không cóSubType_Diff
26391_26597x
trừY
) được biểu diễn dưới dạngfloat8
Giá trị. Trong ví dụ của chúng tôi ở trên, hàmfloat8mi
Điều đó làm cơ sở cho thông thườngfloat8
Có thể sử dụng toán tử trừ; Nhưng đối với bất kỳ kèo bóng đá cúp c2 phụ nào khác, một số kèo bóng đá cúp c2 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_Diff
27145_27372
Một ví dụ ít kích thích của ASubType_Diff
Hàm là:
27508_27778
xemTạo kèo bóng đá cúp c2Để biết thêm thông tin về kèo bóng đá cúp c2ệc tạo các loại phạm kèo bóng đá cúp c2.
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 đá cúp c2. Chẳng hạn, để tạo chỉ mục GIST:
28391_28459
Chỉ số sp-gist 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 đá cúp c2 này:=
, &&
, <@
, @
, <<
, ,
-|-
, &<
và&
(xemBảng 9.53Để biết thêm thông tin).
Ngoài ra, các chỉ mục b-cây và băm có thể được tạo cho các cột bảng của các loại phạm kèo bóng đá cúp c2. Đối với các loại chỉ mục này, về cơ bản, hoạt động phạm kèo bóng đá cúp c2 hữu ích duy nhất là bình đẳng. Có một thứ tự sắp xếp B-cây được xác định cho các giá trị phạm kèo bóng đá cúp c2, với tương ứng<
và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 đá cúp c2 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ế.
trong khiđộc đáo
là 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 đá cúp c2. 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 đá cúp c2 trừ). Các ràng buộc kèo bóng đá cúp c2 trừ cho phép đặc tả các ràng buộc nhưMạnhKhông chồng chéoTrên một loại phạm kèo bóng đá cúp c2. Ví dụ:
Tạo đặt phòng bảng ( trong thời gian tsrange, kèo bóng đá cúp c2 trừ bằng cách sử dụng gist (trong thời gian với &&) );
ràng buộc đó sẽ ngăn bất kỳ giá trị chồng chéo nào tồn tại trong bảng cùng một lúc:
30673_31084
Bạn có thể sử dụngbtree_gist
Mở 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 đá cúp c2 để 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 đá cúp c2 chồng chéo chỉ khi số phòng họp bằng nhau:
Tạo phần mở rộng btree_gist; Tạo bảng phòng_reservation ( văn bản phòng, trong thời gian tsrange, Loại trừ bằng cách sử dụng Gist (phòng với =, trong thời gian với &&) ); Chèn vào các giá trị của Room_Reservation ('123a', '[2010-01-01 14:00, 2010-01-01 15:00)'); Chèn 0 1 Chèn vào các giá trị của Room_Reservation ('123a', '[2010-01-01 14:30, 2010-01-01 15:30)'); Lỗi: Giá trị khóa xung đột kèo bóng đá cúp c2 phạm ràng buộc loại trừ "Room_Reservation_room_During_Excl" Chi tiết: khóa (phòng, trong) = (123a, ["2010-01-01 14:30:00", "2010-01-01 15:30:00")) với khóa hiện có (phòng, trong) = (123a, ["2010-01-01 14:00:00", "2010-01-01 15:00:00")). Chèn vào các giá trị của Room_Reservation ('123b', '[2010-01-01 14:30, 2010-01-01 15:30)'); Chèn 0 1
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.