声明式分区
是一种用于将表划分为多个分区的分区方法
声明式分区
从PostgreSQL 10开始可用。
概述
传统上,PostgreSQL 通过继承分区提供分区功能,该功能利用了PostgreSQL的表继承功能。但是此方法有一些限制;特别是设置和维护过程更加手动。
声明式分区
顾名思义,提供了一种显式声明带有分区的表的方法,并且目前提供了以下分区方法
范围分区
列表分区
哈希分区
(PostgreSQL 11及更高版本)
使用声明式分区
创建的分区表由一个顶层分区表和一个或多个分区组成,这些分区可以是普通表或外部表。
配置
以下配置参数会影响声明式分区
的使用
系统函数
以下系统函数与声明式分区
的使用相关
更改历史记录
- PostgreSQL 17
- PostgreSQL 16
- 批量插入和更新效率提高 (提交 3592e0ff)
- PostgreSQL 15
- PostgreSQL 14
- 可以使用
ALTER TABLE ... DETACH PARTITION ... CONCURRENTLY
并发地分离分区 (提交 71f4c8c6) - 为
REINDEX
添加了对分区表和索引的支持 (提交 a6642b3a) - postgres_fdw:现在可以导入
IMPORT FOREIGN SCHEMA ... LIMIT
子句中指定的分区 (提交 a3740c48)
- 可以使用
- PostgreSQL 13
- 现在可以使用
ROW
表达式定义分区 (提交 bb4114a4) - 扩展了可以应用分区修剪的用例范围 (提交 4e85642d)
- 扩展了可以应用分区连接的用例范围 (提交 c8434d64 和 981643dc)
- 允许在分区表上使用
BEFORE
行级触发器 (提交 487e9861) - 分区表可以通过发布进行逻辑复制 (提交 17b9e7f9 和 83fd4532)
- 分区表现在可以在逻辑复制中作为复制目标 (提交 f1ac27bf)
- 在
CREATE PUBLICATION
中添加了参数publish_via_partition_root
(提交 83fd4532) pgbench
选项--partitions
和--partition-method
已添加 (提交 b1c1aa53)
- 现在可以使用
- PostgreSQL 12
- PostgreSQL 11
- 添加了对默认分区的支持 (提交 6f6b99d1)
- 分区修剪能够处理任何稳定的表达式 (提交 73b7f48f)
- 添加了在执行时进行分区修剪的支持 (提交 499be013)
- 添加了哈希分区支持 (提交 1aba8e65)
UPDATE
现在可以将元组移动到不同的分区之间 (初始提交 2f178441)- 允许在分区表上使用唯一索引 (提交 eb7ed3f3)
- 允许在分区表上使用
INSERT ... ON CONFLICT ...
(提交 555ee77a) - 允许在分区表上使用外键 (提交 3de241db)
- 允许在分区表上使用
FOR EACH ROW
触发器 (提交 86f57594) - 在分区表上执行
INSERT
、UPDATE
和COPY
可以将行路由到外部分区 (提交 3d956d95) - 启用分区连接 (提交 f49842d1)
- 启用分区分组/聚合 (提交 e2f1eb0e)
- PostgreSQL 10
- 添加 (初始提交 f0e44751)
参考文献
- PostgreSQL文档: 声明式分区
有用链接
- Postgres分区:将您的分区从继承升级到声明式 - Ashutosh Bapat / EnterpriseDB 于 2023 年 8 月发布的博文