Recent Posts

facebook linkbench 测试PostgreSQL社交关系图谱场景性能

5 minute read

背景 Linkbench是facebook提供的一款数据库性能测试开源软件,它的思路是围绕社交关系图谱构建一套测试数据,然后在此基础之上对数据进行关系查询,新增关系,断开关系等操作。 Linkbench的介绍可参考 https://www.facebook.com/notes/facebook-engine...

如何从PostgreSQL json中提取数组

4 minute read

背景 在PostgreSQL中使用JSON类型时,除了能存,大家更关心的是JSON中的数据的使用,例如 1. VALUE支持哪些类型, 通过以下方法可以提取JSON最外层的VALUE的数据类型 json_typeof(json) jsonb_typeof(jsonb) 目前支持的类型如下...

如何防止数据库雪崩(泛洪 flood)

less than 1 minute read

背景 在数据库的使用过程中,一些微妙的操作,在特殊的场景中就可能导致雪崩效应。 1. 当数据库中存在未提交事务,并且未提交事务已经持有了某个表的哪怕是最小的锁时,如果此时对这个对象发起DDL操作,这个DDL操作将会堵塞接下来的其他对该对象的任意操作请求,包括读请求。 因为PG的锁等待判断是整个等待队列的冲突判...

Greenplum , HAWQ outer join与motion问题讲解

5 minute read

背景 Greenplum,HAWQ是分布式的数据库,在建表时,我们可以选择分布列,或者选择随机分布。 多个表做等值JOIN时,如果JOIN列为分布列,则不需要进行数据的重分布。 但是,如果使用的是OUTER JOIN,情况就不一样了,你可能会发现多个表进行outer join时,如果JOIN列都是HASH分布...

CentOS 7.x x64 部署 HAWQ

14 minute read

背景 在CentOS 6.x 上不管是源码或二进制部署HAWQ都有点苦逼,原因是6自带的软件版本都比较老,而HAWQ依赖的环境的版本都比较新。 《CentOS 6.x 部署HAWQ》 在7.x上部署HAWQ会轻松许多。 本文简单的讲一下在CentOS 7.x 的单机上使用源码部署HAWQ的过程。

PostgreSQL reload配置的动作反馈与源码分析

2 minute read

背景 PostgreSQL数据库的配置文件中,有一些配置项是支持reload的,但是如果配置写错了,reload时怎么知道呢? 源码分析 reload其实是通过给postmaster进程发SIGHUP信号来实现的。 通过pg_ctl或者kill或者pg_reload_conf()函数都可以发信号。 post...

CentOS 6.x x64 部署HAWQ

15 minute read

背景 HAWQ与Greenplum师出同门,都是来自pivotal的分析型数据库产品,均以PostgreSQL为基础代码。 HAWQ与Greenplum相似之处 1. 强大的SQL兼容性,SQL-92, SQL-99, SQL-2003, OLAP extension 2. ORCA查询优化器 3. MPP架...

PostgreSQL rename 代码修正风波

6 minute read

背景 PostgreSQL的数据目录,包括所有相关的文件,建议的权限是700,owner是启动数据库集群的操作系统用户。 如果权限不对,或者OWNER不对,在打开文件时可能出错,会带来安全隐患,并导致一些不必要的麻烦。 例子 比如PostgreSQL fsync_fname_ext调用,默认会以读写的方式打开...

PostgreSQL CVE-2016-5423 BUG

3 minute read

背景 PostgreSQL 的一个BUG,存在于9.5.3, 9.4.8, 9.3.13, 9.2.17, 9.1.22及以下版本。 在使用嵌套CASE WHEN语句时,如果嵌套子句中有检测条件为空时,会导致判断不准确。 如果内外检测值的类型不同,甚至有可能导致数据库crash。 https://www.p...