F.26. ltree
ÐÑÐ¾Ñ Ð¼Ð¾Ð´ÑÐ»Ñ ÑеализÑÐµÑ Ñип даннÑÑ
ltree Ð´Ð»Ñ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¼ÐµÑок даннÑÑ
в иеÑаÑÑ
иÑеÑкой дÑевовидной ÑÑÑÑкÑÑÑе. Ðн Ñакже пÑедоÑÑавлÑÐµÑ ÑаÑÑиÑеннÑе ÑÑедÑÑва Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка в ÑакиÑ
деÑевÑÑÑ
.
F.26.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}РконÑе меÑки, оÑлиÑной Ð¾Ñ Ð·Ð²ÑздоÑки, в
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.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.26.2. ÐпеÑаÑоÑÑ Ð¸ ÑÑнкÑии
ÐÐ»Ñ Ñипа ltree опÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð¾Ð±ÑÑнÑе опеÑаÑоÑÑ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ =, <>, <, >, <=, >=. СÑавнение ÑоÑÑиÑÑÐµÑ Ð¿ÑÑи в поÑÑдке Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ деÑевÑ, а поÑомки Ñзла ÑоÑÑиÑÑÑÑÑÑ Ð¿Ð¾ ÑекÑÑÑ Ð¼ÐµÑки. Рдополнение к ним еÑÑÑ Ð¸ ÑпеÑиализиÑованнÑе опеÑаÑоÑÑ, пеÑеÑиÑленнÑе в ТаблиÑе F.14.
ТаблиÑа F.14. ÐпеÑаÑоÑÑ ltree
| ÐпеÑаÑÐ¾Ñ | ÐозвÑаÑÐ°ÐµÑ | ÐпиÑание |
|---|---|---|
ltree @> ltree | boolean | левÑй аÑгÑÐ¼ÐµÐ½Ñ ÑвлÑеÑÑÑ Ð¿Ñедком пÑавого (или Ñавен емÑ)? |
ltree <@ ltree | boolean | левÑй аÑгÑÐ¼ÐµÐ½Ñ ÑвлÑеÑÑÑ Ð¿Ð¾Ñомком пÑавого (или Ñавен емÑ)? |
ltree ~ lquery | boolean | знаÑение ltree ÑооÑвеÑÑÑвÑÐµÑ lquery? |
lquery ~ ltree | boolean | знаÑение ltree ÑооÑвеÑÑÑвÑÐµÑ lquery? |
ltree ? lquery[] | boolean | знаÑение ltree ÑооÑвеÑÑÑвÑÐµÑ Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð¸Ð· lquery в маÑÑиве? |
lquery[] ? ltree | boolean | знаÑение ltree ÑооÑвеÑÑÑвÑÐµÑ Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð¸Ð· lquery в маÑÑиве? |
ltree @ ltxtquery | boolean | знаÑение ltree ÑооÑвеÑÑÑвÑÐµÑ ltxtquery? |
ltxtquery @ ltree | boolean | знаÑение ltree ÑооÑвеÑÑÑвÑÐµÑ ltxtquery? |
ltree || ltree | ltree | обÑединÑÐµÑ Ð´Ð²Ð° пÑÑи ltree |
ltree || text | ltree | пÑеобÑазÑÐµÑ ÑекÑÑ Ð² ltree и обÑединÑÐµÑ Ñ Ð¿ÑÑÑм |
text || ltree | ltree | пÑеобÑазÑÐµÑ ÑекÑÑ Ð² ltree и обÑединÑÐµÑ Ñ Ð¿ÑÑÑм |
ltree[] @> ltree | boolean | маÑÑив ÑодеÑÐ¶Ð¸Ñ Ð¿Ñедка ltree? |
ltree <@ ltree[] | boolean | маÑÑив ÑодеÑÐ¶Ð¸Ñ Ð¿Ñедка ltree? |
ltree[] <@ ltree | boolean | маÑÑив ÑодеÑÐ¶Ð¸Ñ Ð¿Ð¾Ñомка ltree? |
ltree @> ltree[] | boolean | маÑÑив ÑодеÑÐ¶Ð¸Ñ Ð¿Ð¾Ñомка ltree? |
ltree[] ~ lquery | boolean | маÑÑив ÑодеÑÐ¶Ð¸Ñ Ð¿ÑÑÑ, ÑооÑвеÑÑÑвÑÑÑий lquery? |
lquery ~ ltree[] | boolean | маÑÑив ÑодеÑÐ¶Ð¸Ñ Ð¿ÑÑÑ, ÑооÑвеÑÑÑвÑÑÑий lquery? |
ltree[] ? lquery[] | boolean | маÑÑив ltree ÑодеÑÐ¶Ð¸Ñ Ð¿ÑÑÑ, ÑооÑвеÑÑÑвÑÑÑий лÑÐ±Ð¾Ð¼Ñ Ð¸Ð· lquery? |
lquery[] ? ltree[] | boolean | маÑÑив ltree ÑодеÑÐ¶Ð¸Ñ Ð¿ÑÑÑ, ÑооÑвеÑÑÑвÑÑÑий лÑÐ±Ð¾Ð¼Ñ Ð¸Ð· lquery? |
ltree[] @ ltxtquery | boolean | маÑÑив ÑодеÑÐ¶Ð¸Ñ Ð¿ÑÑÑ, ÑооÑвеÑÑÑвÑÑÑий ltxtquery? |
ltxtquery @ ltree[] | boolean | маÑÑив ÑодеÑÐ¶Ð¸Ñ Ð¿ÑÑÑ, ÑооÑвеÑÑÑвÑÑÑий ltxtquery? |
ltree[] ?@> ltree | ltree | пеÑвÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¼Ð°ÑÑива, ÑвлÑÑÑийÑÑ Ð¿Ñедком ltree; NULL, еÑли Ñакого Ð½ÐµÑ |
ltree[] ?<@ ltree | ltree | пеÑвÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¼Ð°ÑÑива, ÑвлÑÑÑийÑÑ Ð¿Ð¾Ñомком ltree; NULL, еÑли Ñакого Ð½ÐµÑ |
ltree[] ?~ lquery | ltree | пеÑвÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¼Ð°ÑÑива, ÑооÑвеÑÑÑвÑÑÑий lquery; NULL, еÑли Ñакого Ð½ÐµÑ |
ltree[] ?@ ltxtquery | ltree | пеÑвÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¼Ð°ÑÑива, ÑооÑвеÑÑÑвÑÑÑий ltxtquery; NULL, еÑли Ñакого Ð½ÐµÑ |
ÐпеÑаÑоÑÑ <@, @>, @ и ~ имеÑÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸ в виде ^<@, ^@>, ^@, ^~, коÑоÑÑе оÑлиÑаÑÑÑ ÑолÑко Ñем, ÑÑо не иÑполÑзÑÑÑ Ð¸Ð½Ð´ÐµÐºÑÑ. Ðни Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ ÑолÑко Ð´Ð»Ñ ÑеÑÑиÑованиÑ.
ÐоÑÑÑпнÑе ÑÑнкÑии пеÑеÑиÑÐ»ÐµÐ½Ñ Ð² ТаблиÑе F.15.
ТаблиÑа F.15. ФÑнкÑии ltree
F.26.3. ÐндекÑÑ
ltree поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð½ÐµÑколÑко Ñипов индекÑов, коÑоÑÑе могÑÑ ÑÑкоÑиÑÑ Ð¾Ð·Ð½Ð°ÑеннÑе опеÑаÑии:
B-деÑево по знаÑениÑм
ltree:<,<=,=,>=,>GiST по знаÑениÑм
ltree:<,<=,=,>=,>,@>,<@,@,~,?ÐÑÐ¸Ð¼ÐµÑ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñакого индекÑа:
CREATE INDEX path_gist_idx ON test USING GIST (path);
GiST по ÑÑолбÑÑ
ltree[]:ltree[] <@ ltree,ltree @> ltree[],@,~,?ÐÑÐ¸Ð¼ÐµÑ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñакого индекÑа:
CREATE INDEX path_gist_idx ON test USING GIST (array_path);
ÐÑимеÑание: ÐÐ½Ð´ÐµÐºÑ ÑÑого Ñипа ÑвлÑеÑÑÑ Ð½ÐµÑоÑнÑм.
F.26.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 ~ '*.!pictures@.*.Astronomy.*';
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.26.5. ТÑанÑÑоÑмаÑии
Также имеÑÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе ÑаÑÑиÑениÑ, ÑеализÑÑÑие ÑÑанÑÑоÑмаÑии Ñипа ltree Ð´Ð»Ñ ÑзÑка PL/Python. ÐÑи ÑаÑÑиÑÐµÐ½Ð¸Ñ Ð½Ð°Ð·ÑваÑÑÑÑ ltree_plpythonu, ltree_plpython2u и ltree_plpython3u (ÑоглаÑÐµÐ½Ð¸Ñ Ð¾Ð± именовании, пÑинÑÑÑе Ð´Ð»Ñ Ð¸Ð½ÑеÑÑейÑа PL/Python, опиÑÐ°Ð½Ñ Ð² Разделе 44.1). ÐÑли Ð²Ñ ÑÑÑановиÑе ÑÑи ÑÑанÑÑоÑмаÑии и ÑкажеÑе иÑ
пÑи Ñоздании ÑÑнкÑии, знаÑÐµÐ½Ð¸Ñ ltree бÑдÑÑ Ð¾ÑобÑажаÑÑÑÑ Ð² ÑпиÑки Python. (Ðднако обÑаÑное пÑеобÑазование не поддеÑживаеÑÑÑ.)
Ðнимание
РаÑÑиÑениÑ, ÑеализÑÑÑие ÑÑанÑÑоÑмаÑии, наÑÑоÑÑелÑно ÑекомендÑеÑÑÑ ÑÑÑанавливаÑÑ Ð² Ð¾Ð´Ð½Ñ ÑÑ
ÐµÐ¼Ñ Ñ ltree. ÐÑÐ±Ð¾Ñ ÐºÐ°ÐºÐ¾Ð¹-либо дÑÑгой ÑÑ
емÑ, коÑоÑÐ°Ñ Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð¾Ð±ÑекÑÑ, ÑозданнÑе злонамеÑеннÑм полÑзоваÑелем, ÑÑÐµÐ²Ð°Ñ ÑгÑозами безопаÑноÑÑи во вÑÐµÐ¼Ñ ÑÑÑановки ÑаÑÑиÑениÑ.
F.26.6. ÐвÑоÑÑ
РазÑабоÑÐºÑ Ð¾ÑÑÑеÑÑвили ФÑÐ´Ð¾Ñ Ð¡Ð¸Ð³Ð°ÐµÐ² (<teodor@stack.net>) и Ðлег ÐаÑÑÑнов (<oleg@sai.msu.su>). ÐополниÑелÑнÑе ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ найÑи на ÑÑÑаниÑе http://www.sai.msu.su/~megera/postgres/gist/. ÐвÑоÑÑ Ð²ÑÑажаÑÑ Ð±Ð»Ð°Ð³Ð¾Ð´Ð°ÑноÑÑÑ ÐÐ²Ð³ÐµÐ½Ð¸Ñ Ð Ð¾Ð´Ð¸ÑÐµÐ²Ñ Ð·Ð° полезнÑе диÑкÑÑÑии. ÐамеÑÐ°Ð½Ð¸Ñ Ð¸ ÑообÑÐµÐ½Ð¸Ñ Ð¾Ð± оÑибкаÑ
пÑивеÑÑÑвÑÑÑÑÑ.