介绍
- 目前PostgreSQL社区版本的分区表功能比较弱,需要通过继承和触发器或RULE来实现分区表的功能,由于查询和更新涉及约束的检查、插入则涉及触发器或规则重写,导致分区功能性能较差。
- 商业版本EDB,以及数据仓库Greenplum都有比较好的分区支持。
- 去年GP开源后,阿里云RDS PostgreSQL的小伙伴将Greenplum的分区表功能port到PostgreSQL 9.4之后,比使用继承和触发器的方式性能提升了近百倍(参考我之前写的文章,传统方法除了粗发去本身的开销,还有SEARCH的开销,分区越多越慢,没有使用binary search),由于需要改动CATALOG,所以一直没有在9.4的版本上线这个功能。
- 分区表已经成为PostgreSQL用户万众期待的功能之一啦。
- 社区核心成员之一oleg所在的公司postgrespro,开发了一款分区表功能的插件,不需要动用catalog,可以很方便的增加分区表的功能。
安装与配置
yum install git
yum install postgresql96-devel.x86_64 openssl-devel.x86_64
yum install gcc
git clone https://github.com/postgrespro/pg_pathman
export PATH=/usr/pgsql-9.6/bin:$PATH
vi /var/lib/pgsql/9.6/data/postgresql.conf
shared_preload_libraries = 'pg_pathman'
service postgresql-9.6 restart
测试
# su - postgres
# psql
\dx
\c exampledb
create extension pg_pathman;
\dx