介紹
- 目前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