我有一个Postgres表,从中创建了大约1000个用于分区数据的继承表。
每个继承的表都对名为capture_time
capture_time>=X and capture_time<Y
X和Y对于每个继承的表是不同的,并形成连续的,非重叠的范围。
因此,当我运行一个指定capture_time between t1 and t2
的查询时,我希望Postgres通过查看表约束来了解哪些表(分区)不会包含要查询的数据。但解释输出告诉我Postgres正在扫描所有表(分区)。
如何让Postgres仅扫描相关表格?
答案 0 :(得分:1)
好的,我找到了。我在current_date
子句中使用where
- 非常量参数。将current_date
更改为文字值,修复它。
约束排除仅在查询的WHERE子句包含时才有效 常量。参数化查询将不会被优化,因为 planner无法知道参数值可能选择哪些分区 在运行时。出于同样的原因,“稳定”的功能如 必须避免CURRENT_DATE。