Phiên bản được hỗ trợ:hiện tại3522_355217) /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 / 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.18. Intarray

TheintarrayMô-đun cung cấp một số hàm và toán tử hữu ích để thao tác các mảng số nguyên không có null. Ngoài ra còn có hỗ trợ cho các tìm kiếm được lập chỉ mục bằng cách sử dụng một số toán tử.

Tất cả các hoạt động này sẽ gây ra lỗi nếu một mảng được cung cấp chứa bất kỳ phần tử null nào.

Nhiều trong số các hoạt động này chỉ hợp lý đối với các mảng một chiều. Mặc dù chúng sẽ chấp nhận các mảng đầu vào có nhiều kích thước hơn, dữ liệu được xử lý như thể đó là một mảng tuyến tính theo thứ tự lưu trữ.

F.18.1.intarrayChức năng và toán tử

Các chức năng được cung cấp bởiIntarrayMô -đun được hiển thị trongBảng F.9, toán tử trongBảng F.10.

Bảng F.9.IntarrayChức năng

chức năng Loại trả lại Mô tả Ví dụ Kết quả
ICOUNT (kèo chấp bóng đá hôm nay []) kèo chấp bóng đá hôm nay Số lượng phần tử trong mảng ICOUNT ('1,2,3' :: kèo chấp bóng đá hôm nay []) 3
Sắp xếp (kèo chấp bóng đá hôm nay [], văn bản dir) kèo chấp bóng đá hôm nay [] Sắp xếp mảng -dirphải làASChoặcDesc Sắp xếp ('1,2,3' :: kèo chấp bóng đá hôm nay [], 'desc') 3,2,1
Sắp xếp (kèo chấp bóng đá hôm nay []) kèo chấp bóng đá hôm nay [] Sắp xếp theo thứ tự tăng dần Sắp xếp (mảng [11,77,44]) 11,44,77
sort_asc (kèo chấp bóng đá hôm nay []) kèo chấp bóng đá hôm nay [] Sắp xếp theo thứ tự tăng dần
sort_desc (kèo chấp bóng đá hôm nay []) kèo chấp bóng đá hôm nay [] Sắp xếp theo thứ tự giảm dần
uniq (kèo chấp bóng đá hôm nay []) kèo chấp bóng đá hôm nay [] Xóa các bản sao liền kề uniq (sắp xếp ('1,2,3,2,1' :: kèo chấp bóng đá hôm nay [])) 1,2,3
idx (kèo chấp bóng đá hôm nay [], kèo chấp bóng đá hôm nay item) kèo chấp bóng đá hôm nay INDEX của khớp phần tử đầu tiênMục(0 nếu không có) IDX (mảng [11,22,33,22,11], 22) 2
Subarray (kèo chấp bóng đá hôm nay [], kèo chấp bóng đá hôm nay start, kèo chấp bóng đá hôm nay len) kèo chấp bóng đá hôm nay [] phần của mảng bắt đầu tại vị tríBắt đầu, lenElements Subarray ('1,2,3,2,1' :: kèo chấp bóng đá hôm nay [], 2, 3) 2,3,2
Subarray (kèo chấp bóng đá hôm nay [], kèo chấp bóng đá hôm nay start) kèo chấp bóng đá hôm nay [] phần của mảng bắt đầu ở vị tríBắt đầu Subarray ('1,2,3,2,1' :: kèo chấp bóng đá hôm nay [], 2) 2,3,2,1
intset (kèo chấp bóng đá hôm nay) kèo chấp bóng đá hôm nay [] Tạo mảng một phần tử Intset (42) 42

Bảng F.10.intarray16531_16543

Nhà điều hành return Mô tả
kèo chấp bóng đá hôm nay [] && kèo chấp bóng đá hôm nay [] Boolean chồng chéo -TRUENếu mảng có ít nhất một phần tử chung
kèo chấp bóng đá hôm nay [] @ kèo chấp bóng đá hôm nay [] Boolean chứa -TRUENếu mảng trái chứa mảng phải
17550_17569 Boolean chứa -TRUENếu mảng trái được chứa trong mảng phải
# kèo chấp bóng đá hôm nay [] kèo chấp bóng đá hôm nay Số phần tử trong mảng
kèo chấp bóng đá hôm nay [] # kèo chấp bóng đá hôm nay kèo chấp bóng đá hôm nay index (giống nhưidxchức năng)
kèo chấp bóng đá hôm nay [] + kèo chấp bóng đá hôm nay kèo chấp bóng đá hôm nay [] Đẩy phần tử vào mảng (thêm nó vào cuối mảng)
kèo chấp bóng đá hôm nay [] + kèo chấp bóng đá hôm nay [] kèo chấp bóng đá hôm nay [] Concatenation (mảng phải được thêm vào cuối bên trái)
kèo chấp bóng đá hôm nay [] - kèo chấp bóng đá hôm nay kèo chấp bóng đá hôm nay [] Xóa các mục khớp phù hợp với đối số khỏi mảng
kèo chấp bóng đá hôm nay [] - kèo chấp bóng đá hôm nay [] kèo chấp bóng đá hôm nay [] Xóa các phần tử của mảng phải khỏi trái
kèo chấp bóng đá hôm nay [] | kèo chấp bóng đá hôm nay kèo chấp bóng đá hôm nay [] Liên minh đối số
kèo chấp bóng đá hôm nay [] | kèo chấp bóng đá hôm nay [] kèo chấp bóng đá hôm nay [] Liên minh mảng
kèo chấp bóng đá hôm nay [] & kèo chấp bóng đá hôm nay [] kèo chấp bóng đá hôm nay [] Giao lộ của mảng
kèo chấp bóng đá hôm nay [] @@ query_int Boolean trueNếu mảng thỏa mãn truy vấn (xem bên dưới)
query_int ~ ~ kèo chấp bóng đá hôm nay [] Boolean TrueNếu mảng thỏa mãn truy vấn (người giao lưu@@)

(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!)

Người vận hành&&, @<@tương đương vớiPostgreSQL20967_21213

The@@~ ~Toán tử kiểm tra xem một mảng có thỏa mãnTruy vấn, được biểu thị bằng giá trị của loại dữ liệu chuyên dụngquery_int. MỘTTruy vấn21501_21621&(và),|(hoặc) và!(không). Điểm số có thể được sử dụng khi cần thiết. Ví dụ: truy vấn1 & (2 | 3)khớp với các mảng có chứa 1 và cũng chứa 2 hoặc 3.

F.18.2. Hỗ trợ chỉ mục

IntarrayCung cấp hỗ trợ chỉ mục cho&&, @, <@@@toán tử, cũng như bình đẳng mảng thông thường.

hai lớp toán tử chỉ mục GIST được cung cấp:gist__int_ops(được sử dụng theo mặc định) phù hợp cho các bộ dữ liệu cỡ nhỏ đến trung bình, trong khigist__intbig_opsSử dụng chữ ký lớn hơn và phù hợp hơn để lập chỉ mục các tập dữ liệu lớn (nghĩa là các cột chứa một số lượng lớn các giá trị mảng riêng biệt). Việc triển khai sử dụng cấu trúc dữ liệu rd-cây với nén mất tích hợp.

Ngoài ra còn có lớp toán tử GIN không mặc địnhgin__int_opsHỗ trợ cùng một toán tử.

22967_23109

F.18.3. Ví dụ

- Một tin nhắn có thể nằm trong một hoặc nhiềuPhầnVoiTạo thông báo bảng (phím chính giữa kèo chấp bóng đá hôm nay, phần kèo chấp bóng đá hôm nay [], ...);

- Tạo chỉ mục chuyên dụng
Tạo chỉ mục message_rdtree_idx trên tin nhắn bằng cách sử dụng gist (phần gist__int_ops);

- Chọn tin nhắn trong Phần 1 hoặc 2 - Toán tử chồng chéo
Chọn message.mid từ tin nhắn trong đó message.sections && '1,2';

- Chọn Tin nhắn trong Phần 1 và 2 - Chứa Toán tử
Chọn message.mid từ tin nhắn trong đó message.sections @ '1,2';

- giống nhau, sử dụng toán tử truy vấn
Chọn message.mid từ tin nhắn trong đó tin nhắn.sections @@ '1 & 2' :: query_int;

F.18.4. Điểm chuẩn

Thư mục nguồn24252_24276Chứa bộ kiểm tra điểm chuẩn, có thể chạy đối với cài đặtPOSTGRESQLMáy chủ. (Nó cũng yêu cầuDBD :: PGsẽ được cài đặt.) Để chạy:

CD .../PRINT/Intarray/Bench
Test CreatedB
Kiểm tra PSQL -C "Tạo phần mở rộng Intarray"
./create_test.pl | Kiểm tra PSQL
./bench.pl

The24690_24700Tập lệnh có nhiều tùy chọn, được hiển thị khi nó được chạy mà không có bất kỳ đối số nào.

F.18.5. Tác giả

Tất cả các công việc được thực hiện bởi Teodor Sigaev () và Oleg Bartunov (). Nhìn thấyhttp: //www.sai.msu.su/~megera/postgres/gist/Để biết thêm thông tin. Andrey Oktyabrski đã làm rất tốt trong việc thêm các chức năng và hoạt động mới.