news 2026/3/24 0:28:34

表分区简介1

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
表分区简介1

文章目录

  • 文档用途
  • 详细信息

文档用途

了解Postgresql表分区

详细信息

Postgreslq内核中支持表分区(Table partitioning)包括:范围(range)、列表(list)

PostgreSQL offers built-in support for the following forms of partitioning:

Range Partitioning

The table is partitioned into “ranges” defined by a key column or set of columns, with no overlap between the ranges of values assigned to different partitions. For example, one might partition by date ranges, or by ranges of identifiers for particular business objects.

List Partitioning

The table is partitioned by explicitly listing which key values appear in each partition.

If your application needs to use other forms of partitioning not listed above, alternative methods such as inheritance and UNION ALL views can be used instead. Such methods offer flexibility but do not have some of the performance benefits of built-in declarative partitioning.

事例:

1、范围分区

createtablet_range(idint,namevarchar(100),i_timetimestampnotnull)partitionbyrange(id);postgres=# \d+ t_rangecreatetablet_range_1partitionoft_rangeforvaluesfrom(1)to(1000);createtablet_range_2partitionoft_rangeforvaluesfrom(1000)to(3000);createtablet_range_3partitionoft_rangeforvaluesfrom(3000)to(5000);createtablet_range_4partitionoft_rangeforvaluesfrom(5000)to(8000);createtablet_range_5partitionoft_rangeforvaluesfrom(8000)to(10000);postgres=# \d+ t_rangeinsertintot_rangeselectid,md5(random()::text),current_date-idfromgenerate_series(1,10001)t(id);postgres=>insertintot_rangeselectid,md5(random()::text),current_date-idfromgenerate_series(1,10001)t(id);ERROR:nopartitionofrelation"t_range"foundforrowDETAIL:Partitionkeyofthe failingrowcontains(id)=(10000).postgres=>INSERTINTOt_rangeSELECTgenerate_series(1,9999),md5(random()::text),clock_timestamp();selectcount(*)fromt_range_1;selectcount(*)fromt_range_5;selectcount(*)fromonly t_range;

不允许分区字段修改后跨越分区

postgres=# update t_range set id=2000 where id=500;ERROR: newrowforrelation"t_range_1"violatespartitionconstraintDETAIL: Failingrowcontains(2000,7ed9bf07d00e369c74997bee774cea69,2017-03-2400:00:00).postgres=# update t_range set id=200 where id=500;UPDATE1

非分区字段的字段修改操作会下发到子表上。

truncate主表

postgres=# truncate table t_range;TRUNCATETABLEpostgres=# select count(*) from t_range_5;count-------0(1row)

会清除所有子表的数据。

2、list 分区

创建主表

createtablet_list(idint,namevarchar(100),regionvarchar(50))partitionbylist(region);createtablet_list_1partitionoft_listforvaluesin('beijing');createtablet_list_2partitionoft_listforvaluesin('nanjing');createtablet_list_3partitionoft_listforvaluesin('shanghai');createtablet_list_4partitionoft_listforvaluesin('chongqing');createtablet_list_5partitionoft_listforvaluesin('hangzhou');postgres=# \d+ t_listinsertintot_listvalues(1,'a','beijing');insertintot_listvalues(2,'b','nanjing');insertintot_listvalues(3,'c','chongqing');insertintot_listvalues(4,'d','hangzhou');insertintot_listvalues(5,'e','shanghai');insertintot_listvalues(6,'f','chongqing');insertintot_listvalues(7,'g','nanjing');insertintot_listvalues(8,'h','beijing');postgres=>select*fromt_list_2;id|name|region----+------+---------2|b|nanjing7|g|nanjing(2rows)

使用explain查看执行计划,验证分区的使用

postgres=# explain select * from t_list where region='nanjing';

添加删除分区

添加分区

createtablet_list_6(liket_list);altertablet_list attachpartitiont_list_6forvaluesin('guangzhou');

分区离线

altertablet_range detachpartitiont_range_5;postgres=>select*fromt_rangewhereid=9001;id|name|i_time----+------+--------(0rows)postgres=>select*fromt_range_5whereid=9001;id|name|i_time------+----------------------------------+----------------------------9001|2ff1f5c36a0ef69b1b5d283a2312f019|2019-03-2009:47:14.304022(1row)altertablet_list detachpartitiont_list_6;select*fromt_listwhereregion='guangzhou';select*fromt_list_6;

detach后,表还是存在的,成为独立的表。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/16 20:17:54

Grasscutter Tools终极指南:三步掌握原神私服高效管理技巧

Grasscutter Tools终极指南:三步掌握原神私服高效管理技巧 【免费下载链接】grasscutter-tools A cross-platform client that combines launcher, command generation, and mod management to easily play Grasscutter; 一个结合了启动器、命令生成、MOD管理等功能…

作者头像 李华
网站建设 2026/3/15 0:15:58

【Dify开发必看】:正确配置响应Charset的7个专业技巧

第一章:Dify响应Charset配置的核心概念Dify 作为一个支持多语言与国际化部署的低代码 AI 应用开发平台,其对字符集(Charset)的处理机制直接影响数据在前端、后端与数据库之间的正确传递。合理的 Charset 配置确保了中文、日文等非…

作者头像 李华
网站建设 2026/3/18 19:26:17

PPTist:零基础快速上手,打造专业级在线演示文稿

还在为制作演示文稿而烦恼吗?PPTist作为一款功能完整的开源免费在线PPT制作工具,让你在浏览器中就能轻松创建专业级幻灯片。基于Vue3.x和TypeScript开发,这款在线演示文稿工具还原了Office PowerPoint的大部分核心功能,为新手用户…

作者头像 李华
网站建设 2026/3/15 9:50:35

解锁电子课本魔法书:三步打造你的随身学习宝库

解锁电子课本魔法书:三步打造你的随身学习宝库 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具 项目地址: https://gitcode.com/GitHub_Trending/tc/tchMaterial-parser 还记得小时候抱着厚重的教科书上下学的日子吗&#xff…

作者头像 李华
网站建设 2026/3/21 4:18:55

5分钟快速上手:胡桃工具箱终极使用指南与实战技巧

5分钟快速上手:胡桃工具箱终极使用指南与实战技巧 【免费下载链接】Snap.Hutao 实用的开源多功能原神工具箱 🧰 / Multifunctional Open-Source Genshin Impact Toolkit 🧰 项目地址: https://gitcode.com/GitHub_Trending/sn/Snap.Hutao …

作者头像 李华
网站建设 2026/3/21 23:16:40

揭秘Dify底层引擎:如何实现Excel数据提取性能突破性提升

第一章:Dify Excel 提取速度的突破性提升在处理大规模 Excel 数据时,传统提取方式常因 I/O 瓶颈和内存占用过高导致性能下降。Dify 通过重构底层解析引擎,实现了 Excel 数据提取速度的显著优化,尤其在百万行级数据场景下&#xff…

作者头像 李华