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 / 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.21. kèo bóng đá hom nay

Mô -đun này thực hiện kiểu dữ liệukèo bóng đá hom nayĐể biểu diễn nhãn dữ liệu được lưu trữ trong cấu trúc giống như cây phân cấp. Các cơ sở rộng lớn để tìm kiếm qua các cây nhãn được cung cấp.

F.21.1. Định nghĩa

Anhãnlà một chuỗi các ký tự chữ và số và dấu gạch dưới (ví dụ, trong c locale các ký tựA-ZA-Z0-9_được cho phép). Nhãn phải dài dưới 256 ký tự.

ví dụ:42, cá nhân_service

Ađường kèo bóng đá hom nay nhãnlà một chuỗi không hoặc nhiều nhãn được phân tách bằng các dấu chấm, ví dụL1.L2.L3, đại diện cho một đường kèo bóng đá hom nay từ gốc của một cây phân cấp đến một nút cụ thể. Độ dài của đường kèo bóng đá hom nay nhãn không thể vượt quá 65535 nhãn.

Ví dụ:Top.Countries.Europe.Russia

Thekèo bóng đá hom nayMô -đun cung cấp một số loại dữ liệu:

  • kèo bóng đá hom naylưu trữ đường kèo bóng đá hom nay nhãn.

  • lqueryđại diện cho một mẫu giống như biểu hiện thông thường để kết hợpkèo bóng đá hom nayGiá trị. Một từ đơn giản phù hợp với nhãn đó trong một đường kèo bóng đá hom nay. Một ký hiệu ngôi sao (*11717_11762

    fooPhù hợp với đường kèo bóng đá hom nay nhãn chính xácfoo*.foo.*Phù hợp với bất kỳ đường kèo bóng đá hom nay nhãn nào chứa nhãnfoo*.fooPhù hợp với bất kỳ đường kèo bóng đá hom nay nhãn nào có nhãn cuối cùng làfoo
    

    Biểu tượng ngôi sao cũng có thể được định lượng để hạn chế số lượng nhãn chúng có thể khớp:

    *nkhớp chính xácnNhãn*n,Trận đấu ít nhấtnNhãn*n,MTrận đấu ít nhấtnnhưng không quáMNhãn*,MKết hợp nhiều nhấtMNhãn - giống như*0,M

    Có một số sửa đổi có thể được đặt ở cuối nhãn không sao tronglqueryĐể làm cho nó phù hợp hơn chỉ là khớp chính xác:

    @Ví dụ, phù hợp với trường hợp không tương ứngA@MatchesA
    *           Phù hợp với bất kỳ nhãn nào với tiền tố này, ví dụfoo*MatchesFoobar%phù hợp với các từ được đánh dấu bằng dấu gạch dưới
    

    Hành vi của%hơi phức tạp. Nó cố gắng để phù hợp với các từ hơn là toàn bộ nhãn. Ví dụfoo_bar%khớpfoo_bar_baznhưng khôngfoo_barbaz. Nếu kết hợp với*, Tiền tố phù hợp áp dụng riêng cho từng từ, ví dụfoo_bar%*Matchesfoo1_bar2_baznhưng khôngFOO1_BR2_BAZ.

    Ngoài ra, bạn có thể viết một số nhãn có thể sửa đổi được phân tách bằng|(hoặc) để phù hợp với bất kỳ nhãn nào trong số đó và bạn có thể đặt!14768_14852

    Đây là một ví dụ được chú thích củalquery:

    Top.*0,2 .Sport*@.! Bóng đá | Tennis.russ*| Tây Ban Nha
    Một.  b.     c.      d.               e.

    Truy vấn này sẽ phù hợp với bất kỳ đường kèo bóng đá hom nay nhãn nào:

    1. Bắt đầu bằng nhãnTOP

    2. và Next có từ 0 đến hai nhãn trước

    3. Một nhãn bắt đầu với tiền tố không nhạy cảm với trường hợpSport

    4. Sau đó, một nhãn không khớpbóng đáNorTennis

    5. Và sau đó kết thúc bằng một nhãn bắt đầu bằngRusshoặc khớp chính xácTây Ban Nha.

  • LtxtQueryđại diện cho một mẫu toàn văn-tìm kiếm để kết hợpkèo bóng đá hom nayGiá trị. MỘTLtxtQueryGiá trị chứa các từ, có thể với các sửa đổi@, *, %Cuối cùng; các bộ sửa đổi có ý nghĩa giống như tronglquery. Các từ có thể được kết hợp với&(và),|(hoặc),!(không) và dấu ngoặc đơn. Sự khác biệt chính từlqueryLtxtQuerykhớp với các từ mà không liên quan đến vị trí của chúng trong đường kèo bóng đá hom nay nhãn.

    Đây là một ví dụLtxtQuery:

    Châu Âu & Nga*@ &! Giao thông vận tải

    Điều này sẽ khớp với các đường kèo bóng đá hom nay có chứa nhãnChâu Âuvà bất kỳ nhãn nào bắt đầu bằngNga(không nhạy cảm với trường hợp), nhưng không phải đường kèo bóng đá hom nay chứa nhãnGiao thông vận tải. Vị trí của những từ này trong đường kèo bóng đá hom nay không quan trọng. Ngoài ra, khi%được sử dụng, từ này có thể được khớp với bất kỳ từ nào được phân tách trong một nhãn, bất kể vị trí.

Lưu ý:LtxtQueryCho phép khoảng trắng giữa các ký hiệu, nhưngkèo bóng đá hom naylqueryKhông.

F.21.2. Toán tử và chức năng

loại17938_17945Có toán tử so sánh thông thường=, <, <, , <=, =. So sánh sắp xếp theo thứ tự của một cây truyền tải, với những đứa trẻ của một nút được sắp xếp theo văn bản nhãn. Ngoài ra, các toán tử chuyên dụng được hiển thị trongBảng F.13có sẵn.

Bảng F.13.kèo bóng đá hom nayNgười vận hành

18892_18902 return Mô tả
kèo bóng đá hom nay @ kèo bóng đá hom nay Boolean là đối số trái một tổ tiên bên phải (hoặc bằng)?
kèo bóng đá hom nay <@ kèo bóng đá hom nay Boolean là đối số trái là hậu duệ của bên phải (hoặc bằng)?
kèo bóng đá hom nay ~ lquery Boolean khôngkèo bóng đá hom naykhớplquery?
lquery ~ kèo bóng đá hom nay Boolean khôngkèo bóng đá hom nayMatchlquery?
kèo bóng đá hom nay ? lquery [] Boolean khôngkèo bóng đá hom naykhớp với bất kỳlquerytrong mảng?
lquery [] ? kèo bóng đá hom nay Boolean khôngkèo bóng đá hom naykhớp với bất kỳlquery20842_20854
kèo bóng đá hom nay @ LtxtQuery Boolean khôngkèo bóng đá hom naykhớpLtxtQuery?
LtxtQuery @ kèo bóng đá hom nay Boolean khôngkèo bóng đá hom naykhớpLtxtQuery?
kèo bóng đá hom nay || kèo bóng đá hom nay kèo bóng đá hom nay Concatenatekèo bóng đá hom nayđường kèo bóng đá hom nay
kèo bóng đá hom nay || 21910_21916 kèo bóng đá hom nay Chuyển đổi văn bản thànhkèo bóng đá hom nayvà Concatenate
Text || kèo bóng đá hom nay kèo bóng đá hom nay Chuyển đổi văn bản thànhkèo bóng đá hom nayvà Concatenate
kèo bóng đá hom nay [] @ kèo bóng đá hom nay Boolean Mảng có chứa tổ tiên củakèo bóng đá hom nay?
kèo bóng đá hom nay <@ kèo bóng đá hom nay [] Boolean Mảng có chứa tổ tiên củakèo bóng đá hom nay?
kèo bóng đá hom nay [] <@ kèo bóng đá hom nay Boolean mảng có chứa hậu duệ củakèo bóng đá hom nay?
kèo bóng đá hom nay @ kèo bóng đá hom nay [] Boolean mảng có chứa hậu duệ củakèo bóng đá hom nay?
kèo bóng đá hom nay [] ~ lquery Boolean Mảng có chứa bất kỳ đường kèo bóng đá hom nay nào khớplquery?
lquery ~ kèo bóng đá hom nay [] Boolean Mảng có chứa bất kỳ đường kèo bóng đá hom nay nào khớplquery?
kèo bóng đá hom nay [] ? lquery [] Boolean khôngkèo bóng đá hom nayMảng chứa bất kỳ đường kèo bóng đá hom nay nào khớp với bất kỳlquery?
lquery [] ? kèo bóng đá hom nay [] Boolean khôngkèo bóng đá hom nayMảng chứa bất kỳ đường kèo bóng đá hom nay nào khớp với bất kỳlquery?
kèo bóng đá hom nay [] @ LtxtQuery Boolean Mảng có chứa bất kỳ đường kèo bóng đá hom nay nào khớpLtxtQuery?
LtxtQuery @ kèo bóng đá hom nay [] Boolean Mảng có chứa bất kỳ đường kèo bóng đá hom nay nào khớpLtxtquery?
kèo bóng đá hom nay [] 25629_25637 kèo bóng đá hom nay kèo bóng đá hom nay mục nhập mảng đầu tiên là tổ tiên củakèo bóng đá hom nay; Null nếu không
kèo bóng đá hom nay [] ? <@ kèo bóng đá hom nay kèo bóng đá hom nay Mục nhập mảng đầu tiên là hậu duệ củakèo bóng đá hom nay; Null nếu không
kèo bóng đá hom nay [] ? ~ lquery kèo bóng đá hom nay Mục nhập mảng đầu tiên phù hợplquery; Null nếu không
kèo bóng đá hom nay [] ?@ LtxtQuery kèo bóng đá hom nay Mục nhập mảng đầu tiên phù hợpLtxtQuery; Null nếu không

Người vận hành<@, @, @~Có các chất tương tự^<@, ^@, ^@, ^~, giống nhau ngoại trừ chúng không sử dụng các chỉ mục. Đây chỉ là hữu ích cho mục đích thử nghiệm.

Các chức năng có sẵn được hiển thị trongBảng F.14.

Bảng F.14.kèo bóng đá hom nayChức năng

chức năng Loại trả lại Mô tả Ví dụ result
subltree (kèo bóng đá hom nay, int start, int end) kèo bóng đá hom nay Subpath ofkèo bóng đá hom naytừ vị tríBắt đầuđến vị tríkết thúc-1 (đếm từ 0) Sublree ('top.child1.child2', 1,2) Child1
Subpath (kèo bóng đá hom nay, int offset, int len) kèo bóng đá hom nay Subpath ofkèo bóng đá hom nayBắt đầu tại vị tríOffset, lengthlen. Nếu nhưOffsetlà âm, đường kèo bóng đá hom nay bắt đầu xa so với cuối đường kèo bóng đá hom nay. Nếu nhưlenlà âm, để lại nhiều nhãn ra khỏi đầu đường kèo bóng đá hom nay. Subpath ('top.child1.child2', 0,2) top.child1
Subpath (kèo bóng đá hom nay, int offset) kèo bóng đá hom nay Subpath ofkèo bóng đá hom nayBắt đầu tại vị tríOffset, Mở rộng đến cuối đường kèo bóng đá hom nay. Nếu nhưOffsetlà âm, đường kèo bóng đá hom nay bắt đầu xa so với cuối đường kèo bóng đá hom nay. Subpath ('top.child1.child2', 1) Child1.child2
nlevel (kèo bóng đá hom nay) Số nguyên Số lượng nhãn trong đường kèo bóng đá hom nay nlevel ('top.child1.child2') 3
INDEX (kèo bóng đá hom nay A, kèo bóng đá hom nay B) Số nguyên vị trí xuất hiện đầu tiên củaBinA; -1 nếu không tìm thấy 31048_31088 6
INDEX (kèo bóng đá hom nay A, kèo bóng đá hom nay B, INT OFFSET) 31314_31323 vị trí xuất hiện đầu tiên củaBinA, Tìm kiếm bắt đầu tạiOffset; tiêu cựcOffset31597_31612-offsetNhãn từ cuối đường kèo bóng đá hom nay INDEX ('0.1.2.3.5.5.5.6.8.5.6.8', '5.6',-4) 9
Text2Ltree (văn bản) kèo bóng đá hom nay CastTextđếnkèo bóng đá hom nay
LTREE2TEXT (kèo bóng đá hom nay) Text Castkèo bóng đá hom nay32541_32547Text
LCA (kèo bóng đá hom nay, kèo bóng đá hom nay, ...) kèo bóng đá hom nay Tổ tiên chung dài nhất của các đường kèo bóng đá hom nay (tối đa 8 đối số được hỗ trợ) LCA ('1.2.3', '1.2.3.4.5.6') 1.2
LCA (kèo bóng đá hom nay []) kèo bóng đá hom nay Tổ tiên chung dài nhất của các đường kèo bóng đá hom nay trong mảng LCA (mảng ['1.2.3' :: kèo bóng đá hom nay, '1.2.3.4']) 1.2

F.21.3. Chỉ mục

kèo bóng đá hom nayHỗ trợ một số loại chỉ mục có thể tăng tốc các toán tử được chỉ định:

  • chỉ mục B-cây trênkèo bóng đá hom nay: <, <=, =, =,

  • 34321_34339kèo bóng đá hom nay: <, <=, =, =, , @, <@, @, ~, ?

    Ví dụ về việc tạo một chỉ mục như vậy:

    34805_34862
  • Chỉ mục GIST trênkèo bóng đá hom nay []: kèo bóng đá hom nay [] <@ kèo bóng đá hom nay, kèo bóng đá hom nay @ kèo bóng đá hom nay [], @, ~, ?

    Ví dụ về việc tạo một chỉ mục như vậy:

    Tạo chỉ mục path_gist_idx khi kiểm tra bằng GIST (Array_Path);

    Lưu ý: Loại chỉ mục này bị mất.

F.21.4. Ví dụ

Ví dụ này sử dụng dữ liệu sau (cũng có sẵn trong tệpPROVELLETrong phân phối nguồn):

Tạo thử nghiệm bảng (đường dẫn kèo bóng đá hom nay);
Chèn vào các giá trị kiểm tra ('trên cùng');
Chèn vào các giá trị kiểm tra ('top.science');
Chèn vào các giá trị kiểm tra ('top.science.astronomy');
Chèn vào các giá trị kiểm tra ('top.science.astronomy.astrophysics');
Chèn vào các giá trị kiểm tra ('top.science.astronomy.cosmology');
Chèn vào các giá trị kiểm tra ('top.hobbies');
Chèn vào các giá trị kiểm tra ('top.hobbies.amateurs_astronomy');
Chèn vào các giá trị kiểm tra ('top.collections');
Chèn vào các giá trị kiểm tra ('top.collections.pictures');
Chèn vào các giá trị kiểm tra ('top.collections.pictures.astronomy');
Chèn vào các giá trị kiểm tra ('top.collections.pictures.astronomy.stars');
Chèn vào các giá trị kiểm tra ('top.collections.pictures.astronomy.galaxies');
Chèn vào các giá trị kiểm tra ('top.collections.pictures.astronomy.astronauts');
Tạo chỉ mục path_gist_idx khi kiểm tra bằng gist (đường dẫn);
Tạo chỉ mục path_idx khi kiểm tra bằng btree (path);

Bây giờ, chúng ta có một bảngtestĐược điền với dữ liệu mô tả hệ thống phân cấp được hiển thị bên dưới:

Top
                     / |  \
             Bộ sưu tập sở thích khoa học
                 / |              \
        Thiên văn học nghiệp dư_astronomy hình ảnh
           / \ |
Vật lý thiên văn học thiên văn học
                                        / |    \
                                 Galaxies Stars Astronauts

Chúng ta có thể kế thừa:

lTreetest = Chọn đường kèo bóng đá hom nay từ bài kiểm tra trong đó đường kèo bóng đá hom nay <@ 'top.science';
                con đường
----------------------------------------
 Top.Science
 Top.science.Astronomy
 Top.science.astronomy.astrophysics
 Top.science.Astronomy.Cosmology
(4 hàng)

Dưới đây là một số ví dụ về đường kèo bóng đá hom nay khớp:

lTreetest = Chọn đường kèo bóng đá hom nay từ bài kiểm tra trong đó đường kèo bóng đá hom nay ~ '*.Astronomy.*';
                     con đường
---------------------------------------------------
 Top.science.Astronomy
 Top.science.astronomy.astrophysics
 Top.science.Astronomy.Cosmology
 Top.collections.pictures.Astronomy
 Top.collections.pictures.astronomy.stars
 Top.collections.pictures.astronomy.galaxies
 Top.collections.pictures.astronomy.astronauts
(7 hàng)

ltreetest = chọn đường kèo bóng đá hom nay từ thử nghiệm trong đó đường kèo bóng đá hom nay ~ '*.! hình ảnh@.*. Thiên văn học.*';
                con đường
----------------------------------------
 Top.science.Astronomy
 Top.science.astronomy.astrophysics
 Top.science.Astronomy.Cosmology
(3 hàng)

Đây là một số ví dụ về tìm kiếm văn bản đầy đủ:

38363_38872

Xây dựng đường kèo bóng đá hom nay sử dụng các chức năng:

lTreetest = chọn Subpath (đường kèo bóng đá hom nay, 0,2) |
                 ? Cột?
--------------------------------------------------
 Top.science.space.astronomy
 Top.science.space.astronomy.astrophysics
 Top.science.space.astronomy.cosmology
(3 hàng)

Chúng tôi có thể đơn giản hóa điều này bằng cách tạo hàm SQL chèn nhãn tại một vị trí được chỉ định trong một đường kèo bóng đá hom nay:

Tạo hàm ins_label (kèo bóng đá hom nay, int, text) trả về kèo bóng đá hom nay
    Như 'Chọn Subpath ($ 1,0, $ 2) || $ 3 || Subpath ($ 1, $ 2); '
    Ngôn ngữ SQL bất biến;

ltreetest = chọn ins_label (đường dẫn, 2, 'không gian') từ thử nghiệm trong đó đường dẫn <@ 'top.science.astronomy';
                INS_Label
--------------------------------------------------
 Top.science.space.astronomy
 Top.science.space.astronomy.astrophysics
 Top.science.space.astronomy.cosmology
(3 hàng)

39976_40001

Tiện ích mở rộng bổ sung có sẵn để thực hiện các biến đổi chokèo bóng đá hom nayLoại cho PL/Python. Các tiện ích mở rộng được gọi làltree_plpythonu, LTREE_PLPYTHON2ULTREE_PLPYTHON3U(xemPhần 46.1Đối với quy ước đặt tên PL/Python). Nếu bạn cài đặt các biến đổi này và chỉ định chúng khi tạo hàm,kèo bóng đá hom nayGiá trị được ánh xạ vào danh sách Python. (Tuy nhiên, điều ngược lại không được hỗ trợ.)

THẬN TRỌNG

Được khuyến nghị mạnh mẽ rằng các tiện ích mở rộng biến đổi được cài đặt trong cùng lược đồ vớikèo bóng đá hom nay. Nếu không

F.21.6. Tác giả

Tất 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. Các tác giả xin cảm ơn Eugeny Rodichev vì các cuộc thảo luận hữu ích. Nhận xét và báo cáo lỗi được hoan nghênh.