PostgreSQL
提供了三种分区表实现方式:
range
:范围分区list
:列表分区hash
:哈希分区
一、范围分区
根据某个字段的值,将数据存入不同的分区表中。
-
创建父表
sqlcreate table test_person_table ( name varchar(64), age int ) partition by range (age);
根据
age
字段进行范围分区 -
创建分区表
sqlcreate 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到最大值
- 如果插入的数值,没有分区能够覆盖,则会报错
父表和分区表都创建成功:
-
插入数据
sqlinsert 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);
-
查询数据
-
查询父表
-
查询分区表
-
二、列表分区
-
创建父表
sqlcreate table test_table_partition_by_list ( name varchar(64), city varchar(64) )partition by list(city);
按照
city
字段进行分区 -
创建分区表
sqlcreate 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 ;
-
插入数据
sqlinsert 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', '北京');
-
查询数据
-
父表
-
分区表
-
三、哈希分区
-
创建父表
sqlcreate table test_table_partition_by_hash( name varchar(64), city varchar(64) )partition by hash (city);
按照
city
的hash
值进行分区 -
创建分区表
sqlcreate 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);
-
插入数据
sqlinsert 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');
-
查询数据
查询父表
查询子表: