Skip to main content

New Features πŸŽ‰

  • Added support for aggregate score joins, enabling queries to ORDER BY a sum of scores across joined tables.
  • Added paradedb.vector_clusters to inspect per-cluster posting list sizes and ball-bound radii for vector indexes.

Performance Improvements πŸš€

  • Cross-table disjunctive search predicates (e.g. a.text @@@ 'foo' OR b.text @@@ 'bar') now evaluate via predicate tagging rather than UDFs, improving low-selectivity disjunctive join query performance by up to 22x.
  • MPP self-loops across stages on the same worker now communicate over an in-memory channel, eliminating in-process serialization overhead.
  • Dynamic shared memory (DSM) allocation for parallel index scans on PostgreSQL 15–17 now sizes EXPLAIN info slots only when used, reducing shared memory overhead from ~66MB to ~2MB.
  • Eliminated redundant eager planning passes in AggregateScan and JoinScan, sizing DSM allocations directly from physical stages.
  • Gate MPP execution behind a minimum row count, configurable via paradedb.mpp_min_rows.

Stability Improvements πŸ’ͺ

  • Parallel MPP worker scans and leader consumers now replay the leaders’s segment view and mutable segment bounds.
  • AggregateScan now validates collation semantics during GROUP BY pushdown, falling back to PostgreSQL for non-deterministic collations and GROUPING SETS.
  • Plain EXPLAIN now matches runtime behavior by rendering the serial execution plan when task discovery finds fewer than 2 parallel tasks.
  • Dynamic filter pushdown is now tracked and reported via metrics across MPP execution stages.
  • EXPLAIN plans for the aggregate and join scan now display the table name or alias.

New Contributors πŸ‘‹

The full changelog is available on the GitHub Release.