Recent Posts

PostgreSQL aggregate function customize

6 minute read

背景 聚合操作是统计分析的常见需求,聚合实际上就是把多行变成单行。 比如count, sum, avg, min, max, 线性相关性等等 本文介绍一下如何编写聚合函数。 正文 昨天聊到了一个关于多行转换成单行以提高查询性能的场景。 http://blog.163.com/digoal@126/blog...

PostgreSQL plpgsql variadic argments , parameters - 可变参数个数

3 minute read

背景 PostgreSQL 函数支持可变个数的参数,有很多聚合函数就是可变参数的,可变参数在一些场景非常有效,能解决一些特殊的问题,帮助简化代码. 正文 但是使用可变参数, 有一定的要求. 首先可变参数必须放在函数参数列表的末尾部位, 另外就是可变参数使用时定义为数组,所以参数类型必须一致. 例如 : di...

performance tuning about multi-rows query aggregated to single-row query

4 minute read

背景 聚合操作是统计分析的常见需求,聚合实际上就是把多行变成单行。 比如count, sum, avg, min, max, 线性相关性等等 接下来的几篇文章介绍一下如何编写聚合函数。 本文介绍的是多行转单行后的优化手段和性能提升点。 正文 线上有一个这样的表 : digoal=# \d recomme...

get PostgreSQL’s next oid

4 minute read

背景 今天在群里聊到的话题, 怎么取PostgreSQL的oid. 首先解释一下什么是oid : Object identifiers (OIDs) are used internally by PostgreSQL as primary keys for various system tables. ...

PostgreSQL partial index use caveat in prepared statement <= ver 9.1

2 minute read

背景 最近开发的同事反映的一个问题. 环境是这样的, 主机A跨广域网抽取主机B上的PostgreSQL的数据. 一共抽取两个表, 假设为T1和 T2. 其中T1表 60GB左右, T2表 30GB左右. 抽取的规则是按照时间分段抽取, 例如 : select * from t1 where creat...

PostgreSQL 临时表 (Temproary table) style

3 minute read

背景 临时表通常是一次创建, 以后使用的时候无须再次创建(即表结构保留). 并且每个会话保持各自的数据. 在目前版本的PostgreSQL中, 临时表的使用有所改变. 1. 临时表在会话结束后会自动删除(或者在事务结束后删除on commit drop). 也就是说每个会话中需要使用临时表的话需要重新创建. ...

PostgreSQL row lock and htup.t_infomask thinking

20 minute read

背景 QQ群里聊到关于PostgreSQL范围锁的话题. 大概是这样的 : BEGIN; update t set c1=? where c2>? ; 在COMMIT或者ROLLBACK之前, 这种SQL可能会锁上很多行? 1. 在这种情况下会不会升级成表锁? 2. 如果要锁的行数非常多会...