v7.3.3
Special thanks to the following individuals for their excellent contributions:
- @mmoayyed
- @thomas-nilsson-irfu
9.3.0
QuestDB 9.3.0 is now available, bringing a new wave of query expressiveness and usability improvements across the engine and the Web Console. This release introduces window joins for precise time-based analytics, database views for cleaner query composition, AI-assisted workflows in the console, and the new PIVOT keyword for effortless wide-schema aggregations.
QuestDB now supports WINDOW JOIN, a new join syntax designed specifically for time-based analytics.
WINDOW JOIN allows each row from a primary table to be joined with a time window of rows from another table, with aggregations computed over the matching rows. This makes short-horizon analytics—such as correlating trades with nearby market prices—both expressive and efficient.
SELECT
t.*,
avg(p.bid) AS avg_bid,
avg(p.ask) AS avg_ask
FROM trades t
WINDOW JOIN prices p
ON p.sym = t.sym
RANGE BETWEEN 1 second PRECEDING
AND 1 second FOLLOWING
INCLUDE PREVAILING;
In this example, each row from trades is joined with all rows from prices that share the same symbol and fall within the [-1s, +1s] interval (inclusive). Aggregations are then calculated over the joined rows.
This syntax avoids complex subqueries and makes time-windowed joins explicit, readable, and performant.
QuestDB 9.3.0 adds support for database views.
Views are virtual tables defined by a SELECT statement. They do not persist data on disk. Instead, the underlying query is executed as a subquery each time the view is referenced.
This allows you to encapsulate complex logic, reuse queries across applications, and expose stable schemas without duplicating or materialising data.
CREATE VIEW latest_trades AS
SELECT
symbol,
side,
last(price) AS price,
last(timestamp) AS ts
FROM trades
GROUP BY symbol, side;
Views can be queried just like tables, while always reflecting the latest data from their source tables.
The QuestDB Web Console now includes LLM-powered assistance, available on an opt-in basis using your own API key.
Once enabled, the console can:
- Auto-describe table schemas and column semantics
- Annotate sample rows with plain-language context
- Walk through query execution plans, highlighting joins, filters, and index usage
This makes it easier to understand both what a query does and how it executes—directly where you write SQL.
This release introduces the new PIVOT keyword.
PIVOT is a specialised form of GROUP BY that transforms rows into columns, helping you move from a narrow schema to a wide one in a single query.
Consider the following trades table:
CREATE TABLE trades (
symbol SYMBOL CAPACITY 256 CACHE,
side SYMBOL CAPACITY 256 CACHE,
price DOUBLE,
amount DOUBLE,
timestamp TIMESTAMP
) timestamp(timestamp) PARTITION BY DAY WAL;
A traditional aggregation might look like this:
SELECT side, symbol, last(price) AS price
FROM trades
WHERE symbol IN ('BTC-USD', 'ETH-USD')
ORDER BY side, symbol;
Resulting in a narrow result set.
With PIVOT, the same logic can be expressed as a wide schema:
trades
PIVOT (
last(price)
FOR symbol IN ('BTC-USD', 'ETH-USD')
GROUP BY side
ORDER BY side
);
PIVOT performs a combined filter and aggregation, mapping values directly into columns. This is particularly useful for reporting, dashboards, and downstream systems that prefer column-oriented outputs.
- fix(sql): segfault when using
touch()on a table with a new empty column by @nwoolmer in https://github.com/questdb/questdb/pull/6561 - feat(sql): window join by @puzpuzpuz in https://github.com/questdb/questdb/pull/6292
- fix(pgwire): add support for
SHOW default_transaction_read_onlyby @nwoolmer in https://github.com/questdb/questdb/pull/6562 - fix(core): fix incorrect designated timestamp column displayed by
tables()after column type changes by @glasstiger in https://github.com/questdb/questdb/pull/6570 - fix(sql): support copies of very wide tables and result sets by @nwoolmer in https://github.com/questdb/questdb/pull/6525
- fix(sql): fix false timestamp ordering error with nested SAMPLE BY and ORDER BY by @bluestreak01 in https://github.com/questdb/questdb/pull/6572
- perf(sql): avoid expensive row counting in EXPLAIN query with LIMIT by @mtopolnik in https://github.com/questdb/questdb/pull/6540
- feat(sql): align
glob()function with DuckDB glob syntax by @kafka1991 in https://github.com/questdb/questdb/pull/6552 - perf(sql): speed up JIT-compiled filters by reordering predicates and short-circuiting them by @puzpuzpuz in https://github.com/questdb/questdb/pull/6568
- feat(core): release disk space faster on table drop by @ideoma in https://github.com/questdb/questdb/pull/6555
- perf(sql): speed up row counting in filter queries by @puzpuzpuz in https://github.com/questdb/questdb/pull/6580
- feat(pgwire): support VARCHAR[] bind variables for symbol/varchar/str IN expressions by @kafka1991 in https://github.com/questdb/questdb/pull/6574
- feat(sql): add column projection pushdown for
read_parquet()by @kafka1991 in https://github.com/questdb/questdb/pull/6551 - perf(sql): parallel ORDER BY long_column LIMIT N for high-cardinality GROUP BY by @puzpuzpuz in https://github.com/questdb/questdb/pull/6582
- fix(sql): fix
EXPLAIN UPDATEresulting in error by @bluestreak01 in https://github.com/questdb/questdb/pull/6588 - fix(sql): handle quoted column names with dots in JOIN metadata by @jerrinot in https://github.com/questdb/questdb/pull/6590
- feat(sql): add rowCount, txn and timestamp columns to tables() by @bluestreak01 in https://github.com/questdb/questdb/pull/6581
- perf(sql): speed up min/max aggregates on designated timestamp by @puzpuzpuz in https://github.com/questdb/questdb/pull/6593
- fix(sql): inefficient commit batching during parquet exports by @nwoolmer in https://github.com/questdb/questdb/pull/6596
- fix(conf): auto-detect native libs in jlink runtime by @jerrinot in https://github.com/questdb/questdb/pull/6493
- fix(core): prevent rounding overflow from being ignored during decimal divisions by @RaphDal in https://github.com/questdb/questdb/pull/6598
- feat(sql): support
PIVOTkeyword for rotating rows to columns by @nwoolmer in https://github.com/questdb/questdb/pull/5313 - fix(pgwire): allow large varchar column regardless of send buffer size by @jerrinot in https://github.com/questdb/questdb/pull/6603
- chore(conf): claude.md to steer agents by @jerrinot in https://github.com/questdb/questdb/pull/6607
- feat(core): views by @glasstiger in https://github.com/questdb/questdb/pull/5720
- fix(sql): collect dependent columns during top-down projection propagation by @kafka1991 in https://github.com/questdb/questdb/pull/6600
Full Changelog: https://github.com/questdb/questdb/compare/9.2.3...9.3.0
v3.3.1
- Bump release.version to 3.3.1-SNAPSHOT by @fool1280 in https://github.com/Netflix/zuul/pull/2044
- Remove deprecated gradle props and adjust sample defaults by @gavinbunney in https://github.com/Netflix/zuul/pull/2050
- Add
Cookies.getNames()by @gavinbunney in https://github.com/Netflix/zuul/pull/2051
Full Changelog: https://github.com/Netflix/zuul/compare/v3.3.0...v3.3.1
3.9.1 / 2026-01-07
- [BUGFIX] Agent: fix crash shortly after startup from invalid type of object. #17802
- [BUGFIX] Scraping: fix relabel keep/drop not working. #17807
1.0.0-alpha.79
- Feat/ftps&sftp by @yxrxy in https://github.com/rustfs/rustfs/pull/1308
- fix(tagging): fix e2e test_object_tagging failure by @0xdx2 in https://github.com/rustfs/rustfs/pull/1327
- fix: s3 list object versions next marker by @overtrue in https://github.com/rustfs/rustfs/pull/1328
- chore: upgrade dependencies and migrate to aws-lc-rs by @houseme in https://github.com/rustfs/rustfs/pull/1333
- chore: replace native-tls with pure rustls for FTPS/SFTP e2e tests by @yxrxy in https://github.com/rustfs/rustfs/pull/1334
- chore: upgrade GitHub Actions artifact actions by @houseme in https://github.com/rustfs/rustfs/pull/1339
- feat:Permission verification for deleting versions by @GatewayJ in https://github.com/rustfs/rustfs/pull/1341
- fix: remove nginx-ingress default body size limit by @usernameisnull in https://github.com/rustfs/rustfs/pull/1335
- fix:correct RemoteAddr extension type to enable IP-based policy evaluation by @LeonWang0735 in https://github.com/rustfs/rustfs/pull/1356
- fix: do not hardcode bash path by @jan-schreib in https://github.com/rustfs/rustfs/pull/1358
- fix: try casting available blocks to a u64 on FreeBSD and OpenBSD by @jan-schreib in https://github.com/rustfs/rustfs/pull/1360
- Fixing URL output format in IPv6 environments #1343 and Incorrect time in UI #1350 by @houseme in https://github.com/rustfs/rustfs/pull/1363
- fix: fix bucket policy principal parsing to support * and {AWS: *} fo… by @yxrxy in https://github.com/rustfs/rustfs/pull/1354
- fix: fix FTPS/SFTP download issues and optimize S3Client caching by @yxrxy in https://github.com/rustfs/rustfs/pull/1353
- feat:policy Resources support string and array modes. by @GatewayJ in https://github.com/rustfs/rustfs/pull/1346
- add node selector for standalone deployment by @majinghe in https://github.com/rustfs/rustfs/pull/1368
- helm: add nodeSelector to standalone deployment by @31ch in https://github.com/rustfs/rustfs/pull/1367
- dep: upgrade tokio 1.49.0 by @houseme in https://github.com/rustfs/rustfs/pull/1378
- Fix event object structure according to AWS rules by @codedoga in https://github.com/rustfs/rustfs/pull/1379
- Enable the possibility to freely configure request and limit by @mkrueger92 in https://github.com/rustfs/rustfs/pull/1374
- fix:allow NotResource-only policies in statement validation by @LeonWang0735 in https://github.com/rustfs/rustfs/pull/1364
- build(deps): bump the dependencies group with 2 updates by @dependabot[bot] in https://github.com/rustfs/rustfs/pull/1383
- Fix Path Traversal and Enhance Object Validation by @weisd in https://github.com/rustfs/rustfs/pull/1387
- fix: s3 api compatibility by @overtrue in https://github.com/rustfs/rustfs/pull/1370
- fix: improve s3-tests readiness detection and Python package installation by @overtrue in https://github.com/rustfs/rustfs/pull/1390
- Refactor RPC Authentication System for Improved Maintainability by @weisd in https://github.com/rustfs/rustfs/pull/1391
- fix rpc client by @weisd in https://github.com/rustfs/rustfs/pull/1393
- feat: s3 tests classification by @overtrue in https://github.com/rustfs/rustfs/pull/1392
- Remove unused crates by @houseme in https://github.com/rustfs/rustfs/pull/1394
- fix: OpenBSD does not support TCPKeepalive intervals by @jan-schreib in https://github.com/rustfs/rustfs/pull/1382
- Remove the sysctl crate and use libc's sysctl call interface by @jan-schreib in https://github.com/rustfs/rustfs/pull/1396
- fix: Correct import permissions by @GatewayJ in https://github.com/rustfs/rustfs/pull/1402
- test(s3): add 9 delimiter list tests to implemented tests by @overtrue in https://github.com/rustfs/rustfs/pull/1410
- feat: Add permission verification for account creation by @GatewayJ in https://github.com/rustfs/rustfs/pull/1401
- Fix windows missing default backlog by @jan-schreib in https://github.com/rustfs/rustfs/pull/1405
- fix: improve memory ordering for disk health tracker by @weisd in https://github.com/rustfs/rustfs/pull/1412
- Enhance Object Version Management and Replication Status Handling by @weisd in https://github.com/rustfs/rustfs/pull/1413
- rm online check by @weisd in https://github.com/rustfs/rustfs/pull/1416
- Fix/fix improve for audit by @houseme in https://github.com/rustfs/rustfs/pull/1418
- @usernameisnull made their first contribution in https://github.com/rustfs/rustfs/pull/1335
- @jan-schreib made their first contribution in https://github.com/rustfs/rustfs/pull/1358
- @31ch made their first contribution in https://github.com/rustfs/rustfs/pull/1367
- @codedoga made their first contribution in https://github.com/rustfs/rustfs/pull/1379
- @mkrueger92 made their first contribution in https://github.com/rustfs/rustfs/pull/1374
Full Changelog: https://github.com/rustfs/rustfs/compare/1.0.0-alpha.78...1.0.0-alpha.79
milvus-2.5.25
Release note is coming...
3.9.0 / 2026-01-06
In version 3.9, Native Histograms is no longer experimental, and the feature flag native-histogram has no effect. You must now turn on the config setting scrape_native_histograms to collect Native Histogram samples from exporters.
- [CHANGE] Native Histograms are no longer experimental! Make the
native-histogramfeature flag a no-op. Usescrape_native_histogramsconfig option instead. #17528 - [CHANGE] API: Add maximum limit of 10,000 sets of statistics to TSDB status endpoint. #17647
- [FEATURE] API: Add /api/v1/features for clients to understand which features are supported. #17427
- [FEATURE] Promtool: Add
start_timestampfield for unit tests. #17636 - [FEATURE] Promtool: Add
--format seriesjsonoption totsdb dumpto output just series labels in JSON format. #13409 - [FEATURE] Add
--storage.tsdb.delay-compact-file.pathflag for better interoperability with Thanos. #17435 - [FEATURE] UI: Add an option on the query drop-down menu to duplicate that query panel. #17714
- [ENHANCEMENT]: TSDB: add flag
--storage.tsdb.block-reload-intervalto configure TSDB Block Reload Interval. #16728 - [ENHANCEMENT] UI: Add graph option to start the chart's Y axis at zero. #17565
- [ENHANCEMENT] Scraping: Classic protobuf format no longer requires the unit in the metric name. #16834
- [ENHANCEMENT] PromQL, Rules, SD, Scraping: Add native histograms to complement existing summaries. #17374
- [ENHANCEMENT] Notifications: Add a histogram
prometheus_notifications_latency_histogram_secondsto complement the existing summary. #16637 - [ENHANCEMENT] Remote-write: Add custom scope support for AzureAD authentication. #17483
- [ENHANCEMENT] SD: add a
configlabel with job name for mostprometheus_sd_refreshmetrics. #17138 - [ENHANCEMENT] TSDB: New histogram
prometheus_tsdb_sample_ooo_delta, the distribution of out-of-order samples in seconds. Collected for all samples, accepted or not. #17477 - [ENHANCEMENT] Remote-read: Validate histograms received via remote-read. #17561
- [PERF] TSDB: Small optimizations to postings index. #17439
- [PERF] Scraping: Speed up relabelling of series. #17530
- [PERF] PromQL: Small optimisations in binary operators. #17524, #17519.
- [BUGFIX] UI: PromQL autocomplete now shows the correct type and HELP text for OpenMetrics counters whose samples end in
_total. #17682 - [BUGFIX] UI: Fixed codemirror-promql incorrectly showing label completion suggestions after the closing curly brace of a vector selector. #17602
- [BUGFIX] UI: Query editor no longer suggests a duration unit if one is already present after a number. #17605
- [BUGFIX] PromQL: Fix some "vector cannot contain metrics with the same labelset" errors when experimental delayed name removal is enabled. #17678
- [BUGFIX] PromQL: Fix possible corruption of PromQL text if the query had an empty
ignoring()and non-empty grouping. #17643 - [BUGFIX] PromQL: Fix resets/changes to return empty results for anchored selectors when all samples are outside the range. #17479
- [BUGFIX] PromQL: Check more consistently for many-to-one matching in filter binary operators. #17668
- [BUGFIX] PromQL: Fix collision in unary negation with non-overlapping series. #17708
- [BUGFIX] PromQL: Fix collision in label_join and label_replace with non-overlapping series. #17703
- [BUGFIX] PromQL: Fix bug with inconsistent results for queries with OR expression when experimental delayed name removal is enabled. #17161
- [BUGFIX] PromQL: Ensure that
rate/increase/deltaof histograms results in a gauge histogram. #17608 - [BUGFIX] PromQL: Do not panic while iterating over invalid histograms. #17559
- [BUGFIX] TSDB: Reject chunk files whose encoded chunk length overflows int. #17533
- [BUGFIX] TSDB: Do not panic during resolution reduction of invalid histograms. #17561
- [BUGFIX] Remote-write Receive: Avoid duplicate labels when experimental type-and-unit-label feature is enabled. #17546
- [BUGFIX] OTLP Receiver: Only write metadata to disk when experimental metadata-wal-records feature is enabled. #17472