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'); -
查询数据
查询父表

查询子表:
