PostgreSQL.10.2 Hash分区实现

基于Postgresql 10.2 版本, 实现简单的Hash分区          Postgresql 10 之前的版本,不支持 内建的直接分区,但是可以以继承表加触发器或者规则的方式实现简单分区的功能.随着Postgresql 10 版本的发行,源代码中实现了range和list 分区功能.在参考别人实现方法的同时,试着在新版本实现Hash分区.(持续更新中)思路先创建主表,再创建分区表,语...
摘要由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  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值