Skip to content

v1.0.6

Choose a tag to compare

@saulojb saulojb released this 16 Apr 12:13
· 173 commits to main since this release

What's Changed

Bug Fixes

  • index_scan=false bypassed by Parallel Index Scan — CostColumnarPaths only iterated rel->pathlist, leaving rel->partial_pathlist (parallel paths) untouched. A B-tree index on a colcompress table caused the planner to choose Parallel Index Scan even with index_scan=false, bypassing stripe pruning entirely. Fixed by also iterating rel->partial_pathlist and applying disable_cost to every IndexPath there.

  • disable_cost for index_scan=false serial paths — replaced proportional penalty (estimatedRows × cpu_tuple_cost × 100) with PostgreSQL's canonical disable_cost (1e10), matching SET 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