New Features 🎉
- Beta release of native support for JOIN pushdown! See the docs for more information.
- All text column types now support optionally being marked
columnar=true, allowing them to be used as the input to aggregates, joins, or covering index scans. - Support for pushdown of queries on NUMERIC columns to the index.
- NOTE: Pushdown for NUMERIC columns requires a reindex.
- You can now specify a separate tokenizer for use at search-time.
- Support for indexing more than 32 columns in one index.
- Stopwords for multiple languages may be specified per-field.
- Following the model of the
amcheckextension, you can now explicitly verify the integrity of an index usingpdb.verify_index. - Added support for Citus 14, with support for Postgres 18.
- Support for JSONB exists (
?) operator pushdown. - Support for using index expressions and UNNEST in aggregate queries.
- Support for tokenining UUID columns.
Performance Improvements 🚀
- When visibility filtering is not able to use the visibility map, it now executes the minimal safe heap check, showing up to 50% speedup on MVCC-safe aggregates.
- Queries on small tables run up to 6x faster by using appropriate numbers of parallel workers.
- Writes to mutable segments will now apply backpressure, avoiding performance degradation during extended write traffic.
- 4-5x faster planning for regex and fuzzy queries.
- VACUUMs now cooperatively cancel background merges, to ensure that the visibility map is up to date for read queries.
Stability Improvements 💪
- The ICU tokenizer is now implemented in Rust via the
icu_segmentercrate, which avoids a runtime dependency on a particular ICU version being installed on the target system. - Significantly improved warnings when Top-K or aggregate queries do not meet the requirements for pushdown.
- Audited all sources of double panics to ensure helpful error messages are rendered.
- Improved validation of indexed datetime columns.
- Improved validation of
pdb.aggarguments.