创建分区表的主要语法包含两部分:创建主表和创建分区。
建主表语法如下:
CREATE TABLE table name ( ... )
[ PARTITION BY { RANGE I LIST ) ( { column name I ( expression ) )
创建主表时须指定分区方式,可选的分区方式为 RANGE 范围分区或 LIST 表分区,并指定宇段或表达式作为分区键。
创建分区的语法如下:
CREATE TABLE table name
PARTITION OF parent_table [ (
) ] FOR VALUES partition_bound_spec
创建分区时必须指定是哪张表的分区,同时指定分区策略 partition_bound_spec,如果是范围分区,partition_bound_spec 须指定每个分区分区键的取值范围 ,如果是列表分区 partition_bound_spec,需指定每个分区的分区键值。
例子:
CREATE TABLE log_par(
id serial,
user_id int4,
create_time timestamp(0) without time zone
) PARTITION BY RANGE(create_time);
表 log_par 指定了分区策略为范围分区,分区键为 create_time 宇段。
创建分区,并设置分区的分区键取值范围,如下所示:
CREATE TABLE log_par_his PARTITION OF log_par FOR VALUES FROM ('2000-01-01') TO ('2024-01-01');
CREATE TABLE log_par_202401 PARTITION OF log_par FOR VALUES FROM ('2024-01-01') TO ('2024-02-01');
CREATE TABLE log_par_202402 PARTITION OF log_par FOR VALUES FROM ('2024-02-01') TO ('2024-03-01');
...
CREATE TABLE log_par_202412 PARTITION OF log_par FOR VALUES FROM ('2024-12-01') TO ('2025-01-01');
注意分区的分区键范围不要有重叠,定义分区键范围实质上给分区创建了约束。给所有分区的分区键创建索引,如下所示:
CREATE INDEX idx_log_par_his_ctime ON log_par_his USING btree(create_time);
CREATE INDEX idx_log_par_202401_ctime ON log_par_202401 USING btree(create_time);
CREATE INDEX idx_log_par_202402_ctime ON log_par_202402 USING btree(create_time);
...
CREATE INDEX idx_log_par_202412_ctime ON log_par_202412 USING btree(create_time);
以上三步完成了内置分区表的创建。
内置分区表原理探索
内置分区表原理实际上和传统分区表一样,也是使用继承方式,分区可称为子表,通过以下查询很明显看出表 log_par 和其分区是继承关系:
\d+ log_par
添加分区
添加分区的操作比较简单,例如给 log_par 增加一个分区,如下所示:
CREATE TABLE log_par_202501 PARTITION OF log_par FOR VALUES FROM ('2025-01-01') TO ('2025-02-01');
之后给分区创建索引,如下所示:
CREATE INDEX idx_log_par_202501_ctime ON log_par_202501 USING btree(create_time);
删除分区
删除分区有两种方法,第一种方法通过 DROP 分区的方式来删除,如下所示:
DROP TABLE log_par_202501;
DROP 方式直接将分区和分区数据删除,删除前需确认分区数据是否需要备份,避免数据丢失。另一种推荐的方法是解绑分区,如下所示:
ALTER TABLE log_par DETACH PARTITION log_par_202501;
解绑分区只是将分区和父表间的关系断开,分区和分区数据依然保留,这种方式比较稳妥,如果后续需要恢复这个分区,通过连接分区方
式恢复分区即可,如下所示:
ALTER TABLE log_par ATTACH PARTITION log_par_202501 FOR VALUES FROM ('2025-01-01') TO ('2025-02-01');
连接分区时需要指定分区上的约束。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2021-02-01 Windows自动备份Oracle数据库
2021-02-01 SQL语句对单个的MySQL存储过程导出
2021-02-01 Oracle表空间的使用
2021-02-01 Oracle数据库基本操作
2021-02-01 Linux 查询 OS、CPU、内存、硬盘信息