>25_word_end<되는 버전 :>71_word_end<(17>74_word_end<16 / 15 / 14 / 13
>86_word_end<18 / >89_word_end<
이 문서는 >25_word_end<되지 않는 버전의 PostgreSQL 용입니다.
>135_word_end<>71_word_end<버전 또는 위에 나열된 다른 >25_word_end<되는 버전 중 하나입니다.

>140_word_end<

>153_word_end<>154_word_end<>155_word_end<

>156_word_end<

a>158_word_end<|>160_word_end<허용). >158_word_end<은 256 자 미만이어야합니다.

>162_word_end<42, >165_word_end<

a>158_word_end< 경로예를 들어 도트로 분리 된 0 이상의 >158_word_end<의 시퀀스입니다.>169_word_end<, 계층 적 트리의 루트에서 특정 노드까지 경로를 나타냅니다. >158_word_end< 경로의 길이는 65535 >198_word_end<을 초과 할 수 없습니다.

>162_word_end<>172_word_end<

>173_word_end<>154_word_end<>175_word_end<

  • >154_word_end<>158_word_end< 경로를 저장합니다.

  • >178_word_end<>179_word_end<>154_word_end<>280_word_end< 간단한 단어는 경로 내에서 해당 >158_word_end<과 >387_word_end<합니다. 별 기호 (*)는 0 이상의 >158_word_end<과 >387_word_end<합니다. 예를 들어:

    >184_word_end<정확한 >158_word_end< 경로 >387_word_end<>184_word_end<*.>184_word_end<.*>158_word_end<이 포함 된 >198_word_end< 경로 >387_word_end<>184_word_end<*.>184_word_end<마지막 >158_word_end<이있는 >198_word_end< 경로 >387_word_end<>184_word_end<

    스타 기호는 또한 >387_word_end< 할 수있는 >158_word_end< 수를 제한하기 위해 정량화 될 수 있습니다.

    *n>196_word_end<n>198_word_end<*n,>202_word_end<n>198_word_end<*n,M>202_word_end<n>211_word_end<M>198_word_end<>214_word_end<m>216_word_end<m>158_word_end< ->219_word_end<M

    비 스타 >158_word_end<의 끝에 몇 가지 수정자가 있습니다.>222_word_end<>196_word_end<보다 >387_word_end<하게하려면 :

    @>225_word_end<>226_word_end<>227_word_end<a
    *           예를 들어이 접두사와 >198_word_end<을 >387_word_end<시킵니다>184_word_end<*>227_word_end<>184_word_end%>235_word_end<

    >236_word_end<%조금 복잡합니다. 전체 >158_word_end<이 아닌 단어와 >387_word_end<하려고합니다. 예를 들어>184_word_end<_bar%>227_word_end<>184_word_end<_bar_baz>211_word_end<>184_word_end<_barbaz>244_word_end<*, 접두사 매칭은 각 단어에 별도로 적용됩니다 (>162_word_end<>184_word_end<_bar%*>227_word_end<>184_word_end<1_bar2_baz>211_word_end<>251_word_end<.

    또한 분리 된 몇 가지 수정 된 >158_word_end<을 쓸 수 있습니다|(또는) 해당 >198_word_end<과 >387_word_end<하려면!(아님) 대안과 >387_word_end<하지 않는 >198_word_end<과 >387_word_end<하기 >613_word_end<합니다.

    >258_word_end<>222_word_end<:

    >264_word_end<.>219_word_end<2 .sport*@.! Football | Tennis.russ*| >275_word_end<
    에이.  비.     기음.      디.               이자형.

    이 쿼리는 >145_word_end<과 같은 >198_word_end< 경로와 >387_word_end<합니다.

    1. >158_word_end<로 >613_word_end<합니다>264_word_end<

    2. 그리고 >145_word_end<은 >141_word_end<에 0에서 두 개의 >158_word_end<이 있습니다

    3. 케이스 감수성 접두사로 >613_word_end<하는 >158_word_end<>267_word_end<

    4. 그러면 >387_word_end<하지 않는 >158_word_end<>269_word_end<>270_word_end<>271_word_end<

    5. 그런 >145_word_end<로 >613_word_end<하는 >158_word_end<로 끝납니다.>273_word_end<또는 >196_word_end<하는>275_word_end<.

  • >277_word_end<>278_word_end<>154_word_end<>280_word_end<>277_word_end<>282_word_end<@, *, %>288_word_end<>222_word_end<>290_word_end<>291_word_end<>292_word_end<|>294_word_end<!>296_word_end<>222_word_end<>277_word_end<>158_word_end< 경로에서의 >614_word_end<와 상관없이 단어와 >387_word_end<합니다.

    >300_word_end<>277_word_end<:

    >305_word_end< 및 >307_word_end<*@ >291_word_end
    

    이것은 >158_word_end<을 포함하는 경로와 >387_word_end<합니다>305_word_end<로 >613_word_end<하는 모든 >158_word_end<>307_word_end<(사례에 민감하지 않음) >198_word_end<을 포함하는 경로는 아닙니다>309_word_end<>310_word_end<%사용됩니다.이 단어는 >614_word_end<에 관계없이 >198_word_end< 내의 밑줄 내에서 구분 된 단어와 >387_word_end< 할 수 있습니다.

>313_word_end<>277_word_end<기호 사이에 공백을 허용>211_word_end<>154_word_end<>317_word_end<>222_word_end<>319_word_end<

>320_word_end<

>321_word_end<>154_word_end<>323_word_end<=, >326_word_end<, >326_word_end<, , >326_word_end<=, =. 비교는 트리 트래버스 순서대로 정렬되며 노드의 어린이는 >158_word_end< >436_word_end<로 정렬됩니다. 또한에 표시된 전문 >339_word_end<>335_word_end<>336_word_end<

>337_word_end< >154_word_end<>339_word_end<

142_word_end<> 142_word_end<> <>173_word_end 173_word_end
>339_word_end< >341_word_end< >342_word_end<
>154_word_end< @ >154_word_end< >348_word_end< >349_word_end<
>154_word_end< >326_word_end<@ >154_word_end< >348_word_end< >356_word_end<
>154_word_end< ~ >222_word_end< >348_word_end< >363_word_end<>154_word_end<>227_word_end<>222_word_end<?
>222_word_end< ~ >154_word_end< >348_word_end< >363_word_end<>154_word_end<>227_word_end<>222_word_end<?
>154_word_end< ? >178_word_end< [] >348_word_end< >363_word_end<>154_word_end<>387_word_end<>178_word_end<>389_word_end<
>178_word_end< [] ? >154_word_end< >348_word_end< >363_word_end<>397_word_end<>387_word_end<>222_word_end<>389_word_end<
>154_word_end< @ >277_word_end< >348_word_end< >363_word_end<>154_word_end<>227_word_end<>277_word_end<?
>277_word_end< @ >154_word_end< >348_word_end< >363_word_end<>154_word_end<>227_word_end<>277_word_end<?
>154_word_end< >425_word_end< >154_word_end< >154_word_end< >429_word_end<>154_word_end<>431_word_end<
>154_word_end< >425_word_end< >436_word_end< >154_word_end< >436_word_end< 변환>154_word_end<>440_word_end<
>436_word_end< >425_word_end< >154_word_end< >154_word_end< >436_word_end< 변환>154_word_end<>317_word_end< >429_word_end<
>154_word_end< [] @ >154_word_end< >348_word_end< >456_word_end<>154_word_end<?
>154_word_end< >326_word_end<@ >154_word_end< [] >348_word_end< >465_word_end<>154_word_end<?
>154_word_end< [] >326_word_end<@ >154_word_end< >348_word_end< >474_word_end<>154_word_end<?
>154_word_end< @ >154_word_end< [] >348_word_end< >483_word_end<>154_word_end<?
>154_word_end< [] ~ >222_word_end< >348_word_end< 배열은 모든 경로 >387_word_end<를 포함합니까>222_word_end<?
>222_word_end< ~ >154_word_end< [] >348_word_end< 배열은 모든 경로 >387_word_end<를 포함합니다>222_word_end<?
>154_word_end< [] ? >178_word_end< [] >348_word_end< >363_word_end<>154_word_end<배열 >387_word_end<하는 경로가 포함되어 있습니다>222_word_end<?
>178_word_end< [] ? >154_word_end< [] >348_word_end< >363_word_end<>154_word_end<배열이 >387_word_end<하는 경로를 포함합니다>222_word_end<?
>154_word_end< [] @ >277_word_end< >348_word_end< 배열은 모든 경로 >387_word_end<를 포함합니까>277_word_end<?
>277_word_end< @ >154_word_end< [] >348_word_end< 배열이 모든 경로 >387_word_end<가 포함되어 있습니까>277_word_end<?
>154_word_end< [] >546_word_end< >154_word_end< >154_word_end< >550_word_end<>154_word_end<>552_word_end<
>154_word_end< [] ? >326_word_end<@ >154_word_end< >154_word_end< >559_word_end<>154_word_end<>552_word_end<
>154_word_end< [] >564_word_end< >222_word_end< >154_word_end< >387_word_end<하는 첫 번째 배열 항목>222_word_end<>552_word_end<
>154_word_end< [] >546_word_end< >277_word_end< >154_word_end< >387_word_end<하는 첫 번째 배열 항목>277_word_end<>552_word_end<

>580_word_end<>326_word_end<@, @, @~>588_word_end<^>326_word_end<@, >591_word_end<, >591_word_end<, >595_word_end<>596_word_end<

>597_word_end<>598_word_end<.

>600_word_end< >154_word_end<>602_word_end<

142_word_end<> 142_word_end<> <>173_word_end 173_word_end
>602_word_end< >341_word_end< 유형 >342_word_end< >606_word_end< >607_word_end<
Sub>154_word_end< (>154_word_end<, int start, int end) >154_word_end< >610_word_end<>154_word_end<>612_word_end<>613_word_end<>614_word_end<end-1 (0에서 카운트) sub>154_word_end< ( 'top.child1.child2', 1,2) Child1
subpath (>154_word_end<, int offset, int len) >154_word_end< >610_word_end<>154_word_end<>612_word_end< >613_word_end<오프셋, 길이Len. 만약에오프셋부정적인 것은 경로의 끝에서 멀리 떨어진 서브 포트가 >613_word_end<됩니다. 만약에Len부정적이고 경로 끝에서 많은 >198_word_end<이 나옵니다. subpath ( 'top.child1.child2', 0,2) top.child1
subpath (>154_word_end<, int 오프셋) >154_word_end< >610_word_end<>154_word_end<>612_word_end< >613_word_end<오프셋, 경로 끝으로 확장. 만약에오프셋부정적입니다. Subpath는 경로 끝에서 멀리 떨어져 >613_word_end<합니다. subpath ( 'top.child1.child2', 1) child1.child2
nlevel (>154_word_end<) Integer 경로의 >158_word_end< 수 nlevel ( 'top.child1.child2') 3
Index (>397_word_end< A, >397_word_end< B) Integer 첫 번째 발생 >614_word_end<Bina; -1 찾을 수없는 경우 index ( '0.1.2.3.5.4.5.6.8.5.6.8', '5.6') 6
Index (>397_word_end< A, >397_word_end< B, Int Offset) Integer 첫 번째 발생 >614_word_end<Bina,에서 >613_word_end<하는 검색오프셋; 부정적인오프셋start-오프셋경로 끝의 >158_word_end< index ( '0.1.2.3.5.4.5.5.6.8.5.6.8', '5.6', -4) 9
Text2>154_word_end< (Text) >154_word_end< 캐스트>436_word_end<to>154_word_end<
>154_word_end<2text (>154_word_end<) >436_word_end< 캐스트>154_word_end<to>436_word_end<
LCA (>397_word_end<, >397_word_end<, ...) >154_word_end< 경로의 가장 긴 공통 조상 (최대 8 개의 인수 >25_word_end<) LCA ( '1.2.3', '1.2.3.4.5.6') 1.2
LCA (>154_word_end< []) >154_word_end< 배열에서 경로의 가장 긴 공통 조상 LCA (배열 [ '1.2.3':: >154_word_end<, '1.2.3.4']) 1.2

F.22.3. 인덱스

>154_word_end<표시된 >580_word_end< 속도를 높일 수있는 여러 유형의 인덱스를 >25_word_end<합니다.

  • B-Tree Index over>154_word_end<: >326_word_end<, >326_word_end<=, =, =,

  • Gist Index over>154_word_end<: >326_word_end<, >326_word_end<=, =, =, , @, >326_word_end<@, @, ~, ?

    그러한 색인 생성의 >162_word_end<

    GIST (PATH)를 사용하여 테스트시 인덱스 PATH_GIST_IDX 작성;
  • Gist Index over>154_word_end< []: >154_word_end< [] >326_word_end<@ >154_word_end<, >154_word_end< @ >154_word_end< [], @, ~, ?

    그러한 색인 생성의 >162_word_end<

    GIST (array_path)를 사용하여 테스트에서 인덱스 CATE PATH_GIST_IDX 생성;

    >313_word_end<이 색인 유형은 손실입니다.

F.22.4. 예

이 예제는 >145_word_end< 데이터를 사용합니다 (파일에서도 사용 가능Contrib/>154_word_end154_word_end소스 분포에서) :

테이블 테스트 생성 (Path >397_word_end<);
테스트 값에 삽입 ( '>264_word_end<');
테스트 값에 삽입 ( 'top.science');
테스트 값에 삽입 ( 'top.science.astronomy');
테스트 값에 삽입 ( 'top.science.astronomy.astrophysics');
테스트 값에 삽입 ( 'top.science.astronomy.cosmology');
테스트 값에 삽입 ( 'top.hobbies');
테스트 값에 삽입 ( 'top.hobbies.amateurs_astronomy');
테스트 값에 삽입 ( 'top.collections');
테스트 값에 삽입 ( 'top.collections.pictures');
테스트 값에 삽입 ( 'top.collections.pictures.astronomy');
테스트 값에 삽입 ( 'top.collections.pictures.astronomy.stars');
테스트 값에 삽입 ( 'top.collections.pictures.astronomy.galaxies');
테스트 값에 삽입 ( 'top.collections.pictures.astronomy.astronauts');
GIST (PATH)를 사용하여 테스트시 인덱스 PATH_GIST_IDX를 만듭니다.
btree (path);을 사용하여 테스트에서 색인 path_idx를 만듭니다.

이제 테이블이 있습니다테스트아래 표시된 계층을 >342_word_end<하는 데이터가 채워져 있습니다.

상단
                     / |  \
             과학 취미 컬렉션
                 / |              \
        천문학 Amateurs_astronomy 사진
           / \ |
천체 물리학 우주론 천문학
                                        / |    \
                                 은하의 스타 우주 비행사

우리는 상속을 할 수 있습니다 :

>154_word_end326_word_end<@ 'top.science'가있는 테스트에서 경로를 선택합니다.
                길
---------------------------------------
 상위. 과학
 Top.science.astronomy
 Top.science.astronomy.astrophysics
 top.science.astronomy.cosmology
(4 줄)

경로 >387_word_end<의 몇 가지 예는 >145_word_end<과 같습니다.

>154_word_end154_word_end

>145_word_end<은 전체 >436_word_end< 검색의 몇 가지 예입니다.

>154_word_end291_word_end154_word_end291_word_end

함수 사용 경로 구성 :

>154_word_end425_word_end< '공간'>425_word_end< subpath (path, 2)는 path >326_word_end<@ 'top.science.astronomy';
                 ?열?
-----------------------------------------------
 Top.science.space.astronomy
 top.science.space.astronomy.astrophysics
 top.science.space.astronomy.cosmology
(3 줄)

경로에서 지정된 >614_word_end<에 >158_word_end<을 삽입하는 SQL 함수를 만들어이를 단순화 할 수 있습니다.

함수 생성 INS_LABEL (>154_word_end<, int, >436_word_end<)은 >154_word_end<를 >341_word_end<합니다
    AS 'SELECT SUBPATH ($ 1,0, $ 2) >425_word_end< $ 3 >425_word_end< Subpath ($ 1, $ 2); '
    언어 SQL 불변;

>154_word_end326_word_end<@ 'top.science.astronomy'에서 테스트에서 ins_label (Path, 2, 'Space');
                INS_LABEL
-----------------------------------------------
 Top.science.space.astronomy
 top.science.space.astronomy.astrophysics
 top.science.space.astronomy.cosmology
(3 줄)

F.22.5. 변환

|>154_word_end<pl/python의 입력. 확장자는라고합니다.>154_word_end<_plpythonu, >154_word_end<_plpython2u>154_word_end<_plpython3u(참조PostgreSQL : 문서 : 10 : 45.1.윈 사설 토토 사이트 2 vs. 윈 사설 토토 사이트 3PL/Python 명명 규칙). 이 변환을 설치하고 함수를 만들 때 지정하면>154_word_end<값은 Python 목록에 매핑됩니다. (그러나 그 반대는 >71_word_end< >25_word_end<되지 않습니다.)

주의

변환 확장 >602_word_end<을 동일한 스키마에에 설치하는 것이 좋습니다>154_word_end<. 그렇지 않으면 Transform Extension의 스키마에 적대적인 사용자가 정의한 개체가 포함 된 경우 설치 시간 보안 위험이 있습니다.

F.22.6. 저자

모든 작업은 Teo>363_word_end). 보다http : //www.sai.msu.su/~megera/postgres/gist/추가 정보. 저자는 유용한 토론에 대해 Eugeny Rodichev에게 감사의 말씀을 전합니다. 의견과 버그 보고서를 환영합니다.

<>184_word_end 184_word_end