
PostgreSQL 11 (2018)主要特性详解
新增支持哈希分区;分区可通过父表加载数据
存储过程开始支持事务
并行创建索引、HASH 与 HASH JOIN 并行执行
新增支持哈希分区
PostgreSQL 10 支持两种声明式分区:范围分区及列表分区。PostgreSQL 11 新增支持哈希
分区。哈希分区根据分区键的 hash 值进行分布式存储,分区键可以是单列或多列。为了保
持分区均匀,需要选择合适的分区键。
下面是对一张 customer 顾客信息表进行哈希分区的示例:
CREATE TABLE customer(
cid int4 PRIMARY KEY,
cname character varying(64),
ctime timestamp(6) without time zone
) PARTITION BY HASH(cid);
接下来创建具体的分区:
CREATE TABLE customer_p0 PARTITION OF customer FOR VALUES WITH(MODULUS 4, REMAINDER 0);
CREATE TABLE customer_p1 PARTITION OF customer FOR VALUES WITH(MODULUS 4, REMAINDER 1);
CREATE TABLE customer_p2 PARTITION OF customer FOR VALUES WITH(MODULUS 4, REMAINDER 2);
CREATE TABLE customer_p3 PARTITION OF customer FOR VALUES WITH(MODULUS 4, REMAINDER 3);
哈希分区包含两个属性,MODULUS 属性是哈希分区的个数,对每个分区该值是固定的,
REMAINDER 是哈希分区键对应的取余余数。
PostgreSQL 11 分区功能还有不少亮点,首先是默认分区,如果现有分区都不匹配,则可以
创建默认分区;为父表创建的索引将自动确保所有子表都被使用,这可以降低索引被遗忘创
建的可能性。另外可以添加全局唯一索引,分区表可以强制执行唯一约束。分区裁剪现在要
快得多,PostgreSQL 能够智能的处理跨分区关联以及跨分区聚合。
最后注意表分区在当前版本还有如下限制:
允许创建全局的主键、唯一约束,但必须包含分区键。
允许创建全局的外键,不允许创建排他约束。
允许创建全局索引,全局唯一索引必须包含分区键。
普通表不允许外键引用分区表中的字段。
普通表不能继承分区父子表。
文档被以下合辑收录
评论