Postgresql分区表

PostgreSQL 提供了三种分区表实现方式:

  1. range :范围分区
  2. list :列表分区
  3. hash :哈希分区

一、范围分区

根据某个字段的值,将数据存入不同的分区表中。

  1. 创建父表

    sql 复制代码
    create table test_person_table
    (
        name varchar(64),
        age  int
    ) partition by range (age);

    根据age 字段进行范围分区

  2. 创建分区表

    sql 复制代码
    create table test_person_table_r1 partition of test_person_table for values from (minvalue )to(10);
    create table test_person_table_r2 partition of test_person_table for values from (11 )to(20);
    create table test_person_table_r3 partition of test_person_table for values from (21 )to(30);
    create table test_person_table_r4 partition of test_person_table for values from (31 )to(40);
    create table test_person_table_r5 partition of test_person_table for values from (41 )to(maxvalue );
    • 第一个分区表,范围是从最小值到10
    • 最后一个分区表,范围是从41到最大值
    • 如果插入的数值,没有分区能够覆盖,则会报错

    父表和分区表都创建成功:

  3. 插入数据

    sql 复制代码
    insert into test_person_table (name, age) values ('xiaoxiao1', 5);
    insert into test_person_table (name, age) values ('xiaoxiao2', 15);
    insert into test_person_table (name, age) values ('xiaoxiao3', 25);
    insert into test_person_table (name, age) values ('xiaoxiao4', 35);
    insert into test_person_table (name, age) values ('xiaoxiao5', 45);
  4. 查询数据

    • 查询父表

    • 查询分区表

二、列表分区

  1. 创建父表

    sql 复制代码
    create table test_table_partition_by_list
    (
        name varchar(64),
        city varchar(64)
    )partition by list(city);

    按照city 字段进行分区

  2. 创建分区表

    sql 复制代码
    create table test_table_partition_by_list_sichuan partition of test_table_partition_by_list for values in ('成都','绵阳');
    create table test_table_partition_by_list_guangdong partition of test_table_partition_by_list for values in ('广州', '深圳');
    create table test_table_partition_by_list_other partition of test_table_partition_by_list default ;
  3. 插入数据

    sql 复制代码
    insert into test_table_partition_by_list (name, city) values ('xiaoxiao1', '成都');
    insert into test_table_partition_by_list (name, city) values ('xiaoxiao2', '绵阳');
    insert into test_table_partition_by_list (name, city) values ('xiaoxiao3', '广州');
    insert into test_table_partition_by_list (name, city) values ('xiaoxiao4', '深圳');
    insert into test_table_partition_by_list (name, city) values ('xiaoxiao5', '北京');
  4. 查询数据

    • 父表

    • 分区表

三、哈希分区

  1. 创建父表

    sql 复制代码
    create table test_table_partition_by_hash(
        name varchar(64),
        city varchar(64)
    )partition by hash (city);

    按照cityhash值进行分区

  2. 创建分区表

    sql 复制代码
    create table test_table_partition_by_hash_h1 partition of test_table_partition_by_hash for values with (modulus 3, remainder 0);
    create table test_table_partition_by_hash_h2 partition of test_table_partition_by_hash for values with (modulus 3, remainder 1);
    create table test_table_partition_by_hash_h3 partition of test_table_partition_by_hash for values with (modulus 3, remainder 2);
  3. 插入数据

    sql 复制代码
    insert into test_table_partition_by_hash (name, city) values ('xiaoxiao1', 'chengdu');
    insert into test_table_partition_by_hash (name, city) values ('xiaoxiao2', 'chengdu');
    
    insert into test_table_partition_by_hash (name, city) values ('xiaoxiao3', 'guangzhou');
    insert into test_table_partition_by_hash (name, city) values ('xiaoxiao4', 'guangzhou');
    
    insert into test_table_partition_by_hash (name, city) values ('xiaoxiao5', 'shenzhen');
    insert into test_table_partition_by_hash (name, city) values ('xiaoxiao6', 'shanghai');
    insert into test_table_partition_by_hash (name, city) values ('xiaoxiao7', 'beijing');
  4. 查询数据

    查询父表

    查询子表:

相关推荐
KevinCh1 分钟前
Vespa:面向 AI 时代的检索与排序服务平台
数据库
Rick19939 分钟前
Redis查询为什么快
数据库·redis·缓存
fly spider11 分钟前
MySQL索引篇
android·数据库·mysql
oradh23 分钟前
Oracle数据库表存储基本概述
数据库·oracle·oracle基础·oracle入门·oracle表存储
为什么不问问神奇的海螺呢丶34 分钟前
Oracle Golden Gate 19c 微服务版 (19.1.0.0.4) 静默安装
数据库·微服务·oracle
NineData35 分钟前
使用NineData实现MySQL异地多活场景
运维·数据库·mysql
森叶44 分钟前
逻辑仲裁者:实现多事件关联匹配与事务原子化后执行逻辑的技术方案
数据库·oracle
Navicat中国1 小时前
北京理工大学推荐 Navicat | 高校教育行业应用案例
数据库·navicat·高校·教育版
素玥1 小时前
实训7 json文件数据用python导入数据库
数据库·python·json
Rick19931 小时前
Redis 底层架构图
数据库·redis·缓存