F.29. ltree
ÐÑÐ¾Ñ Ð¼Ð¾Ð´ÑÐ»Ñ ÑеализÑÐµÑ Ñип даннÑÑ
ltree Ð´Ð»Ñ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¼ÐµÑок даннÑÑ
в иеÑаÑÑ
иÑеÑкой дÑевовидной ÑÑÑÑкÑÑÑе. Ðн Ñакже пÑедоÑÑавлÑÐµÑ ÑаÑÑиÑеннÑе ÑÑедÑÑва Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка в ÑакиÑ
деÑевÑÑÑ
.
ÐаннÑй модÑÐ»Ñ ÑÑиÑаеÑÑÑ Â«Ð´Ð¾Ð²ÐµÑеннÑм», Ñо еÑÑÑ ÐµÐ³Ð¾ могÑÑ ÑÑÑанавливаÑÑ Ð¾Ð±ÑÑнÑе полÑзоваÑели, имеÑÑие пÑаво CREATE в ÑекÑÑей базе даннÑÑ
.
F.29.1. ÐпÑеделениÑ
ÐеÑка â ÑÑо поÑледоваÑелÑноÑÑÑ Ð°Ð»ÑавиÑно-ÑиÑÑовÑÑ
Ñимволов и знаков подÑÑÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ (напÑимеÑ, в локали C допÑÑкаÑÑÑÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ A-Za-z0-9_). ÐеÑки Ð´Ð¾Ð»Ð¶Ð½Ñ Ð·Ð°Ð½Ð¸Ð¼Ð°ÑÑ Ð¼ÐµÐ½ÑÑе 256 Ñимволов.
ÐÑимеÑÑ: 42, Personal_Services
ÐÑÑÑ Ð¼ÐµÑки â ÑÑо поÑледоваÑелÑноÑÑÑ Ð¸Ð· нÑÐ»Ñ Ð¸Ð»Ð¸ неÑколÑкиÑ
ÑазделÑннÑÑ
ÑоÑками меÑок (напÑимеÑ, L1.L2.L3), пÑедÑÑавлÑÑÑÐ°Ñ Ð¿ÑÑÑ Ð¾Ñ ÐºÐ¾ÑÐ½Ñ Ð¸ÐµÑаÑÑ
иÑеÑкого деÑева к конкÑеÑÐ½Ð¾Ð¼Ñ ÑзлÑ. ÐÑÑÑ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð±Ð¾Ð»ÑÑе 65535 меÑок.
ÐÑимеÑ: Top.Countries.Europe.Russia
ÐодÑÐ»Ñ ltree пÑедоÑÑавлÑÐµÑ Ð½ÐµÑколÑко Ñипов даннÑÑ
:
ltreeÑ ÑÐ°Ð½Ð¸Ñ Ð¿ÑÑÑ Ð¼ÐµÑки.lqueryпÑедÑÑавлÑÐµÑ Ð½Ð°Ð¿Ð¾Ð¼Ð¸Ð½Ð°ÑÑий ÑегÑлÑÑнÑе вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑÐ¾Ñ Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка нÑжнÑÑ Ð·Ð½Ð°Ñенийltree. РнÑм пÑоÑÑое Ñлово вÑбиÑÐ°ÐµÑ ÑооÑвеÑÑÑвÑÑÑÑÑ Ð¼ÐµÑÐºÑ Ð² заданном пÑÑи, а звÑздоÑка (*) â Ð½Ð¾Ð»Ñ Ð¸Ð»Ð¸ более лÑбÑÑ Ð¼ÐµÑок. ÐÑделÑнÑе компоненÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑоединиÑÑ ÑоÑками и полÑÑиÑÑ Ð·Ð°Ð¿ÑоÑ, коÑоÑÐ¾Ð¼Ñ Ð±ÑÐ´ÐµÑ ÑооÑвеÑÑÑвоваÑÑ Ð²ÐµÑÑ Ð¿ÑÑÑ Ñ ÑказаннÑми меÑками. ÐапÑимеÑ:foo ÐÑбиÑÐ°ÐµÑ Ð¿ÑÑÑ Ñовно Ñ Ð¾Ð´Ð½Ð¾Ð¹ меÑкой
foo*.foo.* ÐÑбиÑÐ°ÐµÑ Ð¿ÑÑÑ, ÑодеÑжаÑий меÑкÑfoo*.foo ÐÑбиÑÐ°ÐµÑ Ð¿ÑÑÑ Ñ Ð¿Ð¾Ñледней меÑкойfooÐ Ð´Ð»Ñ Ð·Ð²ÑздоÑки, и Ð´Ð»Ñ Ð¿ÑоÑÑÑÑ Ñлов можно добавиÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑвенное знаÑение, опÑеделÑÑÑее ÑиÑло меÑок, коÑоÑÑе бÑдÑÑ ÑооÑвеÑÑÑвоваÑÑ ÑÑÐ¾Ð¼Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½ÑÑ:
*{n} ÐÑбиÑÐ°ÐµÑ ÑовноnмеÑок *{n,} ÐÑбиÑÐ°ÐµÑ ÐºÐ°Ðº минимÑмnмеÑок *{n,m} ÐÑбиÑÐ°ÐµÑ Ð½Ðµ менÑÑеn, но и не болееmмеÑок *{,m} ÐÑбиÑÐ°ÐµÑ Ð½Ðµ болÑÑеmмеÑок â ÑавнознаÑно *{0,m} foo{n,m} ÐÑбиÑÐ°ÐµÑ ÐºÐ°Ðº минимÑмn, но не болÑÑеmÐ²Ñ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ð¹foofoo{,} ÐÑбиÑÐ°ÐµÑ Ð»Ñбое колиÑеÑÑво Ð²Ñ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ð¹foo, в Ñом ÑиÑле нолÑРоÑÑÑÑÑÑвие Ñвного ÑиÑлового огÑаниÑÐµÐ½Ð¸Ñ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð·Ð²ÑздоÑки по ÑмолÑÐ°Ð½Ð¸Ñ ÑооÑвеÑÑÑвÑÐµÑ Ð»Ñбое колиÑеÑÑво меÑок (Ñо еÑÑÑ
{,}), а обÑÑÐ½Ð¾Ð¼Ñ ÑÐ»Ð¾Ð²Ñ â Ñовно одно Ð²Ñ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ðµ (Ñо еÑÑÑ{1}).ÐоÑле оÑлиÑного Ð¾Ñ Ð·Ð²ÑздоÑки ÑлеменÑа
lqueryмогÑÑ Ð±ÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ñ Ð¼Ð¾Ð´Ð¸ÑикаÑоÑÑ, позволÑÑÑие вÑбÑаÑÑ Ð½Ðµ ÑолÑко пÑоÑÑÑе ÑовпадениÑ:@ ÐÑбиÑÐ°ÐµÑ Ñовпадение без ÑÑÑÑа ÑегиÑÑÑа; напÑимеÑ, запÑоÑÑ
a@ÑооÑвеÑÑÑвÑеÑA* ÐÑбиÑÐ°ÐµÑ Ð»ÑбÑÑ Ð¼ÐµÑÐºÑ Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñм пÑеÑикÑом, напÑимеÑ, запÑоÑÑfoo*ÑооÑвеÑÑÑвÑеÑfoobar% ÐÑбиÑÐ°ÐµÑ Ð² меÑке наÑалÑнÑе Ñлова, ÑазделÑннÑе подÑÑÑкиваниÑмиÐоведение модиÑикаÑоÑа
%неÑколÑко неÑÑивиалÑное. Ðн пÑÑаеÑÑÑ Ð½Ð°Ð¹Ñи ÑооÑвеÑÑÑвие по Ñловам, а не по вÑей меÑке. ÐапÑимеÑ, запÑоÑfoo_bar%вÑбиÑаеÑfoo_bar_baz, но неfoo_barbaz. Ð ÑоÑеÑании Ñ*ÑопоÑÑавление пÑеÑикÑа пÑименÑеÑÑÑ Ð¾ÑделÑно к ÐºÐ°Ð¶Ð´Ð¾Ð¼Ñ ÑловÑ, напÑÐ¸Ð¼ÐµÑ Ð·Ð°Ð¿ÑоÑfoo_bar%*вÑбиÑаеÑfoo1_bar2_baz, но неfoo1_br2_baz.Также можно запиÑаÑÑ Ð½ÐµÑколÑко ÑазлиÑнÑÑ Ð¼ÐµÑок, оÑлиÑнÑÑ Ð¾Ñ Ð·Ð²ÑздоÑек, ÑеÑез знак
|(обознаÑаÑÑий ÐÐÐ) Ð´Ð»Ñ Ð²ÑбоÑа лÑбой из ÑÑÐ¸Ñ Ð¼ÐµÑок, либо добавиÑÑ Ð·Ð½Ð°Ðº!(ÐÐ) в наÑале гÑÑÐ¿Ð¿Ñ Ð±ÐµÐ· звÑздоÑки Ð´Ð»Ñ Ð²ÑбоÑа меÑки, не ÑооÑвеÑÑÑвÑÑÑей ни одной из ÑказаннÑÑ Ð°Ð»ÑÑеÑнаÑив. ÐолиÑеÑÑвенное огÑаниÑение, еÑли оно ÑÑебÑеÑÑÑ, задаÑÑÑÑ Ð² конÑе гÑÑппÑ; ÑÑо ознаÑаеÑ, ÑÑо оно дейÑÑвÑÐµÑ Ð½Ð° вÑÑ Ð³ÑÑÐ¿Ð¿Ñ Ð² Ñелом (Ñо еÑÑÑ Ð¾Ð³ÑаниÑÐ¸Ð²Ð°ÐµÑ ÑиÑло меÑок, ÑооÑвеÑÑÑвÑÑÑÐ¸Ñ Ð¸Ð»Ð¸ не ÑооÑвеÑÑÑвÑÑÑÐ¸Ñ Ð¾Ð´Ð½Ð¾Ð¹ из алÑÑеÑнаÑив).РаÑÑиÑеннÑй пÑимеÑ
lquery:Top.*{0,2}.sport*@.!football|tennis{1,}.Russ*|Spain a. b. c. d. e.ÐÑÐ¾Ñ Ð·Ð°Ð¿ÑÐ¾Ñ Ð²ÑбеÑÐµÑ Ð¿ÑÑÑ, коÑоÑÑй:
наÑинаеÑÑÑ Ñ Ð¼ÐµÑки
Topи заÑем вклÑÑÐ°ÐµÑ Ð¾Ñ Ð½ÑÐ»Ñ Ð´Ð¾ двÑÑ Ð¼ÐµÑок до
меÑки, наÑинаÑÑейÑÑ Ñ Ð¿ÑеÑикÑа
sport(без ÑÑÑÑа ÑегиÑÑÑа)заÑем Ð¾Ð´Ð½Ñ Ð¸Ð»Ð¸ неÑколÑко меÑок, оÑлиÑнÑÑ Ð¾Ñ
footballиtennisи заканÑиваеÑÑÑ Ð¼ÐµÑкой, коÑоÑÐ°Ñ Ð½Ð°ÑинаеÑÑÑ Ð¿Ð¾Ð´ÑÑÑокой
Russили в ÑоÑноÑÑи ÑавнаSpain.
ltxtqueryпÑедÑÑавлÑÐµÑ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ñй полноÑекÑÑÐ¾Ð²Ð¾Ð¼Ñ Ð·Ð°Ð¿ÑÐ¾Ñ Ð¿Ð¾Ð¸Ñка Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑÐ¸Ñ Ð·Ð½Ð°Ñенийltree. ÐнаÑениеltxtqueryÑодеÑÐ¶Ð¸Ñ Ñлова, возможно Ñ Ð¼Ð¾Ð´Ð¸ÑикаÑоÑами@,*,%в конÑе; ÑÑи модиÑикаÑоÑÑ Ð¸Ð¼ÐµÑÑ Ñо же знаÑение, ÑÑо и вlquery. Слова можно обÑединÑÑÑ Ñимволами&(Ð),|(ÐÐÐ),!(ÐÐ) и Ñкобками. ÐлÑÑевое оÑлиÑие оÑlqueryÑоÑÑÐ¾Ð¸Ñ Ð² Ñом, ÑÑоltxtqueryвÑбиÑÐ°ÐµÑ Ñлова незавиÑимо Ð¾Ñ Ð¸Ñ Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² пÑÑи меÑки.ÐÑимеÑ
ltxtquery:Europe & Russia*@ & !Transportation
ÐÑÐ¾Ñ Ð·Ð°Ð¿ÑÐ¾Ñ Ð²ÑбеÑÐµÑ Ð¿ÑÑи, ÑодеÑжаÑие меÑкÑ
Europeили лÑбÑÑ Ð¼ÐµÑÐºÑ Ñ Ð½Ð°ÑалÑной подÑÑÑокойRussia(без ÑÑÑÑа ÑегиÑÑÑа), но не пÑÑи, ÑодеÑжаÑие меÑкÑTransportation. Ðоложение ÑÑÐ¸Ñ Ñлов в пÑÑи не Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°ÑениÑ. ÐÑоме Ñого, когда пÑименÑеÑÑÑ%, Ñлово Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑопоÑÑавлено Ñ Ð»ÑбÑм дÑÑгим оÑделÑннÑм подÑÑÑкиваниÑми Ñловом в меÑке, вне завиÑимоÑÑи Ð¾Ñ ÐµÐ³Ð¾ положениÑ.
ÐамеÑание: ltxtquery допÑÑÐºÐ°ÐµÑ Ð¿ÑÐ¾Ð±ÐµÐ»Ñ Ð¼ÐµÐ¶Ð´Ñ Ñимволами, а ltree и lquery â неÑ.
F.29.2. ÐпеÑаÑоÑÑ Ð¸ ÑÑнкÑии
ÐÐ»Ñ Ñипа ltree опÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð¾Ð±ÑÑнÑе опеÑаÑоÑÑ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ =, <>, <, >, <=, >=. СÑавнение ÑоÑÑиÑÑÐµÑ Ð¿ÑÑи в поÑÑдке Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ деÑевÑ, а поÑомки Ñзла ÑоÑÑиÑÑÑÑÑÑ Ð¿Ð¾ ÑекÑÑÑ Ð¼ÐµÑки. Рдополнение к ним еÑÑÑ Ð¸ ÑпеÑиализиÑованнÑе опеÑаÑоÑÑ, пеÑеÑиÑленнÑе в ТаблиÑе F.18.
ТаблиÑа F.18. ÐпеÑаÑоÑÑ ltree
ÐпеÑаÑÐ¾Ñ ÐпиÑание |
|---|
ÐевÑй аÑгÑÐ¼ÐµÐ½Ñ ÑвлÑеÑÑÑ Ð¿Ñедком пÑавого (или Ñавен емÑ)? |
ÐевÑй аÑгÑÐ¼ÐµÐ½Ñ ÑвлÑеÑÑÑ Ð¿Ð¾Ñомком пÑавого (или Ñавен емÑ)? |
ÐнаÑение |
ÐнаÑение |
ÐнаÑение |
СоединÑÐµÑ Ð´Ð²Ð° пÑÑи |
ÐÑеобÑазÑÐµÑ ÑекÑÑ Ð² |
ÐаÑÑив ÑодеÑÐ¶Ð¸Ñ Ð¿Ñедка |
ÐаÑÑив ÑодеÑÐ¶Ð¸Ñ Ð¿Ð¾Ñомка |
ÐаÑÑив ÑодеÑÐ¶Ð¸Ñ ÐºÐ°ÐºÐ¾Ð¹-либо пÑÑÑ, ÑооÑвеÑÑÑвÑÑÑий |
ÐаÑÑив |
ÐаÑÑив ÑодеÑÐ¶Ð¸Ñ Ð¿ÑÑÑ, ÑооÑвеÑÑÑвÑÑÑий |
ÐÑдаÑÑ Ð¿ÐµÑвÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¼Ð°ÑÑива, ÑвлÑÑÑийÑÑ Ð¿Ñедком |
ÐÑдаÑÑ Ð¿ÐµÑвÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¼Ð°ÑÑива, ÑвлÑÑÑийÑÑ Ð¿Ð¾Ñомком |
ÐÑдаÑÑ Ð¿ÐµÑвÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¼Ð°ÑÑива, ÑооÑвеÑÑÑвÑÑÑий |
ÐÑдаÑÑ Ð¿ÐµÑвÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¼Ð°ÑÑива, ÑооÑвеÑÑÑвÑÑÑий |
ÐпеÑаÑоÑÑ <@, @>, @ и ~ имеÑÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸ в виде ^<@, ^@>, ^@, ^~, коÑоÑÑе оÑлиÑаÑÑÑ ÑолÑко Ñем, ÑÑо не иÑполÑзÑÑÑ Ð¸Ð½Ð´ÐµÐºÑÑ. Ðни Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ ÑолÑко Ð´Ð»Ñ ÑеÑÑиÑованиÑ.
ÐоÑÑÑпнÑе ÑÑнкÑии пеÑеÑиÑÐ»ÐµÐ½Ñ Ð² ТаблиÑе F.19.
ТаблиÑа F.19. ФÑнкÑии ltree
F.29.3. ÐндекÑÑ
ltree поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð½ÐµÑколÑко Ñипов индекÑов, коÑоÑÑе могÑÑ ÑÑкоÑиÑÑ Ð¾Ð·Ð½Ð°ÑеннÑе опеÑаÑии:
B-деÑево по знаÑениÑм
ltree:<,<=,=,>=,>GiST по знаÑениÑм
ltree(клаÑÑ Ð¾Ð¿ÐµÑаÑоÑовgist_ltree_ops):<,<=,=,>=,>,@>,<@,@,~,?ÐлаÑÑ Ð¾Ð¿ÐµÑаÑоÑов GiST
gist_ltree_opsаппÑокÑимиÑÑÐµÑ Ð½Ð°Ð±Ð¾Ñ Ð¼ÐµÑок пÑÑи в виде ÑигнаÑÑÑÑ Ð±Ð¸Ñовой каÑÑÑ. Рего необÑзаÑелÑном ÑелоÑиÑленном паÑамеÑÑеsiglenможно задаÑÑ ÑÐ°Ð·Ð¼ÐµÑ ÑигнаÑÑÑÑ Ð² байÑÐ°Ñ . Ð Ð°Ð·Ð¼ÐµÑ ÑигнаÑÑÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ â 8 байÑ. ÐаÑамеÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑинимаÑÑ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑелÑнÑе знаÑÐµÐ½Ð¸Ñ Ð´Ð¾ 2024, кÑаÑнÑе вÑÑÐ°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ ÑелÑм (int) (4 байÑа Ð´Ð»Ñ Ð±Ð¾Ð»ÑÑинÑÑва маÑин). ÐÑи ÑвелиÑении ÑазмеÑа ÑигнаÑÑÑÑ Ð¿Ð¾Ð¸Ñк ÑабоÑÐ°ÐµÑ ÑоÑнее (ÑканиÑÑеÑÑÑ Ð¼ÐµÐ½ÑÑÐ°Ñ Ð¾Ð±Ð»Ð°ÑÑÑ Ð² индекÑе и менÑÑе ÑÑÑÐ°Ð½Ð¸Ñ ÐºÑÑи), но Ñам Ð¸Ð½Ð´ÐµÐºÑ ÑÑановиÑÑÑ Ð±Ð¾Ð»ÑÑе.ÐÑÐ¸Ð¼ÐµÑ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñакого индекÑа Ñ ÑазмеÑом ÑигнаÑÑÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ (8 байÑ):
CREATE INDEX path_gist_idx ON test USING GIST (path);
ÐÑÐ¸Ð¼ÐµÑ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñакого индекÑа Ñ Ð´Ð»Ð¸Ð½Ð¾Ð¹ ÑигнаÑÑÑÑ 100 байÑ:
CREATE INDEX path_gist_idx ON test USING GIST (path gist_ltree_ops(siglen=100));
GiST-Ð¸Ð½Ð´ÐµÐºÑ Ð¿Ð¾ маÑÑивÑ
ltree[](gist__ltree_opsopclass):ltree[] <@ ltree,ltree @> ltree[],@,~,?ÐлаÑÑ Ð¾Ð¿ÐµÑаÑоÑов GiST
gist__ltree_opsÑабоÑÐ°ÐµÑ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð¾gist_ltree_opsи Ñакже пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð² паÑамеÑÑе Ð´Ð»Ð¸Ð½Ñ ÑигнаÑÑÑÑ. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð·Ð½Ð°Ñениеsiglenвgist__ltree_opsÑоÑÑавлÑÐµÑ 28 байÑ.ÐÑÐ¸Ð¼ÐµÑ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñакого индекÑа Ñ ÑазмеÑом ÑигнаÑÑÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ (28 байÑ):
CREATE INDEX path_gist_idx ON test USING GIST (array_path);
ÐÑÐ¸Ð¼ÐµÑ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñакого индекÑа Ñ Ð´Ð»Ð¸Ð½Ð¾Ð¹ ÑигнаÑÑÑÑ 100 байÑ:
CREATE INDEX path_gist_idx ON test USING GIST (array_path gist__ltree_ops(siglen=100));
ÐÑимеÑание: ÐÐ½Ð´ÐµÐºÑ ÑÑого Ñипа ÑвлÑеÑÑÑ Ð½ÐµÑоÑнÑм.
F.29.4. ÐÑимеÑ
ÐÐ»Ñ ÑÑого пÑимеÑа иÑполÑзÑÑÑÑÑ ÑледÑÑÑие даннÑе (ÑÑо же опиÑание даннÑÑ
наÑ
одиÑÑÑ Ð² Ñайле contrib/ltree/ltreetest.sql в диÑÑÑибÑÑиве иÑÑ
одного кода):
CREATE TABLE test (path ltree);
INSERT INTO test VALUES ('Top');
INSERT INTO test VALUES ('Top.Science');
INSERT INTO test VALUES ('Top.Science.Astronomy');
INSERT INTO test VALUES ('Top.Science.Astronomy.Astrophysics');
INSERT INTO test VALUES ('Top.Science.Astronomy.Cosmology');
INSERT INTO test VALUES ('Top.Hobbies');
INSERT INTO test VALUES ('Top.Hobbies.Amateurs_Astronomy');
INSERT INTO test VALUES ('Top.Collections');
INSERT INTO test VALUES ('Top.Collections.Pictures');
INSERT INTO test VALUES ('Top.Collections.Pictures.Astronomy');
INSERT INTO test VALUES ('Top.Collections.Pictures.Astronomy.Stars');
INSERT INTO test VALUES ('Top.Collections.Pictures.Astronomy.Galaxies');
INSERT INTO test VALUES ('Top.Collections.Pictures.Astronomy.Astronauts');
CREATE INDEX path_gist_idx ON test USING GIST (path);
CREATE INDEX path_idx ON test USING BTREE (path);РиÑоге Ð¼Ñ Ð¿Ð¾Ð»ÑÑаем ÑаблиÑÑ test, наполненнÑÑ Ð´Ð°Ð½Ð½Ñми, пÑедÑÑавлÑÑÑими ÑледÑÑÑÑÑ Ð¸ÐµÑаÑÑ
иÑ:
Top
/ | \
Science Hobbies Collections
/ | \
Astronomy Amateurs_Astronomy Pictures
/ \ |
Astrophysics Cosmology Astronomy
/ | \
Galaxies Stars AstronautsÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ вÑбÑаÑÑ Ð¿Ð¾Ñомки в иеÑаÑÑ Ð¸Ð¸ наÑледованиÑ:
ltreetest=> SELECT path FROM test WHERE path <@ 'Top.Science';
path
------------------------------------
Top.Science
Top.Science.Astronomy
Top.Science.Astronomy.Astrophysics
Top.Science.Astronomy.Cosmology
(4 rows)
ÐеÑколÑко пÑимеÑов вÑбоÑки по пÑÑÑм:
ltreetest=> SELECT path FROM test WHERE path ~ '*.Astronomy.*';
path
-----------------------------------------------
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 rows)
ltreetest=> SELECT path FROM test WHERE path ~ '*[email protected].*';
path
------------------------------------
Top.Science.Astronomy
Top.Science.Astronomy.Astrophysics
Top.Science.Astronomy.Cosmology
(3 rows)
ÐÑÑ Ð½ÐµÑколÑко пÑимеÑов полноÑекÑÑового поиÑка:
ltreetest=> SELECT path FROM test WHERE path @ 'Astro*% & !pictures@';
path
------------------------------------
Top.Science.Astronomy
Top.Science.Astronomy.Astrophysics
Top.Science.Astronomy.Cosmology
Top.Hobbies.Amateurs_Astronomy
(4 rows)
ltreetest=> SELECT path FROM test WHERE path @ 'Astro* & !pictures@';
path
------------------------------------
Top.Science.Astronomy
Top.Science.Astronomy.Astrophysics
Top.Science.Astronomy.Cosmology
(3 rows)
ÐбÑазование пÑÑи Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑÑнкÑий:
ltreetest=> SELECT subpath(path,0,2)||'Space'||subpath(path,2) FROM test WHERE path <@ 'Top.Science.Astronomy';
?column?
------------------------------------------
Top.Science.Space.Astronomy
Top.Science.Space.Astronomy.Astrophysics
Top.Science.Space.Astronomy.Cosmology
(3 rows)
ÐÑÑ Ð¿ÑоÑедÑÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑпÑоÑÑиÑÑ, Ñоздав ÑÑнкÑÐ¸Ñ SQL, вÑÑавлÑÑÑÑÑ Ð¼ÐµÑÐºÑ Ð² опÑеделÑннÑÑ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ Ð² пÑÑи:
CREATE FUNCTION ins_label(ltree, int, text) RETURNS ltree
AS 'select subpath($1,0,$2) || $3 || subpath($1,$2);'
LANGUAGE SQL IMMUTABLE;
ltreetest=> SELECT ins_label(path,2,'Space') FROM test WHERE path <@ 'Top.Science.Astronomy';
ins_label
------------------------------------------
Top.Science.Space.Astronomy
Top.Science.Space.Astronomy.Astrophysics
Top.Science.Space.Astronomy.Cosmology
(3 rows)
F.29.5. ТÑанÑÑоÑмаÑии
Также имеÑÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе ÑаÑÑиÑениÑ, ÑеализÑÑÑие ÑÑанÑÑоÑмаÑии Ñипа ltree Ð´Ð»Ñ ÑзÑка PL/Python. ÐÑи ÑаÑÑиÑÐµÐ½Ð¸Ñ Ð½Ð°Ð·ÑваÑÑÑÑ ltree_plpythonu, ltree_plpython2u и ltree_plpython3u (ÑоглаÑÐµÐ½Ð¸Ñ Ð¾Ð± именовании, пÑинÑÑÑе Ð´Ð»Ñ Ð¸Ð½ÑеÑÑейÑа PL/Python, опиÑÐ°Ð½Ñ Ð² Разделе 45.1). ÐÑли Ð²Ñ ÑÑÑановиÑе ÑÑи ÑÑанÑÑоÑмаÑии и ÑкажеÑе иÑ
пÑи Ñоздании ÑÑнкÑии, знаÑÐµÐ½Ð¸Ñ ltree бÑдÑÑ Ð¾ÑобÑажаÑÑÑÑ Ð² ÑпиÑки Python. (Ðднако обÑаÑное пÑеобÑазование не поддеÑживаеÑÑÑ.)
Ðнимание
РаÑÑиÑениÑ, ÑеализÑÑÑие ÑÑанÑÑоÑмаÑии, наÑÑоÑÑелÑно ÑекомендÑеÑÑÑ ÑÑÑанавливаÑÑ Ð² Ð¾Ð´Ð½Ñ ÑÑ
ÐµÐ¼Ñ Ñ ltree. ÐÑÐ±Ð¾Ñ ÐºÐ°ÐºÐ¾Ð¹-либо дÑÑгой ÑÑ
емÑ, коÑоÑÐ°Ñ Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð¾Ð±ÑекÑÑ, ÑозданнÑе злонамеÑеннÑм полÑзоваÑелем, ÑÑÐµÐ²Ð°Ñ ÑгÑозами безопаÑноÑÑи во вÑÐµÐ¼Ñ ÑÑÑановки ÑаÑÑиÑениÑ.
F.29.6. ÐвÑоÑÑ
РазÑабоÑÐºÑ Ð¾ÑÑÑеÑÑвили ФÑÐ´Ð¾Ñ Ð¡Ð¸Ð³Ð°ÐµÐ² (<[email protected]>) и Ðлег ÐаÑÑÑнов (<[email protected]>). ÐополниÑелÑнÑе ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ найÑи на ÑÑÑаниÑе http://www.sai.msu.su/~megera/postgres/gist/. ÐвÑоÑÑ Ð²ÑÑажаÑÑ Ð±Ð»Ð°Ð³Ð¾Ð´Ð°ÑноÑÑÑ ÐÐ²Ð³ÐµÐ½Ð¸Ñ Ð Ð¾Ð´Ð¸ÑÐµÐ²Ñ Ð·Ð° полезнÑе диÑкÑÑÑии. ÐамеÑÐ°Ð½Ð¸Ñ Ð¸ ÑообÑÐµÐ½Ð¸Ñ Ð¾Ð± оÑибкаÑ
пÑивеÑÑÑвÑÑÑÑÑ.