文档章节

postgreSQL | ltree

猫咪要感冒
 猫咪要感冒
发布于 2017/05/20 14:45
字数 815
阅读 147
收藏 1

参考链接

树状数据存储与查询(非递归) - Use ltree extension deal tree-like data type(德哥github博文)

postgresql ltree类型(推酷)

ltree的官方介绍 

1. 安装、数据类型介绍、操作符介绍、函数介绍 

安装  "ltree" 索引扩展(使用超级用户)

create extension ltree;

查看

select * from pg_extension ;
\dT

数据类型介绍

  •  ltree (目前只支持A-Z,a-z,0-9,_作为label的合法字符)

    树形结构类型,一个ltree被称为一个path,由1或多个LABEL组成,每个label由A-Za-z0-9_组成。ltree是由标签和分隔符组成的字符串,比如:L1.L2.L3

  •  lquery

    规则表达式,用于匹配ltree类型.

    具体参考手册,需要注意的是%匹配的不是一个label,而是label里的一个单词(_为单词分隔符

  •  ltxtquery

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

操作符介绍:

Operator Returns Description
ltree @> ltree boolean is left argument an ancestor of right (or equal)?
ltree <@ ltree boolean is left argument a descendant of right (or equal)?
ltree ~ lquery boolean does ltree match lquery?
lquery ~ ltree boolean does ltree match lquery?
ltree ? lquery[] boolean does ltree match any lquery in array?
lquery[] ? ltree boolean does ltree match any lquery in array?
ltree @ ltxtquery boolean does ltree match ltxtquery?
ltxtquery @ ltree boolean does ltree match ltxtquery?
ltree || ltree ltree concatenate ltree paths
ltree || text ltree convert text to ltree and concatenate
text || ltree ltree convert text to ltree and concatenate
ltree[] @> ltree boolean does array contain an ancestor of ltree?
ltree <@ ltree[] boolean does array contain an ancestor of ltree?
ltree[] <@ ltree boolean does array contain a descendant of ltree?
ltree @> ltree[] boolean does array contain a descendant of ltree?
ltree[] ~ lquery boolean does array contain any path matching lquery?
lquery ~ ltree[] boolean does array contain any path matching lquery?
ltree[] ? lquery[] boolean does ltree array contain any path matching any lquery?
lquery[] ? ltree[] boolean does ltree array contain any path matching any lquery?
ltree[] @ ltxtquery boolean does array contain any path matching ltxtquery?
ltxtquery @ ltree[] boolean does array contain any path matching ltxtquery?
ltree[] ?@> ltree ltree first array entry that is an ancestor of ltree; NULL if none
ltree[] ?<@ ltree ltree first array entry that is a descendant of ltree; NULL if none
ltree[] ?~ lquery ltree first array entry that matches lquery; NULL if none
ltree[] ?@ ltxtquery ltree first array entry that matches ltxtquery; NULL if none

函数简单介绍:

Function Return Type Description Example Result
subltree(ltree, int start, int end) ltree subpath of ltree from position start to position end-1 (counting from 0) subltree('Top.Child1.Child2',1,2) Child1
subpath(ltree, int offset, int len) ltree subpath of ltree starting at position offset, length len. If offset is negative, subpath starts that far from the end of the path. If len is negative, leaves that many labels off the end of the path. subpath('Top.Child1.Child2',0,2) Top.Child1
subpath(ltree, int offset) ltree subpath of ltree starting at position offset, extending to end of path. If offset is negative, subpath starts that far from the end of the path. subpath('Top.Child1.Child2',1) Child1.Child2
nlevel(ltree) integer number of labels in path nlevel('Top.Child1.Child2') 3
index(ltree a, ltree b) integer position of first occurrence of b in a; -1 if not found index('0.1.2.3.5.4.5.6.8.5.6.8','5.6') 6
index(ltree a, ltree b, int offset) integer position of first occurrence of b in a, searching starting at offset; negative offsetmeans start -offset labels from the end of the path index('0.1.2.3.5.4.5.6.8.5.6.8','5.6',-4) 9
text2ltree(text) ltree cast text to ltree - -
ltree2text(ltree) text cast ltree to text - -
lca(ltree, ltree, ...) ltree lowest common ancestor, i.e., longest common prefix of paths (up to 8 arguments supported) lca('1.2.2.3','1.2.3.4.5.6') 1.2
lca(ltree[]) ltree lowest common ancestor, i.e., longest common prefix of paths lca(array['1.2.2.3'::ltree,'1.2.3']) 1.2

2. 样例

2.1 推酷、德哥博客都用到的

建表

create table public.test(
id serial,
song ltree not null);

初始化后的数据

  • 查询:刘德华的歌曲

  • 查询:与刘德华同一个区域(港台,男歌手)的歌手

 

© 著作权归作者所有

下一篇: Linux | awk
猫咪要感冒
粉丝 6
博文 22
码字总数 16868
作品 0
合肥
程序员
私信 提问
Slick-pg v0.6.5.2 发布,Slick 的 PG 扩展

Slick-pg v0.6.5.2 发布了,相比 0.6.3 主要更新有: - 增加了 pg LTree 的支持 - search 增强:更多操作符/方法;允许指定语言 - date2/threeten 插件:允许选择性的绑定 Duration/Period ...

Tu_Minglei
2014/10/08
330
0
Slick-pg v0.9.0 发布,PostgreSQL 的 Slick 扩展

Slick-pg v0.9.0 发布了。主要更新是 升级到了 slick v3.0.0,其他的倒没有什么特别值得一提的。 欢迎使用,祝各位愉快! Slick-pg 是一些针对 PostgreSQL 的 Slick 扩展,用于支持 PostgreS...

Tu_Minglei
2015/05/04
824
0
slick-pg v0.9.2 发布,Slick 的 PostgreSQL 插件

slick-pg v0.9.2 发布,相比 v0.9.1,主要更新有: 升级到 slick v3.0.1 Plain SQL 支持增强:next array 扩展机制增强 Plain SQL 支持增强:为 slick-pg 扩展支持的 scala 类型增加了 `Get...

Tu_Minglei
2015/08/10
903
4
PostgreSQL Oracle 兼容性 - connect by 2

标签 PostgreSQL , Oracle , 树形查询 , 递归 , connect by , tablefunc , connectby 背景 Oracle connect by语法经常用于有树形关系的记录查询,PostgreSQL使用CTE递归语法,可以实现同样的...

德哥
2018/10/05
0
0
PostgreSQL 递归应用实践 - 非“传销”的高并发实时藤、树状佣金分配体系

标签 PostgreSQL , 佣金分配 , 树状 , 藤状 , 递归查询 , 传销 背景 早在十年前,PostgreSQL 8点几的版本就支持了递归查询,递归查询的应用非常的广泛,如下: 《PostgreSQL 递归妙用案例 - ...

德哥
04/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
48分钟前
6
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
今天
8
0
详解箭头函数和普通函数的区别以及箭头函数的注意事项、不适用场景

箭头函数是ES6的API,相信很多人都知道,因为其语法上相对于普通函数更简洁,深受大家的喜爱。就是这种我们日常开发中一直在使用的API,大部分同学却对它的了解程度还是不够深... 普通函数和...

OBKoro1
今天
7
0
轻量级 HTTP(s) 代理 TinyProxy

CentOS 下安装 TinyProxy yum install -y tinyproxy 启动、停止、重启 # 启动service tinyproxy start# 停止service tinyproxy stop# 重启service tinyproxy restart 相关配置 默认...

Anoyi
今天
2
0
Linux创建yum仓库

第一步、搞定自己的光盘 #创建文件夹 mkdir -p /media/cdrom #挂载光盘 mount /dev/cdrom /media/cdrom #编辑配置文件使其永久生效 vim /etc/fstab 第二步,编辑yun源 vim /ect yum.repos.d...

究极小怪兽zzz
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部