Recent Posts

PostgreSQL Oracle 兼容性之 - rownum

3 minute read

背景 Oracle ROWNUM是一个虚拟列,每输出一行递增1。 Oracle rownum 通常被用于LIMIT输出记录数。 SELECT ROWNUM, empno, ename, job FROM emp WHERE ROWNUM < 5 ORDER BY ename; rownum...

PostgreSQL 多重含义数组检索与条件过滤 (标签1:属性, 标签n:属性) - 包括UPSERT操作如何修改数组、追加数组元素

1 minute read

背景 PG的数组类型,被广泛应用于 画像系统 , 标签系统。 在一些业务重建中,对数组内容的定义往往包含了多重含义,例如即包含了标签本身,又包含了标签的属性(例如 标签值:权值,时间 等)。 那么如何能高效的进行标签的检索,同时又过滤出符合标签加权值的记录呢? 例子 1、建表 create table t...

PostgreSQL 全文检索之 - 位置匹配 过滤语法(例如 ‘速度 <1> 激情’)

3 minute read

背景 PostgreSQL 的全文检索功能非常的丰富,除了我们说的开放式的parser,字典。同时还支持ranking算法(内置以及扩展)。 那么实际上在搜索的需求中,还有一类位置过滤的需求,例如“速度与激情”这个词,分词后是有位置信息的,我们期望搜到的是“速度”和“激情”之间间隔一个的情况,提高精准度。 P...

学习 PostgreSQL Frontend/Backend protocol (通信协议)

2 minute read

背景 理解PostgreSQL的通信协议可以更好的开发类似SQL代理,SQL中间件,SQL防火墙,连接池等软件。 学习资料与软件 《PostgreSQL 读写分离代理 - Crunchy Proxy(base on golang)》 Postgres on the wire - A look at the P...

PostgreSQL 10 自定义并行计算聚合函数的原理与实践 - (含array_agg合并多个数组为单个一元数组的例子)

4 minute read

背景 PostgreSQL 9.6开始就支持并行计算了,意味着聚合、扫描、排序、JOIN等都开始支持并行计算。对于聚合操作来说,并行计算与非并行计算是有差异的。 例如avg聚合,对一张表进行计算时,一个任务中操作和多个并行任务操作,算法是不一样的。 PostgreSQL提供了一套标准的接口,可以支持聚合函数的...