前几次说了Oracle、MySQL和TiDB的,今天看看PG的。我一开始用Oracle的办法做,发现做不下去。查资料也没看到,这里就求助了。找到PG四小龙,平安科技熊总。熊总给了我他公众号的一个文章。https://mp.weixin.qq.com/s?__biz=MzUyOTAyMzMyNg==&mid=2247486137&idx=1&sn=1000a8c68e7752cd4e9737df02504461&chksm=fa662288cd11ab9ec09cbd69104e1bb8706a03e9645a43ce64e7106323f68320c30a1d7edd37&token=1334586368&lang=zh_CN#rd
我本来打算白嫖一下,结果发现做的时候报错还不一样。索性就连表名什么的都改一下,自己走一遍。中间出问题各式各样的。我现在整理的是最后一次成功的做法的。
首先是要安装插件的,熊总给的连接我直接git clone https://github.com/cybertec-postgresql/pg_rewrite.git还不行。机器所在的网络不通。自己去下载ZIP,解压上传。

然后编译一下才行。这个是之前所有数据库都没有的特殊步骤。PG很多都是插件支持的。


然后检查一下插件的情况。这里是安装好了。
Create table t1 ( id int not null,a varchar(10),t date);创建一个普通表。
写入一些数据。
insert into t1 values (1,'a',now() - interval '120 day');
insert into t1 values (2,'b',now() - interval '90 day');
insert into t1 values (3,'c',now() - interval '60 day');
insert into t1 values (4,'d',now() - interval '30 day');
insert into t1 values (5,'e',now());
再来一个中间的分区表这里这些2022XXX的表就是PGT的分区了。有点不习惯对吧。先适应一下。
这个PGT的表结构,字段类型,约束条件要和T1一样(我是这样成功的,之前多次失败,不是这里报错,就是那里报错)
CREATE table pgt (id int not null,a varchar(10), t date not null) PARTITION BY RANGE (t);
Create table pt01_202201 partition of pgt for values from ('2022-01-01') to ('2022-02-01');
Create table pt01_202202 partition of pgt for values from ('2022-02-01') to ('2022-03-01');
Create table pt01_202203 partition of pgt for values from ('2022-03-01') to ('2022-04-01');
Create table pt01_202204 partition of pgt for values from ('2022-04-01') to ('2022-05-01');
Create table pt01_202205 partition of pgt for values from ('2022-05-01') to ('2022-06-01');
Create table pt01_202206 partition of pgt for values from ('2022-06-01') to ('2022-07-01');
Create table pt01_202207 partition of pgt for values from ('2022-07-01') to ('2022-08-01');
执行效果如图


以上3句话是从连接中拿的。
接下来准备截断分区。截断之前看看数据是5条。

截断之后是4条,一个分区没有了。

PG的截断和Oracle MySQL语法不一样。
同样建议实现规划好,这样表大了再改其实代价大。估算如果表很大,有一定阻塞的。因为他是一个借助其他表交互一下的动作。





