CREATE TABLE main_table_name ( id bigint, code bigint ) PARTITION BY RANGE (code); #根据code值分区 CREATE TABLE partition_name1 PARTITION OF main_table_name FOR VALUES FROM (0) TO (99); CREATE TABLE partition_name2 PARTITION OF main_table_name FOR VALUES FROM (100) TO (199);二、根据枚举(列表)分区
CREATE TABLE hr_user (id int, name varchar(10), dept varchar(10)) PARTITION BY LIST (dept); #每个部分一个分区 CREATE TABLE hr_user_1 PARTITION OF hr_user FOR VALUES IN ('HR'); CREATE TABLE hr_user_2 PARTITION OF hr_user FOR VALUES IN ('FI');三、根据哈希分区
每个分区的数据通过提供模数和余数来分区。每个分区将包含模数除以分区键的哈希值得到给定余数的行。可以均匀地分布数据来避免对单个表的访问集中
CREATE TABLE emp (id int, emp_name varchar(10), dept_id int) PARTITION BY HASH (dept_id); CREATE TABLE emp_0 PARTITION OF emp FOR VALUES WITH (MODULUS 3,REMAINDER 0); CREATE TABLE emp_1 PARTITION OF emp FOR VALUES WITH (MODULUS 3,REMAINDER 1); CREATE TABLE emp_2 PARTITION OF emp FOR VALUES WITH (MODULUS 3,REMAINDER 2);PostgreSQL 分区的限制
以下是 PostgreSQL 分区的一些限制:
1、没有在所有分区上自动创建匹配索引的选项。必须使用单独的命令向每个分区添加索引。这也意味着没有办法构建主键、唯一约束或跨越所有分区的排除约束;相反,每个叶分区必须单独约束。
2、不支持引用分区表的外键,以及从分区表到另一个表的外键引用,因为分区表不支持主键。
3、不可能在同一分区树中混合临时和永久关系。因此,如果分区表是永久的,则其分区也必须是永久的,如果分区表是临时的,其分区也必须是临时的。使用临时关系时,分区树的所有成员必须来自同一会话。
4、行触发器必须在单个分区上定义,而不是在分区表中定义。
5、范围分区不接受 NULL 值。
示例代码参考【PG分区-按范围】【PG分区-按时间范围】【PG分区-按枚举值】【PG分区-按HASH】