v1.0.6
What's Changed
Bug Fixes
-
index_scan=falsebypassed byParallel Index Scan—CostColumnarPathsonly iteratedrel->pathlist, leavingrel->partial_pathlist(parallel paths) untouched. A B-tree index on a colcompress table caused the planner to chooseParallel Index Scaneven withindex_scan=false, bypassing stripe pruning entirely. Fixed by also iteratingrel->partial_pathlistand applyingdisable_costto everyIndexPaththere. -
disable_costforindex_scan=falseserial paths — replaced proportional penalty (estimatedRows × cpu_tuple_cost × 100) with PostgreSQL's canonicaldisable_cost(1e10), matchingSET enable_indexscan = off. The old penalty was smaller than seq-scan cost for low-selectivity queries (~4% of rows).
Benchmarks
- Refreshed serial and parallel benchmark results and charts (1M rows, PostgreSQL 18, 4 access methods: heap, colcompress, rowcompress, citus_columnar).
Full Changelog: v1.0.5...v1.0.6