EXPLAIN (ANALYZE) SELECT count(*) FROM logs
WHERE created_at >= '2026-10-01';
SHOW enable_partition_pruning;

按月分成 24 个分区,只查一个月的数据,EXPLAIN 的 Append 下 24 个子表全在,耗时四秒多。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,分区键上用了表达式或者传进来的参数类型不对,规划器算不出常量范围,只能把每个分区都挂进 Append,扫了不该扫的二十三个。

「PG 分区裁剪失效」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。

验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。

处理上按这个顺序:确认 where 里分区键是裸列,没被函数包住;参数类型与分区键保持一致,别让它隐式转换;数一下执行计划里 Append 下面挂了几张子表,超过一张就是没剪枝。

改完只确认一件事:Append 下只剩一个分区,扫描行数和该月真实数据量对得上。

作者 9823189