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

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.xdnf.cn/news/9178.html

相关文章:

  • 车载通信网络 --- 传统车载网络及其发展
  • 固态硬盘的寿命与可靠性如何保障?——以Kingston FURY Renegade G5为例的专业解析
  • 自动编码器 潜在空间 Autoencoders 视频截图
  • 浏览器指纹科普 | 语言 vs 界面语言,区别是什么?
  • GitLab-CI快速开始
  • gin使用Mysql连接池用法
  • IDEA没有出现TODO
  • 实在Agent成业界首批全面适配鸿蒙、麒麟、统信信创系统的智能体
  • git clone 提速
  • redis在Spring中的一些使用
  • 用llama3微调了一个WiFiGPT 用于室内定位
  • Linux文本搜索——grep命令详解
  • PostGIS实现二进制转栅格数据应用实践【ST_RastFromWKB】
  • Web安全渗透之长城杯夺旗赛
  • 工作计划工作总结年终总结PPT模版分享
  • 高能效比服务器
  • pytorch问题汇总
  • 【Redis】3-Redis应用
  • vscode java debug terminal 中文乱码
  • n8n 读写本地文件
  • 原生js实现数据响应方法2.0
  • 【Qt】未添加scrollArea造成界面过大
  • 【Webtrees 用户手册】第 3 章 -会员指南
  • 解锁集成电路制造新建项目的防震黑科技-江苏泊苏系统集成有限公司
  • ArcGIS Pro 3.4 二次开发 - 几何
  • Python爬虫实战:研究Beautiful Soup框架相关技术
  • 《软件工程》第 10 章 - 软件实现
  • Chrome浏览器隐私与安全功能完全指南
  • MySQL : MySQL的安装【CentOS 7】
  • uniapp在app端老是铺满全屏