news 2026/7/8 8:01:55

表分区简介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/7/1 9:18:32

【Dify开发者必备技能】:3步实现DOCX文档图片精准提取

第一章:Dify平台与DOCX文档处理概述 Dify 是一个开源的大语言模型应用开发平台,旨在帮助开发者快速构建基于 AI 的应用。它提供可视化编排界面、API 集成能力以及对多种数据源的支持,使得自然语言处理任务更加高效和灵活。在实际业务场景中&a…

作者头像 李华
网站建设 2026/7/1 9:18:30

为什么你的Dify凭证总是读取失败?这6个常见错误你可能正在犯

第一章:Dify凭证读取失败的根本原因解析在使用 Dify 框架进行应用开发与部署过程中,凭证(Credential)读取失败是常见的运行时问题之一。该问题通常表现为系统无法访问外部服务、密钥验证失败或环境变量缺失等现象。深入分析其根本…

作者头像 李华
网站建设 2026/6/24 22:41:51

‌AI驱动的软件测试用例生成

AI已从辅助工具跃升为测试范式重构引擎‌大语言模型(LLM)与生成式AI已彻底改变测试用例生成的底层逻辑。不再是“辅助编写”,而是实现‌需求文档→智能解析→边界推断→自动生成→动态优化‌的端到端闭环。2025年,头部企业测试用例…

作者头像 李华
网站建设 2026/7/1 8:28:12

批量处理优化策略:一次性生成上百条语音的工程实践

批量处理优化策略:一次性生成上百条语音的工程实践 在短视频工厂、有声书产线和虚拟人内容平台中,一个现实问题日益凸显:如何在保证音质与表现力的前提下,快速产出成百上千条风格统一、节奏精准的配音音频?传统语音合成…

作者头像 李华
网站建设 2026/7/1 9:18:37

你还在手动分析用户数据?Dify+Amplitude自动化统计方案来了

第一章:Dify Amplitude 数据统计Dify 作为一款低代码 AI 应用开发平台,集成了 Amplitude 这一强大的行为分析工具,用于追踪用户在应用中的交互行为。通过集成 Amplitude,开发者能够深入理解用户的使用路径、功能偏好以及潜在的体验…

作者头像 李华
网站建设 2026/7/4 1:20:30

为什么80%的Dify升级失败都发生在1.11.1?真相曝光

第一章:Dify 1.11.1 升级失败现象全解析 在升级 Dify 至 1.11.1 版本过程中,部分用户反馈系统出现服务不可用、API 接口返回 500 错误以及前端资源加载失败等问题。这些问题通常出现在执行版本切换后,容器未能正常启动或数据库迁移中断。 典…

作者头像 李华