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
5138_524912 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3
Tài liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cùng một trang chohiện tạiPhiên bản hoặc một trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

F.10. cách đọc kèo bóng đá

Mô -đun này thực hiện kiểu dữ liệucách đọc kèo bóng đáđể đại diện cho các cách đọc kèo bóng đá đa chiều.

F.10.1. Cú pháp

Bảng F.3Hiển thị các biểu diễn bên ngoài hợp lệ chocách đọc kèo bóng đáloại.X, y, v.v. biểu thị số điểm nổi.

Bảng F.3. Biểu diễn bên ngoài cách đọc kèo bóng đá

Cú pháp bên ngoài có nghĩa là
x Một điểm một chiều (hoặc, khoảng không chiều dài một chiều)
(x) giống như trên
x1,x2,...,XN Một điểm trong không gian n chiều, được biểu thị bên trong dưới dạng cách đọc kèo bóng đá cách đọc kèo bóng đá lượng không
(x1,x2,...,xn) giống như trên
(x), (Y) Khoảng thời gian một chiều bắt đầu tạix11751_11768Yhoặc ngược lại; thứ tự không quan trọng
[(x), (y)] giống như trên
(x1,...,xn), (Y1,...,yn) Một cách đọc kèo bóng đá lập phương n-chiều được biểu thị bằng một cặp góc đối diện đường chéo của nó
[(x1,...,xn), (Y1,...,yn)] Tương tự như trên

Không quan trọng là thứ tự các góc đối diện của cách đọc kèo bóng đá lập phương được nhập vào.cách đọc kèo bóng đáChức năng trao đổi giá trị nếu cần để tạo đồng nhất12905_12931Đại diện nội bộ. Khi các góc trùng khớp,cách đọc kèo bóng đáChỉ lưu trữ một góc cùng vớilà điểmHồicờ để tránh lãng phí không gian.

không gian trắng bị bỏ qua trên đầu vào, vì vậy[(x), (Y)]giống như[(x), (y)].

F.10.2. Độ chính xác

Các giá trị được lưu trữ bên trong dưới dạng số điểm nổi 64 bit. Điều này có nghĩa là các số có hơn khoảng 16 chữ số quan trọng sẽ bị cắt.

F.10.3. Cách sử dụng

Bảng F.4Hiển thị các toán tử được cung cấp cho loạicách đọc kèo bóng đá.

Bảng F.4. Toán tử cách đọc kèo bóng đá

Nhà điều hành result Mô tả
A = B Boolean Các cách đọc kèo bóng đá A và B giống hệt nhau.
A && B Boolean Các cách đọc kèo bóng đá A và B chồng chéo.
A @ B Boolean cách đọc kèo bóng đá lập phương chứa cách đọc kèo bóng đá lập phương b.
A <@ B Boolean cách đọc kèo bóng đá A được chứa trong cách đọc kèo bóng đá b.
A <b Boolean cách đọc kèo bóng đá A nhỏ hơn cách đọc kèo bóng đá lập phương b.
A <= B Boolean cách đọc kèo bóng đá A nhỏ hơn hoặc bằng cách đọc kèo bóng đá lập phương b.
A B Boolean cách đọc kèo bóng đá A lớn hơn cách đọc kèo bóng đá lập phương b.
A = B Boolean cách đọc kèo bóng đá A lớn hơn hoặc bằng cách đọc kèo bóng đá lập phương b.
A < B Boolean cách đọc kèo bóng đá A không bằng cách đọc kèo bóng đá lập phương b.
A - N float8 GETn-th tọa độ của cách đọc kèo bóng đá (đếm từ 1).
A ~ N float8 getn-thth tọa độ của cách đọc kèo bóng đá theo cách sau: n = 2 * k - 1 có nghĩa là giới hạn dưới củaK16274_16322K-th -th. Toán tử này được thiết kế để hỗ trợ KNN-Gist.
A <- B float8 Khoảng cách Euclide giữa a và b.
A <# B float8 Taxicab (L-1 số liệu) Khoảng cách giữa a và b.
A <= B float8 16851_16903

(trước PostgreSQL 8.2, toán tử ngăn chặn@<@được gọi tương ứng@~. Những cái tên này vẫn có sẵn, nhưng không được dùng và cuối cùng sẽ được nghỉ hưu. Lưu ý rằng các tên cũ được đảo ngược từ Công ước trước đây là các loại dữ liệu hình học cốt lõi!)

Các toán tử đặt hàng vô hướng (<, =, v.v.) Không có nhiều ý nghĩa cho bất kỳ mục đích thực tế nào nhưng sắp xếp. Các toán tử này lần đầu tiên so sánh các tọa độ đầu tiên và nếu chúng bằng nhau, hãy so sánh các tọa độ thứ hai, v.v. Chúng tồn tại chủ yếu để hỗ trợ lớp toán tử chỉ mục B-cây chocách đọc kèo bóng đá, ví dụ có thể hữu ích nếu bạn muốn có một ràng buộc duy nhất trên Acách đọc kèo bóng đácột.

Thecách đọc kèo bóng đáMô -đun cũng cung cấp lớp toán tử chỉ mục GIST chocách đọc kèo bóng đáGiá trị. MỘTcách đọc kèo bóng đáChỉ số GIST có thể được sử dụng để tìm kiếm các giá trị bằng cách sử dụng=, &&, 18212_18219<@toán tử trongWHEREmệnh đề.

Ngoài ra, Acách đọc kèo bóng đáChỉ số GIST có thể được sử dụng để tìm các hàng xóm gần nhất bằng cách sử dụng các toán tử số liệu<-, 18513_18524<=inĐặt hàng bởimệnh đề. Ví dụ, người hàng xóm gần nhất của điểm 3-D (0,5, 0,5, 0,5) có thể được tìm thấy hiệu quả với:

Chọn C từ thứ tự kiểm tra bằng c <- cách đọc kèo bóng đá (mảng [0,5,0,5,0.5]) giới hạn 1;

The~Nhà điều hành cũng có thể được sử dụng theo cách này để truy xuất hiệu quả một vài giá trị đầu tiên được sắp xếp theo tọa độ đã chọn. Ví dụ: để có được một vài hình cách đọc kèo bóng đá đầu tiên được đặt hàng bởi tọa độ đầu tiên (góc dưới bên trái) tăng dần, người ta có thể sử dụng truy vấn sau:

Chọn C từ thứ tự kiểm tra bằng C ~ 1 Giới hạn 5;

19219_19311

Chọn C từ thứ tự kiểm tra bằng C ~ 3 Desc Giới hạn 5;

Bảng F.5Hiển thị các chức năng có sẵn.

Bảng F.5. Chức năng cách đọc kèo bóng đá

chức năng result Mô tả Ví dụ
cách đọc kèo bóng đá (float8) cách đọc kèo bóng đá tạo ra một cách đọc kèo bóng đá một chiều với cả hai tọa độ giống nhau. cách đọc kèo bóng đá (1) == '(1)'
cách đọc kèo bóng đá (float8, float8) cách đọc kèo bóng đá tạo ra một cách đọc kèo bóng đá một chiều. cách đọc kèo bóng đá (1,2) == '(1), (2)'
cách đọc kèo bóng đá (float8 []) cách đọc kèo bóng đá Tạo cách đọc kèo bóng đá cách đọc kèo bóng đá lượng không bằng cách sử dụng các tọa độ được xác định bởi mảng. cách đọc kèo bóng đá (mảng [1,2]) == '(1,2)'
cách đọc kèo bóng đá (float8 [], float8 []) cách đọc kèo bóng đá Làm cho một cách đọc kèo bóng đá lập phương có tọa độ phía trên bên phải và dưới bên trái theo định nghĩa của hai mảng, phải có cùng độ dài. cách đọc kèo bóng đá (mảng [1,2], mảng [3,4]) == '(1,2), (3,4)'
cách đọc kèo bóng đá (cách đọc kèo bóng đá, float8) cách đọc kèo bóng đá Làm cho một cách đọc kèo bóng đá lập phương mới bằng cách thêm một chiều vào một cách đọc kèo bóng đá lập phương hiện có, với cùng một giá trị cho cả hai điểm cuối của tọa độ mới. Điều này rất hữu ích để xây dựng các cách đọc kèo bóng đá từng mảnh từ các giá trị được tính toán. 21273_21324
cách đọc kèo bóng đá (cách đọc kèo bóng đá, float8, float8) cách đọc kèo bóng đá Làm cho một cách đọc kèo bóng đá lập phương mới bằng cách thêm một chiều vào một cách đọc kèo bóng đá lập phương hiện có. Điều này rất hữu ích để xây dựng các cách đọc kèo bóng đá từng mảnh từ các giá trị được tính toán. cách đọc kèo bóng đá ('(1,2), (3,4)' :: cube, 5, 6) == '(1,2,5), (3,4,6)'
cube_dim (cách đọc kèo bóng đá) Số nguyên Trả về số lượng kích thước của cách đọc kèo bóng đá. cube_dim ('(1,2), (3,4)') == '2'
cube_ll_coord (cách đọc kèo bóng đá, số nguyên) float8 Trả vền-th giá trị tọa độ cho góc dưới bên trái của cách đọc kèo bóng đá. cube_ll_coord ('(1,2), (3,4)', 2) == '2'
cube_ur_coord (cách đọc kèo bóng đá, số nguyên) float8 Trả vền-th giá trị tọa độ cho góc trên bên phải của cách đọc kèo bóng đá. cube_ur_coord ('(1,2), (3,4)', 2) == '4'
cube_is_point (cách đọc kèo bóng đá) Boolean Trả về đúng nếu cách đọc kèo bóng đá lập phương là một điểm, nghĩa là hai góc xác định là như nhau.
cube_distance (cách đọc kèo bóng đá lập phương, cách đọc kèo bóng đá) float8 Trả về khoảng cách giữa hai cách đọc kèo bóng đá. Nếu cả hai cách đọc kèo bóng đá là điểm, đây là hàm khoảng cách bình thường.
cube_subset (cách đọc kèo bóng đá, số nguyên []) cách đọc kèo bóng đá Tạo một cách đọc kèo bóng đá mới từ một cách đọc kèo bóng đá lập phương hiện có, sử dụng danh sách các chỉ mục kích thước từ một mảng. Có thể được sử dụng để trích xuất các điểm cuối của một chiều hoặc để giảm kích thước hoặc để sắp xếp lại chúng như mong muốn. cube_subset (cách đọc kèo bóng đá ('(1,3,5), (6,7,8)'), mảng [2]) == '(3), (7)' cube_subset (cách đọc kèo bóng đá ('(1,3,5), (6,7,8)'), mảng [3,2,1,1]) == '(5,3,1,1), (8,7,6,6)'
cube_union (cách đọc kèo bóng đá lập phương, cách đọc kèo bóng đá) cách đọc kèo bóng đá Sản xuất sự kết hợp của hai cách đọc kèo bóng đá.
cube_inter (cách đọc kèo bóng đá, cách đọc kèo bóng đá) cách đọc kèo bóng đá Sản xuất giao điểm của hai cách đọc kèo bóng đá.
cube_enlarge (c cube, r Double, N Integer) cách đọc kèo bóng đá Tăng kích thước của cách đọc kèo bóng đá bằng bán kính được chỉ địnhRít nhấtnKích thước. Nếu bán kính là âm thì cách đọc kèo bóng đá lập phương bị thu hẹp. Tất cả các kích thước được xác định được thay đổi bởi bán kínhR. Các tọa độ bên trái bị giảm bởiRvà tọa độ trên bên phải được tăng lên bởiR. Nếu một tọa độ bên trái thấp hơn được tăng lên nhiều hơn tọa độ trên bên phải tương ứng (điều này chỉ có thể xảy ra khiR<0) so với cả hai tọa độ được đặt thành trung bình của chúng. Nếu nhưnlớn hơn số lượng kích thước được xác định và cách đọc kèo bóng đá lập phương đang được mở rộng (R0), sau đó thêm kích thước được thêm vào để tạonhoàn toàn; 0 được sử dụng làm giá trị ban đầu cho các tọa độ ngoài. Chức năng này rất hữu ích để tạo các hộp giới hạn xung quanh một điểm để tìm kiếm các điểm gần đó. cube_enlarge ('(1,2), (3,4)', 0,5, 3) == '(0,5,1.5, -0,5), (3,5,4,5,0,5)'

F.10.4. Mặc định

Tôi tin rằng sự kết hợp này:

chọn Cube_union ('(0,5,2), (2,3,1)', '0');
Cube_Union
-------------------
(0, 0, 0), (2, 5, 2)
(1 hàng)

Không mâu thuẫn với lẽ thường, giao lộ cũng không phải là giao lộ

chọn Cube_inter ('(0, -1), (1,1)', '(-2), (2)');
cube_inter
-------------
(0, 0), (1, 0)
(1 hàng)

25860_26106

cube_union ('(0,5,2), (2,3,1)', '(0,0,0), (0,0,0)');
cube_inter ('(0, -1), (1,1)', '(-2,0), (2,0)');

Vị ngữ ngăn chặn sau đây sử dụng cú pháp điểm, trong khi thực tế đối số thứ hai được biểu thị bên trong một hộp. Cú pháp này làm cho nó không cần thiết phải xác định một loại điểm và hàm riêng riêng cho (hộp, điểm).

chọn Cube_Contains ('(0,0), (1,1)', '0,5,0,5');
Cube_contains
--------------
t
(1 hàng)

F.10.5. Ghi chú

Để biết ví dụ về việc sử dụng, hãy xem bài kiểm tra hồi quySQL/cube.sql.

Để làm cho mọi người khó phá vỡ mọi thứ hơn, có giới hạn 100 về số lượng kích thước của cách đọc kèo bóng đá. Cái này được đặt trongcubedata.hNếu bạn cần một cái gì đó lớn hơn.

F.10.6. Tín dụng

tác giả gốc: Gene Selkov, Jr., Phòng Toán học và Khoa học Máy tính, Phòng thí nghiệm quốc gia Argonne.

Lời cảm ơn của tôi chủ yếu dành cho Giáo sư Joe Hellerstein (https: //dsf.berkeley.edu/jmh/) để làm sáng tỏ ý chính của ý chính (http: //gist.cs.berkeley.edu/27710_28080

Cập nhật nhỏ cho gói này được thực hiện bởi Bruno Wolff IIIVào tháng 8/tháng 9 năm 2002. Chúng bao gồm thay đổi độ chính xác từ độ chính xác đơn sang độ chính xác gấp đôi và thêm một số chức năng mới.

Cập nhật bổ sung được thực hiện bởi Joshua Reich28533_28564cách đọc kèo bóng đá (float8 [], float8 [])và làm sạch mã để sử dụng giao thức cuộc gọi V1 thay vì giao thức V0 không dùng nữa.