PostgreSQL树状存储——ltree

ltree是pg内置的一个插件,实现了一种数据类型ltree用于表示存储在一个层次树状结构中的数据的标签。还提 供了在标签树中搜索的扩展功能。

使用方法:
1、安装extension,需要超级用户

bill@bill=> create extension ltree;  
CREATE EXTENSION  

2、支持的数据类型
ltree (目前只支持A-Z,a-z,0-9,_作为label的合法字符)
树形结构类型,一个ltree被称为一个path,由1或多个LABEL组成,每个label由A-Z,a-z,0-9,_组成。

lquery
规则表达式,用于匹配ltree类型。需要注意的是%匹配的不是一个label,而是label里的一个单词(_为单词分隔符)

ltxtquery
一般用于全文扫描,注意,只有ltxtquery类型是符号和匹配的内容是可以有空格隔开的,lquery和ltree不支持空格。

3、实例
–建表

bill@bill=>CREATE TABLE ltreetest (t ltree);
CREATE TABLE
bill@bill=>copy ltreetest from '/home/pg12/postgresql-12beta4/contrib/ltree/data/ltree.data';
COPY 1006

–查询

bill@bill=>explain SELECT * FROM ltreetest WHERE t <  '12.3' order by t asc;
                           QUERY PLAN                            
-----------------------------------------------------------------
 Sort  (cost=23.59..23.59 rows=1 width=57)
   Sort Key: t
   ->  Seq Scan on ltreetest  (cost=0.00..23.58 rows=1 width=57)
         Filter: (t < '12.3'::ltree)
(4 rows)

–创建btree索引

bill@bill=>create unique index tstidx on ltreetest (t);
CREATE INDEX
bill@bill=>analyze ltreetest ;
ANALYZE
bill@bill=>explain SELECT * FROM ltreetest WHERE t <  '12.3' order by t asc;
                                  QUERY PLAN                                  
------------------------------------------------------------------------------
 Index Only Scan using tstidx on ltreetest  (cost=0.28..2.89 rows=1 width=57)
   Index Cond: (t < '12.3'::ltree)
(2 rows)

–创建gist索引

bill@bill=>drop index tstidx;
DROP INDEX
bill@bill=>create index tstidx on ltreetest using gist (t);
CREATE INDEX
bill@bill=>analyze ltreetest ;
ANALYZE
bill@bill=>explain SELECT * FROM ltreetest WHERE t <  '12.3' order by t asc;
                                  QUERY PLAN                                   
-------------------------------------------------------------------------------
 Sort  (cost=2.77..2.77 rows=1 width=57)
   Sort Key: t
   ->  Index Scan using tstidx on ltreetest  (cost=0.14..2.76 rows=1 width=57)
         Index Cond: (t < '12.3'::ltree)
(4 rows)
发布了77 篇原创文章 · 获赞 12 · 访问量 5284

猜你喜欢

转载自blog.csdn.net/weixin_39540651/article/details/104022258