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=> select * from ltreetest limit 10;
t
-----------
1
1.1
1.1.1
1.1.1.1
1.1.1.2
1.1.1.2.1
1.1.2
1.1.2.1
1.1.3
(10 rows)
–查询
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)
–查询’1.1.2.2’的祖先数据
bill@bill=> select * from ltreetest where t @> '1.1.2.2';
t
-------
1
1.1
1.1.2
(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)
参考资料:
https://www.postgresql.org/docs/13/ltree.html