当前位置: 首页 > news >正文

pg库分表操作步骤- PostgreSQL 分区表

原表结构

CREATE TABLE message (id VARCHAR(32) PRIMARY KEY,t_id VARCHAR(32),content TEXT,time TIMESTAMP,user_id VARCHAR(10),receive_user_id VARCHAR(10),type SMALLINT,send_flag SMALLINT,remark VARCHAR(50),receive_time TIMESTAMP
);

一、主表定义(父表)

CREATE TABLE message (id VARCHAR(32),t_id VARCHAR(32),content TEXT,time TIMESTAMP NOT NULL,user_id VARCHAR(10),receive_user_id VARCHAR(10),type SMALLINT,send_flag SMALLINT,remark VARCHAR(50),receive_time TIMESTAMP,PRIMARY KEY (id, time)
) PARTITION BY RANGE (time);

二、子表定义(按月分区)

-- 2025年5月分区
CREATE TABLE message_202505 PARTITION OF messageFOR VALUES FROM ('2025-05-01 00:00:00') TO ('2025-06-01 00:00:00');-- 2025年6月分区
CREATE TABLE message_202506 PARTITION OF messageFOR VALUES FROM ('2025-06-01 00:00:00') TO ('2025-07-01 00:00:00');

三、自动化建子表建议(可选)

你可以使用如下 SQL + Bash 脚本 生成未来12个月的子表:

DO $$
DECLAREi INT;start_date DATE;end_date DATE;table_name TEXT;
BEGINFOR i IN 0..11 LOOPstart_date := date_trunc('month', current_date) + (i || ' month')::interval;end_date := start_date + interval '1 month';table_name := 'message_' || to_char(start_date, 'YYYYMM');EXECUTE format('CREATE TABLE IF NOT EXISTS %I PARTITION OF messageFOR VALUES FROM (%L) TO (%L);', table_name, start_date, end_date);END LOOP;
END $$;

五、插入、查询示例

-- 插入
INSERT INTO message (id, t_id, content, time, user_id, receive_user_id, type, send_flag, remark, receive_time)
VALUES ('abc123', 't1', 'hello', '2025-05-18 12:00:00', 'U1', 'U2', 1, 0, 'test', now());-- 查询
SELECT * FROM message
WHERE time BETWEEN '2025-05-01' AND '2025-05-31';

六、与 MyBatis 使用建议

<select id="selectByTime" resultType="Message">SELECT * FROM messageWHERE time BETWEEN #{startTime} AND #{endTime}
</select>只要条件中带 time,PostgreSQL 会自动路由到对应分区。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/213486.html

相关文章:

  • 限流系列:sentinel
  • 边缘AI:在物联网设备上实现智能处理
  • Webpack和Vite构建工具有什么区别?各自的优缺点是什么
  • 【论文解读】STaR:不用人类思维链指导,模型可以自我进化!
  • ChatGPT与认知科学:人机协同的未来图景
  • 云原生微服务devops项目管理英文表述详解
  • 论文阅读笔记:YOLO-World: Real-Time Open-Vocabulary Object Detection
  • 【科研绘图系列】R语言绘制气泡图(bubble plot)
  • 项目 react+taro 编写的微信 小程序,什么命令,可以减少console的显示
  • Django orm详解--工作流程
  • Mac安装配置InfluxDB,InfluxDB快速入门,Java集成InfluxDB
  • 答题pk小程序题库题型更新啦
  • Kafka Kraft模式集群 + ssl
  • 基于开源链动2+1模式AI智能名片S2B2C商城小程序的产品驱动型增长策略研究
  • vs2022 调试时 控制台界面不出来
  • kafka实践与C++操作kafka
  • AI智能混剪核心技术解析(一):字幕与标题生成的三大支柱-字幕与标题生成-优雅草卓伊凡
  • 李宏毅NLP-7-CTC/RNN-T文本对齐
  • Jupyter Notebook 完全指南:从入门到高效使用
  • VS Code新手基础教程
  • MERIT:用于可靠且可解释的肝纤维化分期的多视图证据学习|文献速递-深度学习医疗AI最新文献
  • linux make使用方法
  • Rust 项目实战:命令行搜索工具 grep
  • 运动规划实战案例 | 图解基于状态晶格(State Lattice)的路径规划(附ROS C++/Python仿真)
  • 基于Flask实现豆瓣Top250电影可视化
  • [网页五子棋]项目介绍以及websocket的消息推送(轮询操作)、报文格式和握手过程(建立连接过程)
  • 在 Windows 系统下使用 Qt 配置 OpenCV 和 MySql
  • 古腾堡编辑器教程:如何使用WordPress图库区块
  • 论文阅读: 2023 NeurIPS Jailbroken: How does llm safety training fail?
  • UE 5 C++设置物体位置和旋转,初始化虚幻引擎样条线、加载引用虚幻编辑器中的蓝图、设置虚幻编辑器中Actor大小