声明式分区
是一种将表划分为多个分区的分区方法
声明式分区
自 PostgreSQL 10 起可用。
概述
传统上,PostgreSQL 通过继承分区提供分区功能,该功能利用了 PostgreSQL 的表继承功能。但是,此方法有一些限制;特别是设置和维护是一个更手动化的过程。
声明式分区
,顾名思义,提供了一种显式声明带分区的表的方法,目前提供了以下分区方法
范围分区
列表分区
哈希分区
(PostgreSQL 11 及更高版本)
使用 声明式分区
创建的分区表由一个顶级 分区表 和一个或多个分区组成,这些分区可以是普通表或 外部表。
配置
以下 配置参数 影响 声明式分区
的使用
系统函数
以下系统函数与 声明式分区
的使用相关
更改历史记录
- PostgreSQL 18
- 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)
- 参数
publish_via_partition_root
添加到CREATE PUBLICATION
(提交 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 分区:将您的分区从继承升级到声明式 - 2023 年 8 月 Ashutosh Bapat / EnterpriseDB 的博文