Các loại 스포츠 토토 베트맨 vi là các loại dữ liệu đại diện cho một 스포츠 토토 베트맨 vi các giá trị của một số loại phần tử (được gọi là 스포츠 토토 베트맨 viSubtype). Chẳng hạn, 스포츠 토토 베트맨 vi củadấu thời gian
có 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
(viết tắt choHồiPhạm vi dấu thời gianHồi) vàdấ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 스포츠 토토 베트맨 vi giá trị.
Các loại 스포츠 토토 베트맨 vi rất hữu ích vì chúng đại diện cho nhiều giá trị phần tử trong một giá trị 스포츠 토토 베트맨 vi duy nhất và bởi vì các khái niệm như 스포츠 토토 베트맨 vi chồng chéo có thể được biểu thị rõ ràng. Việc sử dụng 스포츠 토토 베트맨 vi thời gian và ngày cho mục đích lập lịch là ví dụ rõ ràng nhất; Nhưng 스포츠 토토 베트맨 vi 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 vi đều 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 vi 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 vi 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ọ.
PostgreSQL đi kèm với các loại 스포츠 토토 베트맨 vi tích hợp sau:
int4range
- 스포츠 토토 베트맨 viSố nguyên
, int4multirange
- Multirange tương ứng
int8range
- 스포츠 토토 베트맨 viBigint
, int8multirange
- Multirange tương ứng
numrange
- 스포츠 토토 베트맨 viSố
, nummultirange
- Multirange tương ứng
tsrange
- 스포츠 토토 베트맨 vidấu thời gian không có múi giờ
, tsmultirange
- Multirange tương ứng
tstzrange
- 스포츠 토토 베트맨 vidấu thời gian với múi giờ
, tstzmultirange
- Multirange tương ứng
Daterange
- 스포츠 토토 베트맨 vingày
, Datemultirange
- Multirange tương ứng
Ngoài ra, bạn có thể xác định các loại 스포츠 토토 베트맨 vi của riêng bạn; nhìn thấyTạo loạiĐể 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); - 스포츠 토토 베트맨 vi có trống không? Chọn isempty (numrange (1, 5));
xemBảng 9.54vàBảng 9.56Để biết danh sách đầy đủ các toán tử và chức năng trên các loại phạm vi.
Mỗi phạm vi 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 vi. 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 vi, 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 vi.
Ở dạng văn bản của một 스포츠 토토 베트맨 vi, giới hạn dưới bao gồm được biểu thị bằng[
KhănTrong khi giới hạn dưới độc quyền được biểu thị bằng(
. Tương tự như vậy, giới hạn trên bao gồm được biểu thị bằngHồi]
, trong khi giới hạn trên độc quyền được biểu diễn bởiHồi)
. (Nhìn thấyPhần 8.17.5Để biết thêm chi tiết.)
Các 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 một giá trị phạm vi, tương ứng.
Giới hạn dưới của 스포츠 토토 베트맨 vi 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 스포츠 토토 베트맨 vi, ví dụ:(, 3]
. Tương tự như vậy, nếu giới hạn trên của phạm vi 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 vi. 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 vi. 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 vi đặc biệt và được coi là vượt xa mọi giá trị +/- Infinity của loại phạm vi.
Các loại 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 vi dấu thời gian,[hôm nay, vô cực)
không bao gồm đặc biệtTimestamp
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,]
.
Các 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 vi, tương ứng.
Đầu vào cho giá trị phạm vi 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 vi trống (một phạm vi 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 vi. Để đặ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, để viết một giá trị ràng buộc là một chuỗi trống, viết""
, Vì viế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 vi, 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 để viế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ả các đ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ả các đ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 (và
) chứa các phạm vi không có hoặc nhiều 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 vi 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;
Mỗi loại phạm vi có hàm hàm tạo có cùng tên với loại phạm vi. Sử dụng hàm hàm tạo thường thuận tiện hơn so với việc viế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 vi ở 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 vi 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ỗiMạnh()
Hồi, (]
Khăn, Mạnh[)
hoặcHồ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 vi 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 vi không bị ràng buộc ở phía đó. Chọn numrange (null, 2.2);
Mỗi loại phạm vi cũng có một hàm tạo đa dạng 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 vi 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));
Một 스포츠 토토 베트맨 vi 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ước, 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 vi 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 vi trênSố
Loại liên tục, như là một 스포츠 토토 베트맨 vi trêndấu thời gian
. (Mặc dùdấu thời gian
Có độ 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 vi rời rạc là có một ý tưởng rõ ràng về ATiếp theoHồihoặcHồiTrướcxôngGiá 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 vi, 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 vi 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 vi trên số.
Một loại 스포츠 토토 베트맨 vi 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 vi để 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 vi 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 스포츠 토토 베트맨 vi 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à loại trừ giới hạn trên; đó là,[)
. Tuy nhiên, các loại 스포츠 토토 베트맨 vi 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 vi 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 vi trên các phân nhóm không được cung cấp trong số các loại phạm vi 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 vi ( phân nhóm = float8, SubType_Diff = float8mi ); Chọn '[1.234, 5.678]' :: floatrange;
vìfloat8
không có ý nghĩaHồiBướ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 스포츠 토토 베트맨 vi của riêng mình, bạn sẽ tự động nhận được một loại đa dạng tương ứng.
26536_26744
Nếu phân nhóm được coi là có các giá trị riêng biệt thay vì liên tục,Tạo loại
Lệnh phải chỉ định ACanonical
Hàm. Hàm Canonicalization có giá trị phạm vi đầu vào và phải trả về giá trị phạm vi 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 vi đại diện cho cùng một tập hợp các giá trị, ví dụ như phạm vi 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 việ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 vi trênDấu thời gian
có thể được xác định 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 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ế.
27980_28103SubType_Diff
, hàm. (Chỉ mục vẫn sẽ hoạt động mà không cóSubType_Diff
28230_28436x
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ỳ loại phụ nào khác, một số loại 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
Hàm nên đồng ý với thứ tự sắp xếp được ngụ ý bởi lớp toán tử và đối chiếu được chọn; 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_Diff
Hàm là:
29347_29617
xemTạo loạiĐể biết thêm thông tin về việc tạo các loại phạm vi.
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 vi. 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:
30302_30370
Chỉ số sp-gist trên 스포츠 토토 베트맨 vi có thể tăng tốc các truy vấn liên quan đến các toán tử 스포츠 토토 베트맨 vi này:=
, &&
, <@
, @
, <<
, ,
-|-
, &<
và&
. Một chỉ mục GIST trên đa ảo có thể tăng tốc các truy vấn liên quan đến cùng một bộ toán tử đa dạng. Một chỉ mục GIST trên các phạm vi và chỉ mục GIST trên đa ảo cũng có thể tăng tốc các truy vấn liên quan đến phạm vi loại chéo này lên đa phương tiện và đa hóa thành các toán tử phạm vi tương ứng:&&
, <@
, @
, <<
, ,
-|-
, &<
và&
. Nhìn thấyBảng 9.54Để 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 vi. Đối với các loại chỉ mục này, về cơ bản, hoạt động phạm vi 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 vi, với tương ứng<
vàCác nhà khai thác, 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 vi 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 vi. 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 ... loại trừ). Các ràng buộc loại trừ cho phép đặc tả các ràng buộc nhưkhông chồng chéo”Trên một loại phạm vi. Ví dụ:
Tạo đặt phòng bảng ( trong thời gian tsrange, Loại 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:
Chèn vào các giá trị đặt phòng ('[2010-01-01 11:30, 2010-01-01 15:00)'); Chèn 0 1 Chèn vào giá trị đặt phòng ('[2010-01-01 14:45, 2010-01-01 15:45)'); Lỗi: Giá trị khóa mâu thuẫn vi phạm ràng buộc loại trừ "reservation_during_excl" Chi tiết: khóa (trong) = (["2010-01-01 14:45:00", "2010-01-01 15:45:00")) Xung đột với khóa hiện có (trong) = (["2010-01-01 11:30:00", "2010-01-01 15:00:00")).
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 vi để 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 스포츠 토토 베트맨 vi 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 vi 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.