Recent Posts

PostgreSQL 在铁老大订单系统中的schemaless设计和性能压测

7 minute read

背景 数据的流动孕育数据生态,在很多大型系统中,业务系统之间的数据流动是很常见的事情。 例如铁大哥的订单数据的流动,可能带动很多围绕订单的业务需求。比如说订单查询: 1、按用户查询,返回用户30天内的所有订单。 2、按坐席和乘车日期查询,返回这个坐席的售出记录,看看有没有退票、有没有中途票可以加塞等。 以...

PostgreSQL 10 PostGIS 兼容性 FIX

2 minute read

背景 PostGIS 的PG 10有一点兼容性问题: 创建extension时报错如下: ERROR: set-returning functions are not allowed in CASE LINE 6: split_part((...

PostgreSQL Oracle 兼容性 之 USERENV

3 minute read

背景 USERENV 是Oracle 用来获取当前会话变量的函数。官方是这么介绍的: https://docs.oracle.com/cd/E11882_01/server.112/e41084/functions184.htm#SQLRF06117 Describes the current session...

PostgreSQL Oracle 兼容性 之 NUMTODSINTERVAL

less than 1 minute read

背景 NUMTODSINTERVAL 是Oracle数字转时间间隔类型的函数。 例子: SELECT NUMTODSINTERVAL(100, 'day') FROM dual; SELECT NUMTODSINTERVAL(100, 'HOUR') FROM dual; SELECT N...

PostgreSQL 空间、多维 序列 生成方法

6 minute read

背景 数据库的一维序列是很好理解的东西,就是在一个维度上自增。 那么二维、多维序列怎么理解呢?显然就是在多个维度上齐头并进的自增咯。 二维序列 以二维序列为例,应该是这样增长的: 0,0 0,1 1,0 1,1 1,2 2,1 2,2 ... 那么如何生成以上二维序列呢?...

PostgreSQL 事件触发器应用 - DDL审计记录 + 异步通知(notify)

9 minute read

背景 DDL语句的审计是非常重要的,目前PG的DDL审计记录在日志文件中。不便于查看。 为了让DDL事件记录到表中,方便查看,我们可以通过事件触发器来达到这个效果。 结合PostgreSQL的notify, listen的消息通道功能,在DDL执行后可以立即通知到监听对应CHANNEL的程序。 事件触发器审...

PostgreSQL汉字转拼音的函数

1 minute read

背景 在有些应用中,可能会有对拼音搜索、拼音首字母搜索、中文搜索共存的需求。在PostgreSQL中如何实现这个需求呢? 关键是函数转拼音和首字母,方法很简单,将映射关系存入数据库。创建一个函数来转换。 《PostgreSQL汉字转拼音或拼音首字母的应用》 映射文件请到以上文章的末尾下载。 方法 1、创建...

经营、销售分析系统DB设计之PostgreSQL, Greenplum - 共享充电宝 案例实践

21 minute read

背景 共享充电宝、共享单车、共享雨伞,共享女朋友^|^,共享汽车,。。。 共享经济最近几年发展确实非常迅猛。 共享必定涉及被共享对象的管理、会员的管理等,实际上也属于一种物联网系统。 本文以共享充电宝的场景为例,分享一下共享充电宝的经营分析、销售管理系统的后台数据库的设计。(老板关心的是整体销售的业绩,以及各...

PostgreSQL Oracle兼容性之 session_id

1 minute read

背景 数据库有会话的概念,用于区分每一个会话。会话ID是会话的唯一标识。 PostgreSQL的基于进程的模型,每个连接会分配一个backend process,因此使用process id也可以作为会话ID来使用。 postgres=# select pg_backend_pid(); pg_back...