PostgreSQL.10.2 Hash分区实现

本文详细介绍了如何在PostgreSQL 10.2版本中实现Hash分区,包括创建主表和分区表的语法,插入数据的流程,以及查询数据的基本操作。文章提到,虽然此版本不直接支持Hash分区,但通过源码修改可以实现类似功能。作者分享了对gram.y和kwlist.h文件的修改,以及partition.c中处理数据插入的部分。目前,该实现仅支持静态添加分区,查询时会使用相同算法过滤分区。
摘要由CSDN通过智能技术生成

基于Postgresql 10.2 版本, 实现简单的Hash分区

          Postgresql 10 之前的版本,不支持 内建的直接分区,但是可以以继承表加触发器或者规则的方式实现简单分区的功能.随着Postgresql 10 版本的发行,源代码中实现了range和list 分区功能.在参考别人实现方法的同时,试着在新版本实现Hash分区.(持续更新中)

思路

  • 先创建主表,再创建分区表,语法同list,range 类似.
  • 插入数据时根据分区键(key)查找被插入的子分区.
  • 暂时仅支持静态添加分区.
  • select时约束排除时使用相同的算法过滤分区.

建表语法 

        创建Hash分区语法: 和list和range 类似,只是在建立子分区时,没有约束值.

me=# create table hash_table(id int,name text) partition by hash(id);
CREATE TABLE
时间:7.496 ms
me=# create table hash_table1 partition of hash_table;
CREATE TABLE
时间:8.173 ms
me=# create table hash_table2 partition of hash_table;
CREATE TABLE
时间:7.058 ms
me=# \d+ h*;
                          数据表 "public.hash_table"
 栏位 |  类型   | Collation | Nullable | Default |   存储   | 统计目标 | 描述 
------+---------+-----------+----------+---------+----------+----------+------
 id   | integer |           |          |         | plain    |          | 
 name | text    |           |          |         | extended |          | 
Partition key: HASH (id)
Partitions: hash_table1 FOR HASH PARTITION Hashvalue = 1,
            hash_table2 FOR HASH PARTITION Hashvalue = 2

                         数据表 "public.hash_table1"
 栏位 |  类型   | Collation | Nullable | Default |   存储   | 统计目标 | 描述 
------+---------+-----------+----------+---------+----------+----------+------
 id   | integer |           |          |         | plain  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值