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

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.lryc.cn/news/2386681.html

相关文章:

  • 讯飞AI相关sdk集成springboot
  • 在麒麟系统(Kylin OS)上安装`geckodriver`
  • 【图像大模型】Stable Diffusion XL:下一代文本到图像生成模型的技术突破与实践指南
  • [闲谈]C语言的面向对象
  • C 语言指针之手写内存深度剖析与手写库函数:带你从0开始手撸库 附录1.5 万字实战笔记
  • C#高级:Winform桌面开发中CheckedListBox的详解
  • 【Java学习笔记】final关键字
  • AI学习笔记二十八:使用ESP32 CAM和YOLOV5实现目标检测
  • 免费分享50本web全栈学习电子书
  • 【prometheus+Grafana篇】基于Prometheus+Grafana实现MySQL数据库的监控与可视化
  • 全链路解析:影刀RPA+Coze API自动化工作流实战指南
  • 高阶数据结构——哈希表的实现
  • window 显示驱动开发-报告渲染操作的可选支持
  • 2025 年网络安全趋势报告
  • uniapp 条件筛选
  • pytorch问题汇总
  • 开发过的一个Coding项目
  • 数据仓库维度建模详细过程
  • python打卡day37
  • Redis 5.0.10 集群部署实战(3 主 3 从,三台服务器)
  • 各个网络协议的依赖关系
  • OSC协议简介、工作原理、特点、数据的接收和发送
  • 区块链可投会议CCF C--APSEC 2025 截止7.13 附录用率
  • 【数字图像处理】_笔记
  • 从0开始学习R语言--Day10--时间序列分析数据
  • 基于开源链动2+1模式AI智能名片S2B2C商城小程序的产品驱动型增长策略研究
  • 每日算法 -【Swift 算法】反转整数的陷阱与解法:Swift 中的 32 位整数处理技巧
  • 使用 OpenCV 实现“随机镜面墙”——多镜片密铺的哈哈镜效果
  • 鸿蒙仓颉开发语言实战教程:页面跳转和传参
  • 如何在Vue中实现延迟刷新列表:以Element UI的el-switch为例