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
7925_7996
Bạn có thể muốn xem cùng kèo bóng đá euro trang chohiện tạiPhiên bản hoặc kèo bóng đá euro trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

F.22. ltree

Mô -đun này thực hiện kiểu dữ liệultreeĐể biểu diễn kèo bóng đá euro 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 kèo bóng đá euro được cung cấp.

F.22.1. Định nghĩa

Akèo bóng đá eurolà kèo bóng đá euro chuỗi các ký tự chữ và số (ví dụ: trong c locale các ký tựA-ZA-Z0-9_được cho phép). kèo bóng đá euro phải dài dưới 256 ký tự.

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

Ađường dẫn kèo bóng đá eurolà một chuỗi không hoặc nhiều kèo bóng đá euro đượ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 dẫn 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 dẫn kèo bóng đá euro không thể vượt quá 65535 kèo bóng đá euro.

Ví dụ:top.countries.europe.russia

TheLtreeMô -đun cung cấp kèo bóng đá euro số loại dữ liệu:

  • LtreeLưu trữ đường dẫn kèo bóng đá euro.

  • lqueryđại diện cho kèo bóng đá euro mẫu giống như biểu hiện thông thường để kết hợpLtreeGiá trị. Một từ đơn giản phù hợp với kèo bóng đá euro đó trong một đường dẫn. Một ký hiệu ngôi sao (*) khớp với số không hoặc nhiều kèo bóng đá euro. Ví dụ:

    fookhớp với đường dẫn kèo bóng đá euro chính xácfoo*.foo.*Phù hợp với bất kỳ đường dẫn kèo bóng đá euro nào chứa kèo bóng đá eurofoo*.foo11888_11931foo

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

    *nkhớp chính xácnkèo bóng đá euro*n,Trận đấu ít nhấtnkèo bóng đá euro*n,MTrận đấu ít nhấtnnhưng không quáMkèo bóng đá euro*,MKết hợp nhiều nhấtMkèo bóng đá euro - giống như*0,M

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

    @Ví dụ, phù hợp với trường hợp không nhạy cảm, ví dụA@khớpA
    *           Phù hợp với bất kỳ kèo bóng đá euro nào với tiền tố này, ví dụfoo*MatchesFoobar%Kết hợp các từ được viết tắt ban đầu

    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ộ kèo bóng đá euro. Ví dụfoo_bar%Matchesfoo_bar_baznhưng khôngfoo_barbaz. Nếu kết hợp với*, Tiền tố khớp áp dụng riêng cho từng từ, ví dụfoo_bar%*khớpfoo1_bar2_baznhưng khôngFOO1_BR2_BAZ.

    Ngoài ra, bạn có thể viết một số kèo bóng đá euro có thể sửa đổi được phân tách bằng|(hoặc) để phù hợp với bất kỳ kèo bóng đá euro nào trong số đó và bạn có thể đặt!(không) khi bắt đầu phù hợp với bất kỳ kèo bóng đá euro nào không khớp với bất kỳ lựa chọn thay thế nào.

    Đây là kèo bóng đá euro ví dụ được chú thích củalquery:

    Top.*0,2 .Sport*@.! Bóng đá | Tennis.russ*| Tây Ban Nha
    kèo bóng đá euro.  b.     c.      d.               e.

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

    1. Bắt đầu bằng kèo bóng đá euroTOP

    2. và Next có từ 0 đến hai kèo bóng đá euro trước

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

    4. Sau đó, một kèo bóng đá euro không khớpbóng đácũng khôngTennis

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

  • LtxtQueryđại diện cho kèo bóng đá euro mẫu toàn văn-tìm kiếm để kết hợpLtreeGiá trị. MỘTLtxtQueryGiá trị chứa các từ, có thể với các sửa đổi@, *, %Ở cuối; 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 dẫn kèo bóng đá euro.

    Đây là kèo bóng đá euro 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 dẫn có chứa kèo bóng đá euroChâu Âuvà bất kỳ kèo bóng đá euro nào bắt đầu bằngNga16480_16538Vận chuyển. Vị trí của những từ này trong đường kèo bóng đá euro không quan trọng. Ngoài ra, khi%được sử dụng, từ có thể được khớp với bất kỳ từ được phân tách trong một kèo bóng đá euro, bất kể vị trí.

Lưu ý:LtxtQueryCho phép khoảng trắng giữa các ký hiệu, nhưngltreelqueryKhông.

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

loạiLtreeCó 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 kèo bóng đá euro. Ngoài ra, các toán tử chuyên dụng được hiển thị trongBảng F.14có sẵn.

Bảng F.14.LtreeNgười vận hành

Nhà điều hành return Mô tả
Ltree @ Ltree Boolean là đối số trái kèo bóng đá euro tổ tiên bên phải (hoặc bằng)?
Ltree <@ Ltree Boolean là đối số trái là hậu duệ của bên phải (hoặc bằng)?
Ltree ~ lquery Boolean khôngLtreekhớplquery?
lquery ~ Ltree Boolean khôngLtreekhớplquery?
Ltree ? lquery [] Boolean khôngLtreekhớp với bất kỳlqueryTrong mảng?
lquery [] ? Ltree Boolean khôngLtreekhớp với bất kỳlqueryTrong mảng?
Ltree @ Ltxtquery Boolean khôngLtreekhớpLtxtquery?
ltxtquery @ Ltree Boolean khôngLtreekhớpLtxtQuery?
Ltree || ltree Ltree ConcatenateLtreeđường kèo bóng đá euro
Ltree || Text Ltree Chuyển đổi văn bản thànhLtreevà Concatenate
Text || Ltree Ltree Chuyển đổi văn bản thànhLtreevà Concatenate
Ltree [] @ Ltree Boolean Mảng có chứa tổ tiên củaLtree?
Ltree <@ ltree [] Boolean mảng có chứa tổ tiên củaLtree?
ltree [] <@ Ltree Boolean mảng có chứa hậu duệ củaLtree?
Ltree @ ltree [] Boolean Mảng có chứa hậu duệ củaLtree?
ltree [] ~ lquery Boolean Mảng có chứa bất kỳ đường kèo bóng đá euro nào khớplquery?
lquery ~ Ltree [] Boolean Mảng có chứa bất kỳ đường kèo bóng đá euro nào khớplquery?
ltree [] ? lquery [] Boolean khôngLtreeMảng chứa bất kỳ đường kèo bóng đá euro nào khớp với bất kỳlquery?
lquery [] ? ltree [] Boolean khôngLtreeMảng chứa bất kỳ đường kèo bóng đá euro nào khớp với bất kỳlquery?
Ltree [] @ LtxtQuery Boolean Mảng có chứa bất kỳ đường kèo bóng đá euro nào khớpLtxtQuery?
LtxtQuery @ ltree [] Boolean Mảng có chứa bất kỳ đường kèo bóng đá euro nào khớpLTXTQuery?
ltree [] ?@ Ltree Ltree Mục nhập mảng đầu tiên là tổ tiên củaLtree; Null nếu không
ltree [] ? <@ Ltree Ltree Mục nhập mảng đầu tiên là hậu duệ củaLtree; Null nếu không
ltree [] ? ~ lquery Ltree Mục nhập mảng đầu tiên phù hợplquery; Null nếu không
Ltree [] ?@ LtxtQuery Ltree 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.15.

Bảng F.15.LtreeChức năng

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

F.22.3. Chỉ mục

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

  • Chỉ mục B-Tree trênLtree: <, <=, =, =,

  • Chỉ mục GIST trênLtree: <, <=, =, =, , @, <@, @, ~, ?

    Ví dụ về việc tạo kèo bóng đá euro chỉ mục như vậy:

    30850_30905
  • Chỉ mục GIST trênltree []: ltree [] <@ ltree, ltree @ ltree [], @, 31145_31148, ?

    Ví dụ về việc tạo kèo bóng đá euro 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.22.4. Ví dụ

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

31715_32584

Bây giờ, chúng ta có kèo bóng đá euro 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:

32739_33132

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

lTreetest = Chọn đường kèo bóng đá euro từ thử nghiệm trong đó đường kèo bóng đá euro <@ '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 đá euro khớp:

33502_34155

Đây là kèo bóng đá euro số ví dụ về tìm kiếm văn bản đầy đủ:

lTreetest = Chọn đường kèo bóng đá euro từ bài kiểm tra trong đó đường kèo bóng đá euro @ 'astro*% &! Hình ảnh @';
                con đường
----------------------------------------
 Top.science.Astronomy
 Top.science.astronomy.astrophysics
 Top.science.Astronomy.Cosmology
 Top.hobbies.amateurs_astronomy
(4 hàng)

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

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

Ltreetest = Chọn Subpath (đường kèo bóng đá euro, 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 kèo bóng đá euro tại một vị trí được chỉ định trong một đường dẫn:

35250_35684

F.22.5. Biến đổi

tiện ích mở rộng bổ sung có sẵn để thực hiện các biến đổi choLtreeLoại cho PL/Python. Các tiện ích mở rộng được gọi làltree_plpythonu, LTREE_PLPYTHON2ULTREE_PLPYTHON3U(xemPhần 45.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,Ltree36391_36479

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ớiltree. Nếu không

F.22.6. Tác giả

Tất cả công việc được thực hiện bởi Teodor Sigaev (37101_37124). 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.