12 hours ago
timescaledb

2.28.0 (2026-06-16)

This release contains performance improvements and bug fixes since the 2.27.2 release. We recommend that you upgrade at the next available opportunity.

Highlighted features in TimescaleDB v2.28.0

  • Faster first() and last() queries on compressed data. TimescaleDB derives first(value, time) and last(value, time) aggregates straight from the columnstore's batch metadata, skipping batch decompression entirely. For the "latest reading per series" lookups that time-series workloads run constantly, that means meaningfully faster recency queries with no changes to your SQL queries.
  • Lighter, less disruptive continuous aggregate refreshes. refresh_continuous_aggregate() can now run incrementally in batches — the same behavior refresh policies already use — enabling breaking large manual refreshes into smaller chunks (tunable via buckets_per_batch, max_batches_per_execution, and refresh_newest_first) instead of one heavy operation. Refreshes also now take a lighter lock while processing the invalidation log, so they no longer block unrelated concurrent operations on the same continuous aggregate, improving behavior for concurrent workloads.
  • Vectorized execution now covers CASE expressions. TimescaleDB's columnar executor can now evaluate CASE ... WHEN expressions directly on compressed data, so queries using conditional logic stay on the fast vectorized path instead of falling back to slower row-by-row decompression. This speeds up a common pattern — conditional aggregations and computed columns over compressed history — with no query changes needed.
  • Add new aggregations to a continuous aggregate without rebuilding it. You can now run ALTER MATERIALIZED VIEW <cagg> ADD COLUMN <name> <type> GENERATED ALWAYS AS (<aggregate>) STORED to add a new computed aggregate to an existing continuous aggregate in place — no more dropping and recreating the whole aggregate just to track one more metric. New data populates the column going forward, letting your rollups evolve alongside your application. (Existing rows start as NULL; a forced refresh backfills them when you need historical values.)

Deprecation Notice: PostgreSQL 15 Support This release marks the final minor version of TimescaleDB that will support PostgreSQL 15. Starting with our next release, version 2.29.0, we will officially drop support for Postgres 15, and only support Postgres 16, 17, and 18; however, all future patch releases within the current 2.28 version cycle will continue to fully support it. We recommend planning your PostgreSQL upgrades accordingly to ensure a smooth transition.

Deprecation Notice: chunk_constraint Catalog Table Please note that the _timescaledb_catalog.chunk_constraint table has been dropped and temporarily replaced by a view, which introduces a change to the underlying objects while maintaining current query behavior. However, this compatibility view will be completely removed in a future release. To ensure your queries remain compatible moving forward, we strongly advise transitioning to the stable contracts provided by our informational views.

Backward-Incompatible Changes

  • #9934 Remove adaptive chunking

Features

  • #4054 Support ANALYZE and VACUUM on continuous aggregates by redirecting to the underlying materialization hypertable
  • #9125 Increase the parallelism of SELECT queries over compressed hypertables to approximately match the uncompressed data size
  • #9410 Mark hypertable and chunk as user catalog tables
  • #9416 Support some forms of CASE expression in columnar aggregation and grouping
  • #9580 Add first / last sparse indexes to compression
  • #9784 Use first / last sparse index for orderby metadata on new compressed chunks
  • #9668 Allow database owner to configure hypertables and policies
  • #9701 Relax lock during continuous aggregate invalidation log processing
  • #9730 Add in-memory observability for compressed chunks
  • #9735 Improve GapFill row count estimate
  • #9821 Allow subquery results which are exec params as GapFill arguments
  • #9825 Support ADD COLUMN on continuous aggregates
  • #9842 Suppress continuous aggregate invalidation tracking during bulk loads
  • #9878 Remove chunk_constraint catalog tracking for foreign keys
  • #9893 Remove chunk_constraint catalog tracking for non-dimensional constraints
  • #9903 Incremental refresh for refresh_continuous_aggregate()
  • #9915 Remove _timescaledb_catalog.chunk_constraint table
  • #9938 Add rebuild_sparse_index function
  • #9964 Add a function to lock OSM chunk's dimension slice
  • #9980 Support first/last(value, time) in ColumnarIndexScan

Bugfixes

  • #9708 Guard time bucket parameter handling against bad input
  • #9745 Check constraints when adding unique constraints to chunks
  • #9890 Fix incremental refresh batch boundaries to align with variable-width buckets and start only where a chunk and an invalidation overlap
  • #9914 Fix use-after-free in segmentwise recompression
  • #9929 Fix background jobs being bumped in the queue forever and never running
  • #9955 Fix wrong results when using Batch Sorted Merge with no first-last index on a non-leading order by column
  • #9967 Block upgrade after downgrade with first/last indexes present
  • #9976 Fix wrong results when comparing a date column to a timestamptz value
  • #9977 Fix COPY WHERE into a hypertable with dropped columns
  • #9981 Fix set-returning functions in the sort key of ColumnarScan
  • #9982 Reject ALTER TABLE ... INHERIT when the parent is a hypertable
  • #9984 Fix handling of NOT VALID NOT NULL constraint for query optimization
  • #9986 Handle MERGE WHEN NOT MATCHED BY SOURCE on hypertables
  • #9988 Fix time_bucket_gapfill function detection
  • #10003 Block unsafe updates of unique columns on compressed chunks
  • #10024 Fix approximate_row_count handling of Infinity
  • #10025 Fix rename on compressed continuous aggregates
  • #10026 Fix chunk skipping near PG_INT64_MAX

New Settings

  • skip_cagg_invalidation: skip continuous aggregate invalidation tracking for DML and DDL in the current session/transaction. Off by default.
  • stats_max_chunks: set the per-database compressed chunk statistics cache capacity. Defaults to 1024 chunks; set to 0 to disable the feature.

Thanks

  • @Fabian-2596 for suggesting more accurate GapFill row count estimate
  • @otjdiepluong for fixing spelling mistakes in timescaledb source code comments
  • @scimad and @Nosfistis for suggesting expanding coverage for gapfill arguments
1 days ago
zuul

v3.6.14

What's Changed

Full Changelog: https://github.com/Netflix/zuul/compare/v3.6.13...v3.6.14

1 days ago
zuul

v3.6.13

What's Changed

Full Changelog: https://github.com/Netflix/zuul/compare/v3.6.12...v3.6.13

1 days ago
questdb

9.4.3

QuestDB 9.4.3

QuestDB 9.4.3 brings some key bug-fixes, along with parquet-native tables and new parquet-querying performance enhancements, with order-of-magnitude speedups for ORDER BY ... LIMIT queries.

For any questions or feedback, please join us on Slack or on Discourse.

See also our prettier release notes page.

Breaking changes 💥

  • Two-bound LIMIT null semantics changed, aligning LIMIT lo, hi with LIMIT n:
    • LIMIT null, n now returns the first N rows (previously the full sorted set)
    • LIMIT n, null now returns the empty result (previously all rows).
    • LIMIT null is unchanged, and returns the full result set.
  • EXPLAIN plan output rewording for encodable sorts:
    • There was inconsistency in the rendering for 'encoding sorts'; this plan node will now render consistently as Encode sort light.
    • If you assert any particular query plan shapes in your regression suite, you will need to update the assertions.

Highlights

Table-level Parquet format

Tables can now store partitions in PARQUET format by default, rather than only NATIVE. Previously, you would need to:

  • Run ALTER TABLE ... CONVERT PARTITION ... TO PARQUET queries to synchronously convert partitions in QuestDB OSS.
  • Enable STORAGE POLICY to asynchronously convert partitions in QuestDB Enterprise.
CREATE TABLE trades (ts TIMESTAMP, price DOUBLE, sym SYMBOL)
TIMESTAMP(ts) PARTITION BY DAY FORMAT PARQUET WAL;

ALTER TABLE trades SET FORMAT PARQUET;
ALTER TABLE trades SET FORMAT NATIVE;

Please note that:

  • FORMAT PARQUET can only be set on partitioned write-ahead-log (WAL) tables.
  • When applying FORMAT PARQUET via ALTER TABLE, historical partitions will not be automatically converted.
  • FORMAT NATIVE remains the default format for tables in QuestDB.
  • Out-of-order writes are more expensive when applied to parquet partitions.

Memory-budgeted Parquet decode cache

There is a fine balance of memory budget versus CPU time when scanning and decoding parquet row groups. A fixed number of decode slots was an inflexible way to balance these two concerns.

Therefore, we have introduced a new memory-budget configuration and deprecated the old slot-based config:

  • New: cairo.sql.parquet.cache.memory.size
    • This is a per-cursor byte budget for decoded row groups (default 256 MB).
  • Deprecated: cairo.sql.parquet.frame.cache.capacity
    • This is still accepted, but not used.

Faster ORDER BY ... LIMIT N

The query engine has a number of optimisations based on the native-format data layout. We've revised the long top-K query path for parquet partitions, by removing a sorting tree and pruning projected columns earlier in the process. This is most valuable for queries over wide tables, with a significant sort plus limit workload.

This dramatically reduces unnecessary row-group decoding, and thus improves the scalability of this query shape for larger limits:

latency_questdb

Concurrent ILP/TCP stale-writes fix

ILP/TCP is a mostly-deprecated ingestion path, though maintained for backwards compatibility. As part of this maintenance, we have fixed a bug which could cause stale data to be written to a table, affecting DECIMAL, LONG256 and implicit casts from BINARY to SYMBOL. This only impacted concurrent writes, so a straightforward single worker TCP stream was unaffected.

Thank you to our users who continue to use this feature and give us valuable feedback that helps us to keep it well-maintained.

With the upcoming QuestDB 10.0 release, we recommend planning an upgrade to our new ingestion API, which brings dramatically better performance and usability across the board.

Changelog

Features

  • feat(sql): add is_end_of_month SQL function by @Dracylfrr in #7214
  • feat(core): add periodic memory usage logging by @jerrinot in #7042
  • feat(core): support parquet format table level by @ideoma in #7107
  • feat(sql): add a memory-budgeted cache for Parquet random access by @puzpuzpuz in #7230

Performance

  • perf(sql): speed up ORDER BY ... LIMIT N queries by @kafka1991 in #7222
  • perf(sql): speed up parallel ORDER BY ... LIMIT N queries with encoded sort keys by @kafka1991 in #7241
  • perf(sql): skip parquet decoding of rows that LIMIT discards by @kafka1991 in #7215
  • perf(sql): push down filters into joins wrapped in views and subqueries by @ideoma in #7244
  • perf(parquet): speed up partition-to-parquet conversion and reduce file size by @RaphDal in #7206

Fixes

  • fix(sql): fix internal error when a dotted name follows an operator by @bluestreak01 in #7260
  • fix(core): fix NATIVE_INDEX_READER leak when a posting-index row cursor is closed after its reader by @bluestreak01 in #7256
  • fix(sql): fix wrong results in splice, right and full outer joins with a left-table filter by @puzpuzpuz in #7225
  • fix(core): fix unexpected logout during HTTP session rotation by @brunocalza in #7249
  • fix(sql): fix internal error when an IN subquery contains a join, and handle declared variables in join ON clauses by @puzpuzpuz in #7211
  • fix(core): fix snapshot restore accepting truncated parquet partitions when _pm sidecar exists by @bluestreak01 in #7243
  • fix(core): fix POSTING-indexed symbol queries returning wrong rows or crashing by @bluestreak01 in #7253
  • fix(wal): fix symbol value corruption when skipping replaced transactions across DDL by @jovfer in #7248
  • fix(core): fix Parquet crashes on malformed files and data corruption on partial reads by @glasstiger in #7223
  • fix(ilp): fix data corruption in concurrent ILP over TCP by @jerrinot in #7240
  • fix(sql): fix wrong first/last results in parallel GROUP BY by @ideoma in #7224
  • fix(core): fix posting index crash and wrong covered reads after rollback by @bluestreak01 in #7229
  • fix(qwp): fix unresponsive network I/O under heavy QWP ingestion by @jerrinot in #7231
  • fix(core): fix crash and native memory overrun in covering index out-of-order commits by @bluestreak01 in #7227

Full Changelog: 9.4.2...9.4.3

1 days ago
MeiliSearch

v1.47.0 🦇

🌈 Enhancements

Search personalization on federated search

We now support using the search personalization feature on federated search requests.

Like page/hitPerPage or limit/offset, the personalization option must be specified in the federation attribute to work properly. Otherwise, an error will be returned reminding you to move the attribute in federation.

By @ManyTheFish in https://github.com/meilisearch/meilisearch/pull/6414

The new settings indexer is feature complete 🎉

  • We now better support the tokenizer-related settings
  • We improved the quality of the new settings indexer to enhance the engine's performance when changing the locales, the dictionary, synonyms, stop words, separator, and non-separator tokens.
  • This makes the new settings indexer feature-complete, meaning that, unless you set the MEILI_EXPERIMENTAL_NO_EDITION_2024_FOR_SETTINGS environment variable to true, all settings tasks can now be handled by the new settings indexer, bringing a better scaling behavior, much faster cancellation, and a more precise progress view.

By @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6409

Observability improvements

We expose more Prometheus metrics to improve observability, specifically to show more metrics on document throughput and ease debugging.

By @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6430

🦋 Fixes

🔒 Security

🔩 Misc. changes

Search implementation refactor

Refactor the search pipeline to mutualize the code. The new implementation will always perform a federated search under the hood, and then the output will be transformed into the expected route's output.

Noticeable changes from the user perspective:

  • Some error messages have been modified
  • Small breaking change: a few error codes change, such as MultiSearch<Error> <--> Search<Error>

Other changes

New Contributors

Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.46.1...v1.47.0

1 days ago
seaweedfs

4.34

What's Changed

Full Changelog: https://github.com/seaweedfs/seaweedfs/compare/4.33...4.34

4 days ago
zuul

v3.6.12

  • Fix for vulnerability where callers could see content meant for other callers if the origin returns an HTTP 1xx response #2137
5 days ago
dgraph

v25.3.5

What's Changed

Full Changelog: https://github.com/dgraph-io/dgraph/compare/v25.3.4...v25.3.5

5 days ago
dgraph

v25.3.5

What's Changed

Full Changelog: https://github.com/dgraph-io/dgraph/compare/v25.3.4...v25.3.5