8.3.3
- fix(sql): fix internal error for some SQLs involving system tables by @bluestreak01 in https://github.com/questdb/questdb/pull/5702
- fix(core): fix for emoji in instance name breaking web console by @glasstiger in https://github.com/questdb/questdb/pull/5701
- feat(pgwire): two-phase execution of
insert select
query by @kafka1991 in https://github.com/questdb/questdb/pull/5608
Full Changelog: https://github.com/questdb/questdb/compare/8.3.2...8.3.3
8.3.2
8.3.2 is a stability release, bringing a number bugfixes and improvements. There have been improvements to materialized views, checkpoints, zfs
support, and instance metrics, and of course, our built-in web console!
Materialized Views can now be configured to refresh on a timed schedule, instead of immediately whenever new data is written. You can also modify the TTL and refresh limit post-creation, giving you more flexibility to optimise current and new views.
Taking checkpoints will now consume much less disk space, and we've also added some new metrics to help you to monitor your overall database's health, and be alerted to writing delays or suspended tables.
This release will shortly be followed by the first beta
release of the new ARRAY
type. This is a multi-dimensional array (think NumPy), which will initially support DOUBLE
values. This will be accompanied by the first upgardes for the ILP clients, to move from the text protocol to a bespoke binary protocol. This means arrays can be sent to the database efficiently, without expansion into lots of text, and is the first step towards supporting all of QuestDB's rich features through the database clients.
For any questions or feedback, please join us on Slack or on Discourse.
See also our prettier release notes page.
-
The
greatest
andleast
functions will now only return anull
if all of the inputs are null, instead of any. This aligns the behaviour with MSSQL. -
The
WITHIN
function now defaults to a different implementation, which runsWITHIN
beforeLATEST BY
.- If you were using the old implementation, which ran
LATEST BY
first, you can re-enable it usingquery.within.latest.by.optimisation.enabled=true
. This variant was only used forWHERE
+LATEST BY
+ indexed symbols, and no other time. - Or alternatively, use the new implementation and a subquery to force the
LATEST BY
to run first.
- If you were using the old implementation, which ran
- The web console now allows you to set an instance's name and colour! This is handy when switching between different deployments and instances, to make sure you run your queries on the correct console.
- The query log UI element has been upgraded, fixing a few snags, and now supports horizontal scrolling for long rows.
- (Enterprise) SSO users will not have to log back in every time they log out; instead, an existing SSO session can be resumed, or you can switch to a different account.
New metrics have been added to help monitor the performance of tier-1 (WAL) and tier-2 (Table) storage:
suspended_tables
; this is a global counter for how many tables are currently suspended.wal_apply_seq_txn
; this is a global counter forsequencerTxn
, the txn number corresponding to the latest transaction written to WAL, for a particular table.wal_apply_writer_txn
; this is a global counter forwriterTxn
, the txn number corresponding to the latest transaction visible for read, for a particular table.- You can subtract the above two numbers and track this over time, to estimate if the database is backing up and falling behind on data visibility.
- You can also track replication lag by comparing metrics between the primary and the replica. More granular information can be obtained by polling
wal_tables()
andsys.telemetry_wal
;
- Materialized Views can now be refreshed on a timer schedule.
CREATE MATERIALIZED VIEW price_1h REFRESH START '2025-09-12T00:00:00.000000Z' EVERY 1h AS ...
- You can also alter existing views to swap to a new scheduled refresh:
ALTER MATERIALIZED VIEW price_1h SET REFRESH START '2035-09-12T00:00:00.000000Z' EVERY 1d;
- You can now add a
TTL
post-creation:ALTER MATERIALIZED VIEW view_name SET TTL 42 DAYS;
- You can now add a refresh limit post-creation, which bounds how far back an incremental refresh will go
ALTER MATERIALIZED VIEW view_name SET REFRESH LIMIT 12 HOURS;
- Base table names are no longer case-sensitive.
- The storage cost to have an active checkpoint has been dramatically reduced. This means you are less likely to run out of storage if you have out-of-order (O3) writes whilst
CHECKPOINT CREATE
is active.- If you encounter any issues, you can roll back to the old version using
cairo.txn.scoreboard.format=1
. - This change also fixes
max txn in-flight
errors, which could be caused by a leaked query.
- If you encounter any issues, you can roll back to the old version using
- We have upgraded the
WITHIN
operator to work for genericWHERE
clauses, instead of justLATEST BY
queries. This should make it much easier to filter for data by geohash location.
- fix(sql): fix string constant unescaping in JIT by @jerrinot in https://github.com/questdb/questdb/pull/5649
- fix(core): remove critical log message when processing multiple transactions on dedup table by @ideoma in https://github.com/questdb/questdb/pull/5650
- fix(core): fix deadlock in logging when handling disk full FS error by @ideoma in https://github.com/questdb/questdb/pull/5634
- feat(core): reduce active checkpoint disk cost by @ideoma in https://github.com/questdb/questdb/pull/5444
- fix(core): fix startup logging to only check existing dirs for supported file system by @ideoma in https://github.com/questdb/questdb/pull/5658
- fix(sql): missing tables and materialized views are not critical errors by @jerrinot in https://github.com/questdb/questdb/pull/5654
- feat(sql): ALTER MATERIALIZED VIEW SET REFRESH LIMIT and SET TTL by @puzpuzpuz in https://github.com/questdb/questdb/pull/5638
- feat(core): add prometheus monitoring metrics that track WAL apply progress, suspended tables by @mtopolnik in https://github.com/questdb/questdb/pull/5660
- fix(wal): reading and writing all wal-e data via mmap to address ZFS mixed IO issues by @amunra in https://github.com/questdb/questdb/pull/5656
- fix(sql): non-deterministic function not rejected when creating materialized view by @puzpuzpuz in https://github.com/questdb/questdb/pull/5655
- fix(sql): case sensitive base table name when creating materialized view by @puzpuzpuz in https://github.com/questdb/questdb/pull/5672
- fix(sql): breaking change 💥-
greatest(V)
andleast(V)
now return null only if all args are null by @nwoolmer in https://github.com/questdb/questdb/pull/5669 - fix(sql): NullPointerException when calling vararg functions with no arguments by @puzpuzpuz in https://github.com/questdb/questdb/pull/5681
- fix(core): adjust query cache scaling to prevent memory exhaustion by @jerrinot in https://github.com/questdb/questdb/pull/5683
- fix(core): fixed table metadata commands, incorrectly displayed which column is the designated timestamp by @glasstiger in https://github.com/questdb/questdb/pull/5684
- fix(sql): fixed error reported when trying to add an already existing column with IF NOT EXISTS by @glasstiger in https://github.com/questdb/questdb/pull/5675
- fix(sql): fix segfault when using within(geohash) with latest on and partition column is empty by @bluestreak01 in https://github.com/questdb/questdb/pull/5688
- fix(pgwire): prevent stale results in LATEST ON queries with bind variables by @jerrinot in https://github.com/questdb/questdb/pull/5687
- feat(sql): REFRESH MATERIALIZED VIEW RANGE by @puzpuzpuz in https://github.com/questdb/questdb/pull/5662
- feat(sql): add multi-datatype support for (LEAD/LAG) window functions by @kafka1991 in https://github.com/questdb/questdb/pull/5524
- feat(sql): breaking change 💥 - parallel filtering geohashes using
WITHIN
by @nwoolmer in https://github.com/questdb/questdb/pull/5682 - feat(sql): timer refresh for materialized views by @puzpuzpuz in https://github.com/questdb/questdb/pull/5695
- feat(web-console): instance naming UI by @emrberk in https://github.com/questdb/ui/pull/427
- fix(web-console): wait for all body to be streamed before calculating network time by @emrberk in https://github.com/questdb/ui/pull/429
- fix(web-console): jit compiled icon shrink problem and notifications height by @emrberk in https://github.com/questdb/ui/pull/428
- feat(ui): make SSO re-authentication optional on logout by @glasstiger in https://github.com/questdb/ui/pull/412
8.3.1
8.3.1 is a stability release, and moves Materialized Views into GA. Thanks to all the early-adopters who have helped us with crucial feedback, to make sure they are efficient and robust. Give them a try!
8.3.1 also brings the first SQL Hints, which will give you more control over your query execution plans. For now, only one hint is supported - USE_ASOF_BINARY_SEARCH
- which allows you to swap between two algorithms for handling filtered ASOF JOIN
queries. Next on the list - controlling when the database chooses to use an INDEX
scan!
For any questions or feedback, please join us on Slack or on Discourse!
See also our prettier release notes page!
- fix(sql): add reset query timeout timer before
checkpoint create
by @kafka1991 in https://github.com/questdb/questdb/pull/5604 - fix(sql): fix internal error with some ASOF JOINs by @jerrinot in https://github.com/questdb/questdb/pull/5606
- fix(pgwire): compatibility with the nodejs 'postgres' driver by @jerrinot in https://github.com/questdb/questdb/pull/5615
- fix(core): prevent total symbol data loss on db hard reset by @ideoma in https://github.com/questdb/questdb/pull/5598
- feat(sql): skip unchanged sample by intervals in materialized view incremental refresh by @puzpuzpuz in https://github.com/questdb/questdb/pull/5613
- feat(sql): alter materialized view symbol capacity by @puzpuzpuz in https://github.com/questdb/questdb/pull/5622
- fix(sql): missing DST gap correction in case of certain sample by intervals by @puzpuzpuz in https://github.com/questdb/questdb/pull/5626
- perf(sql): support for Oracle-style SQL hints by @jerrinot in https://github.com/questdb/questdb/pull/5620
Full Changelog: https://github.com/questdb/questdb/compare/8.3.0...8.3.1
8.3.0
8.3.0 moves Materialized Views
into an advanced beta
. Thanks to all of you have tried the beta
and helped us iron out the remaining creases!
This release also brings significant ingestion performance improvements, particularly for small transactions and for batched PG Wire inserts. Not to mention a variety of bug fixes and safety enhancements to improve overall user experience.
But let's not forget about querying data! Check out how your ASOF JOIN
queries are doing! We have released dramatic performance improvements for ASOF JOIN
s that include interval scans and/or post-join filters. Benching against larger datasets has shown 100-1000x speedups for some queries.
For any questions or feedback, please join us on Slack or on Discourse!
See also our prettier release notes page!
-
Materialized Views
will now be enabled by default. If you do not wish to use them, you can disable them by settingcairo.mat.view.enabled=false
. -
Designated timestamp columns can no longer hold values beyond the Year 9999. We found that these values were generally produced by mistaken arithmetic. This prevents undroppable partition issues, and also reduces the chances of a configured
TTL
dropping your data. -
Some
IPv4
built-in functions were removed. You may need to introduce explicit casts in SQL queries that relied on implicit conversions betweenipv4
and other database types. This removes some ambiguity that was causing issues with queries unrelated toipv4
. -
Converting
char
to numeric values now aligns with PostgreSQL behaviour, whether implicitly or explicitly casted. -
SAMPLE BY
will now correctly handle a variety of DST-related timestamp grouping issues.SAMPLE BY
queries that use DST shifts are more likely to be executeed in parallel, too. These changes mean your result set might look different to before - but should be a consistent, rational output. -
FLOAT
andDOUBLE
types, when output to JSON or web console, will now have different precision. Previously, this was limited artificially. Now, it will print as many digits as it can. If you rely on the old output for any integration testing, you may need to upgrade your tests!
- Materialized Views are now in an advanced
BETA
.- Views will be correctly invalidated when the base table is dropped.
- Syntax errors in materialized view definitions should report the correct error position.
PARTITION BY
and parentheses()
are now optional.- Full mat view refreshes should no longer trigger occassional OOM errors.
- Still to come: a mat view write-performance enhancement, which is also a pre-step to supporting time-range
DELETE
s!
ASOF JOIN
queries that include filters over large datasets will now run 100-1000x faster than before!SYMBOL
columns can now have their capacity changed in-place, usingALTER TABLE table ALTER COLUMN column SYMBOL CAPACITY 4096
!- Ingestion of small batches has been sped by up to 100x!
- Ingestion via PG Wire batched inserts is faster and more memory efficient.
- feat(core): speed up WAL small transaction apply 100x by @ideoma in https://github.com/questdb/questdb/pull/5347
- fix(core): mat view is not invalidated when base table is dropped by @glasstiger in https://github.com/questdb/questdb/pull/5486
- fix(core): make partition drop atomic by @ideoma in https://github.com/questdb/questdb/pull/5515
- fix(pgwire): fix handling of sparse bind variables by @bluestreak01 in https://github.com/questdb/questdb/pull/5514
- fix(core): prevent inserting designated timestamp beyond year 9999, this would create invalid partition name by @mtopolnik in https://github.com/questdb/questdb/pull/5478
- fix(sql): support casting and aliasing timestamp column in materialized view by @eugenels in https://github.com/questdb/questdb/pull/5485
- fix(pgwire): possible unhandled error (double-close) in case of
INSERT
failure by @bluestreak01 in https://github.com/questdb/questdb/pull/5523 - fix(sql): crash when GROUP BY key includes timestamp by @jerrinot in https://github.com/questdb/questdb/pull/5527
- perf(sql): speed-up of simple projections by @jerrinot in https://github.com/questdb/questdb/pull/5529
- feat(core): accept EntraID's cookie expiry timestamp format by @glasstiger in https://github.com/questdb/questdb/pull/5470
- feat(sql): change column type SQL to support changing symbol column capacity by @ideoma in https://github.com/questdb/questdb/pull/5497
- chore(core): merge identical mem.getDirectVarcharA/B by @mtopolnik in https://github.com/questdb/questdb/pull/5542
- fix(ilp): disable Nagle's algorithm in HttpClient (set TCP_NODELAY flag) by @mtopolnik in https://github.com/questdb/questdb/pull/5550
- fix(sql): stuck thread on high cardinality group by query timeout by @puzpuzpuz in https://github.com/questdb/questdb/pull/5539
- fix(http): unhandled NullPointerException on SQL query error by @puzpuzpuz in https://github.com/questdb/questdb/pull/5548
- fix(core): fix issue with missing WAL segment directory during replication by @eugenels in https://github.com/questdb/questdb/pull/5538
- fix(sql): make the function's argument overload rules consistent with functions' implementation by @kafka1991 in https://github.com/questdb/questdb/pull/5528
- fix(core): fix critical error message in writing data with deduplication and a possible crash on writing same timestamp lines by @ideoma in https://github.com/questdb/questdb/pull/5547
- fix(sql): improve error handling for malformed SQL queries by @kafka1991 in https://github.com/questdb/questdb/pull/5572
- fix(sql): breaking change 💥 - remove some ipv4 operator functions. by @kafka1991 in https://github.com/questdb/questdb/pull/5566
- fix(core): fix table suspended on concurrent ALTER and RENAME operations by @ideoma in https://github.com/questdb/questdb/pull/5563
- fix(core): fix
cannot invoke "io.questdb.network.Epoll.close()"
error by @eugenels in https://github.com/questdb/questdb/pull/5573 - perf(sql): breaking change 💥 - parallel SAMPLE BY with time zone execution by @puzpuzpuz in https://github.com/questdb/questdb/pull/5493
- fix(sql): accept
long256
values via hex-encoded string in ILP by @nwoolmer in https://github.com/questdb/questdb/pull/5579 - fix(http): breaking change 💥 - fix incorrect
FLOAT
type scale in JSON response by @bluestreak01 in https://github.com/questdb/questdb/pull/5578 - fix(sql): spurious cancelled by user errors returned by queries executed in parallel by @puzpuzpuz in https://github.com/questdb/questdb/pull/5582
- perf(pgwire): improve performance of batch inserts via PostgreSQL driver by @bluestreak01 in https://github.com/questdb/questdb/pull/5564
- chore(core): ensure mat view logging cannot stall by @bluestreak01 in https://github.com/questdb/questdb/pull/5587
- perf(sql): expanded fast-path support for non-keyed ASOF JOINs by @jerrinot in https://github.com/questdb/questdb/pull/5553
- chore(sql): enable materialized views by default by @puzpuzpuz in https://github.com/questdb/questdb/pull/5460
- fix(sql): fix
show create table
union query issue. by @kafka1991 in https://github.com/questdb/questdb/pull/5577 - fix(ui): show JSON parsing error in case of an invalid query result by @emrberk in https://github.com/questdb/ui/pull/411
- fix(ui): fix incorrect unit normalisation for wal row throughput by @emrberk in https://github.com/questdb/ui/pull/414
- fix(ui): don't use navigator.clipboard in insecure context by @emrberk in https://github.com/questdb/ui/pull/417
- fix(ui): workaround for broken safari copy schema mechanism by @emberk in https://github.com/questdb/ui/pull/418
- feat(ui): add storage details, persistent expand states, symbol details by @emberk in https://github.com/questdb/ui/pull/409
- @emrberk made their first contribution in https://github.com/questdb/ui/pull/407
Full Changelog: https://github.com/questdb/questdb/compare/8.2.3...8.3.0
8.3.0
8.3.0 moves Materialized Views
into an advanced beta
. Thanks to all of you have tried the beta
and helped us iron out the remaining creases!
This release also brings significant ingestion performance improvements, particularly for small transactions and for batched PG Wire inserts. Not to mention a variety of bug fixes and safety enhancements to improve overall user experience.
But let's not forget about querying data! Check out how your ASOF JOIN
queries are doing! We have released dramatic performance improvements for ASOF JOIN
s that include interval scans and/or post-join filters. Benching against larger datasets has shown 100-1000x speedups for some queries.
For any questions or feedback, please join us on Slack or on Discourse!
See also our prettier release notes page!
-
Materialized Views
will now be enabled by default. If you do not wish to use them, you can disable them by settingcairo.mat.view.enabled=false
. -
Designated timestamp columns can no longer hold values beyond the Year 9999. We found that these values were generally produced by mistaken arithmetic. This prevents undroppable partition issues, and also reduces the chances of a configured
TTL
dropping your data. -
Some
IPv4
built-in functions were removed. You may need to introduce explicit casts in SQL queries that relied on implicit conversions betweenipv4
and other database types. This removes some ambiguity that was causing issues with queries unrelated toipv4
. -
Converting
char
to numeric values now aligns with PostgreSQL behaviour, whether implicitly or explicitly casted. -
SAMPLE BY
will now correctly handle a variety of DST-related timestamp grouping issues.SAMPLE BY
queries that use DST shifts are more likely to be executeed in parallel, too. These changes mean your result set might look different to before - but should be a consistent, rational output. -
FLOAT
andDOUBLE
types, when output to JSON or web console, will now have different precision. Previously, this was limited artificially. Now, it will print as many digits as it can. If you rely on the old output for any integration testing, you may need to upgrade your tests!
- Materialized Views are now in an advanced
BETA
.- Views will be correctly invalidated when the base table is dropped.
- Syntax errors in materialized view definitions should report the correct error position.
PARTITION BY
and parentheses()
are now optional.- Full mat view refreshes should no longer trigger occassional OOM errors.
- Still to come: a mat view write-performance enhancement, which is also a pre-step to supporting time-range
DELETE
s!
ASOF JOIN
queries that include filters over large datasets will now run 100-1000x faster than before!SYMBOL
columns can now have their capacity changed in-place, usingALTER TABLE table ALTER COLUMN column SYMBOL CAPACITY 4096
!- Ingestion of small batches has been sped by up to 100x!
- Ingestion via PG Wire batched inserts is faster and more memory efficient.
- feat(core): speed up WAL small transaction apply 100x by @ideoma in https://github.com/questdb/questdb/pull/5347
- fix(core): mat view is not invalidated when base table is dropped by @glasstiger in https://github.com/questdb/questdb/pull/5486
- fix(core): make partition drop atomic by @ideoma in https://github.com/questdb/questdb/pull/5515
- fix(pgwire): fix handling of sparse bind variables by @bluestreak01 in https://github.com/questdb/questdb/pull/5514
- fix(core): prevent inserting designated timestamp beyond year 9999, this would create invalid partition name by @mtopolnik in https://github.com/questdb/questdb/pull/5478
- fix(sql): support casting and aliasing timestamp column in materialized view by @eugenels in https://github.com/questdb/questdb/pull/5485
- fix(pgwire): possible unhandled error (double-close) in case of
INSERT
failure by @bluestreak01 in https://github.com/questdb/questdb/pull/5523 - fix(sql): crash when GROUP BY key includes timestamp by @jerrinot in https://github.com/questdb/questdb/pull/5527
- perf(sql): speed-up of simple projections by @jerrinot in https://github.com/questdb/questdb/pull/5529
- feat(core): accept EntraID's cookie expiry timestamp format by @glasstiger in https://github.com/questdb/questdb/pull/5470
- feat(sql): change column type SQL to support changing symbol column capacity by @ideoma in https://github.com/questdb/questdb/pull/5497
- chore(core): merge identical mem.getDirectVarcharA/B by @mtopolnik in https://github.com/questdb/questdb/pull/5542
- fix(ilp): disable Nagle's algorithm in HttpClient (set TCP_NODELAY flag) by @mtopolnik in https://github.com/questdb/questdb/pull/5550
- fix(sql): stuck thread on high cardinality group by query timeout by @puzpuzpuz in https://github.com/questdb/questdb/pull/5539
- fix(http): unhandled NullPointerException on SQL query error by @puzpuzpuz in https://github.com/questdb/questdb/pull/5548
- fix(core): fix issue with missing WAL segment directory during replication by @eugenels in https://github.com/questdb/questdb/pull/5538
- fix(sql): make the function's argument overload rules consistent with functions' implementation by @kafka1991 in https://github.com/questdb/questdb/pull/5528
- fix(core): fix critical error message in writing data with deduplication and a possible crash on writing same timestamp lines by @ideoma in https://github.com/questdb/questdb/pull/5547
- fix(sql): improve error handling for malformed SQL queries by @kafka1991 in https://github.com/questdb/questdb/pull/5572
- fix(sql): breaking change 💥 - remove some ipv4 operator functions. by @kafka1991 in https://github.com/questdb/questdb/pull/5566
- fix(core): fix table suspended on concurrent ALTER and RENAME operations by @ideoma in https://github.com/questdb/questdb/pull/5563
- fix(core): fix
cannot invoke "io.questdb.network.Epoll.close()"
error by @eugenels in https://github.com/questdb/questdb/pull/5573 - perf(sql): breaking change 💥 - parallel SAMPLE BY with time zone execution by @puzpuzpuz in https://github.com/questdb/questdb/pull/5493
- fix(sql): accept
long256
values via hex-encoded string in ILP by @nwoolmer in https://github.com/questdb/questdb/pull/5579 - fix(http): breaking change 💥 - fix incorrect
FLOAT
type scale in JSON response by @bluestreak01 in https://github.com/questdb/questdb/pull/5578 - fix(sql): spurious cancelled by user errors returned by queries executed in parallel by @puzpuzpuz in https://github.com/questdb/questdb/pull/5582
- perf(pgwire): improve performance of batch inserts via PostgreSQL driver by @bluestreak01 in https://github.com/questdb/questdb/pull/5564
- chore(core): ensure mat view logging cannot stall by @bluestreak01 in https://github.com/questdb/questdb/pull/5587
- perf(sql): expanded fast-path support for non-keyed ASOF JOINs by @jerrinot in https://github.com/questdb/questdb/pull/5553
- chore(sql): enable materialized views by default by @puzpuzpuz in https://github.com/questdb/questdb/pull/5460
- fix(sql): fix
show create table
union query issue. by @kafka1991 in https://github.com/questdb/questdb/pull/5577 - fix(ui): show JSON parsing error in case of an invalid query result by @emrberk in https://github.com/questdb/ui/pull/411
- fix(ui): fix incorrect unit normalisation for wal row throughput by @emrberk in https://github.com/questdb/ui/pull/414
- fix(ui): don't use navigator.clipboard in insecure context by @emrberk in https://github.com/questdb/ui/pull/417
- fix(ui): workaround for broken safari copy schema mechanism by @emberk in https://github.com/questdb/ui/pull/418
- feat(ui): add storage details, persistent expand states, symbol details by @emberk in https://github.com/questdb/ui/pull/409
- @emrberk made their first contribution in https://github.com/questdb/ui/pull/407
Full Changelog: https://github.com/questdb/questdb/compare/8.2.3...8.3.0
8.2.3
- Materialized views in BETA
- Relaxed GLIBC requirement (2.28 aarch64 and 2.17 amd64) to allow QuestDB run on older Linux distros
- new
dense_rank()
window function - new
approx_median()
function - Performance optimisation 10-30x for
value in (select column...
andselect distinct
SQLs
- fix(core): relax minimal required glibc version to 2.17 on amd64 by @jerrinot in https://github.com/questdb/questdb/pull/5332
- fix(sql): spurious query cancellation on high server load by @puzpuzpuz in https://github.com/questdb/questdb/pull/5342
- fix(http): memory leak when querying tables with changing metadata by @puzpuzpuz in https://github.com/questdb/questdb/pull/5353
- fix(core): edge-case memory leak during disk failure fixed by @jerrinot in https://github.com/questdb/questdb/pull/5349
- fix(http): fix connection leak under memory pressure by @ideoma in https://github.com/questdb/questdb/pull/5355
- fix(sql): fix UnsupportedOperationException thrown when sorting an IPv4 column by @nwoolmer in https://github.com/questdb/questdb/pull/5365
- fix(sql):
SHOW CREATE TABLE
provides invalid ddl when table is not partitioned by @nwoolmer in https://github.com/questdb/questdb/pull/5361 - feat(SQL): refactor
rank()
windowFunction and introducedense_rank()
windowFunction by @kafka1991 in https://github.com/questdb/questdb/pull/5334 - fix(core): relax minimal required glibc version to 2.28 on aarch64 by @jerrinot in https://github.com/questdb/questdb/pull/5340
- fix(core): fix occasional config parsing error when the context path is set per service by @glasstiger in https://github.com/questdb/questdb/pull/5378
- fix(sql): NullPointerException in invalid sample by query by @puzpuzpuz in https://github.com/questdb/questdb/pull/5354
- fix(core): fix updates failing with table busy when non-WAL table is created from ILP by @ideoma in https://github.com/questdb/questdb/pull/5383
- fix(core): fix column name case sensitivity in alter column SQL by @ideoma in https://github.com/questdb/questdb/pull/5395
- fix(pgwire): fix cursor handling for r2dbc-postgresql compatibility by @jerrinot in https://github.com/questdb/questdb/pull/5396
- fix(pgwire): compatibility with PHP PDO client by @jerrinot in https://github.com/questdb/questdb/pull/5402
- feat(core): materialized views by @glasstiger in https://github.com/questdb/questdb/pull/4937
- fix(core): fix startup delay on instances with lots of data by @ideoma in https://github.com/questdb/questdb/pull/5399
- fix(sql): prevent stale metadata after table DROP and (re-)CREATE by @jerrinot in https://github.com/questdb/questdb/pull/5418
- fix(sql): fix issue comparing symbols and timestamps when symbols were not constant by @nwoolmer in https://github.com/questdb/questdb/pull/5419
- fix(sql): breaking change 💥 - unsigned UUID and Long256 sorting by @jerrinot in https://github.com/questdb/questdb/pull/5429
- fix(pgwire): fix bind variable values being ignored for
LIMIT
clause by @bluestreak01 in https://github.com/questdb/questdb/pull/5377 - fix(sql): ordering by alphanumeric columns that start with a number by @nwoolmer in https://github.com/questdb/questdb/pull/5408
- fix(sql): null values returned from index-based non-null filter in backward-scan query by @puzpuzpuz in https://github.com/questdb/questdb/pull/5432
- fix(sql): missing null symbol value in query with not in symbol filter by @puzpuzpuz in https://github.com/questdb/questdb/pull/5431
- fix(sql): occasional internal error after TRUNCATE by @jerrinot in https://github.com/questdb/questdb/pull/5436
- fix(core): fix checkpoint restore deleting a referenced directory by @ideoma in https://github.com/questdb/questdb/pull/5443
- fix(sql): cannot order by columns with purely numeric names by @nwoolmer in https://github.com/questdb/questdb/pull/5435
- fix(sql): fix memory leaks when parsing sub-queries in timestamp filter by @puzpuzpuz in https://github.com/questdb/questdb/pull/5450
- feat(sql): add
approx_median()
function by @nwoolmer in https://github.com/questdb/questdb/pull/5449 - fix(sql): fix wrong
sample by
result for timestamps before 1970 by @kafka1991 in https://github.com/questdb/questdb/pull/5412 - feat(sql): add INTEGER alias for INT for compatibility with third party tools by @AsteriosPanoras in https://github.com/questdb/questdb/pull/5274
- fix(core): fix update table busy error when table is created concurrently with update query by @ideoma in https://github.com/questdb/questdb/pull/5446
- fix(core): fix VACUUM table to clean unused symbol index files by @ideoma in https://github.com/questdb/questdb/pull/5264
- fix(sql): fix inefficient execution of symbol-in-cursor queries by @bluestreak01 in https://github.com/questdb/questdb/pull/5445
- fix(sql): Function args in
GreatestNumericFunction
andLeastNumericFunction
should be deep-cloned by @kafka1991 in https://github.com/questdb/questdb/pull/5480 - fix(core): fix rare ILP commit exception when writing large string values by @ideoma in https://github.com/questdb/questdb/pull/5471
- @AsteriosPanoras made their first contribution in https://github.com/questdb/questdb/pull/5274
Full Changelog: https://github.com/questdb/questdb/compare/8.2.2...8.2.3
8.2.2
Our first release of 2025! 🎉
- Read our release blog for a high-level feature summary
- Checkout our release notes page or the items below for PR details
- Join us in Slack or our Discourse community for any feedback or questions
- fix(pgwire): fix error message resend loop during failed TLS connection initiation by @eugenels in https://github.com/questdb/questdb/pull/5219
- feat(ilp): introduce config property to disable logging problematic ILP messages by @puzpuzpuz in https://github.com/questdb/questdb/pull/5223
- fix(sql): fix server error when querying SAMPLE BY with FILL by @ideoma in https://github.com/questdb/questdb/pull/5224
- fix(sql): fix rare NullPointerException thrown when executing parallel filter query by @nwoolmer in https://github.com/questdb/questdb/pull/5221
- feat(sql): add
SHOW CREATE TABLE table_name
to get a table DDL by @nwoolmer in https://github.com/questdb/questdb/pull/5204 - fix(pgwire): fix query cache hit logging for prepared statements by @kafka1991 in https://github.com/questdb/questdb/pull/5192
- fix(core): fix bug when log rolling deletes recent instead of old files from disk by @ideoma in https://github.com/questdb/questdb/pull/5229
- feat(sql): less/greater correlated subqueries support for timestamp column by @puzpuzpuz in https://github.com/questdb/questdb/pull/5226
- fix(core): fix stale table suspended flag not cleared after auto resume on restart by @ideoma in https://github.com/questdb/questdb/pull/5026
- fix(sql): support filtering and sampling dot-prefixed tables by @nwoolmer in https://github.com/questdb/questdb/pull/5260
- fix(pgwire): error when using in('foo', 'bar') predicate by @jerrinot in https://github.com/questdb/questdb/pull/5222
- fix(sql): wrong var-size results returned by some read_parquet() and join queries by @puzpuzpuz in https://github.com/questdb/questdb/pull/5236
- fix(sql): fix rewrite
sample by
togroup by
same column names' bug. by @kafka1991 in https://github.com/questdb/questdb/pull/5113 - fix(sql): allow UNION between IPv4 and VARCHAR/STRING columns by @jerrinot in https://github.com/questdb/questdb/pull/5246
- feat(core): add configurable timezone for logger by @nwoolmer in https://github.com/questdb/questdb/pull/5231
- feat(pgwire): reloadable buffer size and connection limit configuration properties by @puzpuzpuz in https://github.com/questdb/questdb/pull/5183
- fix(core): fix symbol capacity displayed wrong after restart in show columns queries by @ideoma in https://github.com/questdb/questdb/pull/5242
- fix(sql): fix rewriteOrderBy issue case when orderBy column is not in projection. by @kafka1991 in https://github.com/questdb/questdb/pull/5271
- fix(pgwire): byte column binding issue fix by @jerrinot in https://github.com/questdb/questdb/pull/5253
- fix(core): bug in network services where service may not recover from connection limit hit by @bluestreak01 in https://github.com/questdb/questdb/pull/5276
- fix(core): ignore extra spaces in rolling logger config by @glasstiger in https://github.com/questdb/questdb/pull/5282
- fix(core): fix rare crash after disk full error by @ideoma in https://github.com/questdb/questdb/pull/5269
- feat(sql): add timezone-aware variant of dateadd by @abant07 in https://github.com/questdb/questdb/pull/5209
- fix(core): improve storage error handling to avoid resource leaks by @ideoma in https://github.com/questdb/questdb/pull/5288
- fix(sql): fix
max txn-inflight
error and log SQLs that leak resources by @bluestreak01 in https://github.com/questdb/questdb/pull/5277 - feat(sql): alter table add column [if not exists] by @irufus in https://github.com/questdb/questdb/pull/5080
- feat(sql): add
DECLARE
keyword to support variable bindings by @nwoolmer in https://github.com/questdb/questdb/pull/5207 - fix(pgwire): fix reader/txn leak under edge case conditions by @bluestreak01 in https://github.com/questdb/questdb/pull/5296
- fix(core): fix table type conversion leading to table drop if db restarts midway by @ideoma in https://github.com/questdb/questdb/pull/5295
- feat(sql): add support for the first_not_null_value(D) window function by @kafka1991 in https://github.com/questdb/questdb/pull/5191
- fix(http): fix bad error message to Web Console when SQL times out by @bluestreak01 in https://github.com/questdb/questdb/pull/5292
- perf(sql): speed up execution of window functions and joins on Windows platform by @bluestreak01 in https://github.com/questdb/questdb/pull/5300
- feat(core): table data TTL by @bluestreak01 in https://github.com/questdb/questdb/pull/5234
- fix(core): fix stuck sys.telemetry_wal by @ideoma in https://github.com/questdb/questdb/pull/5303
- fix(core): handle errors on table create so that table name is not left locked by @ideoma in https://github.com/questdb/questdb/pull/5301
- feat(sql): mark reloadable properties in show parameters SQL by @puzpuzpuz in https://github.com/questdb/questdb/pull/5312
- fix(core): fix resource leak on query errors by @ideoma in https://github.com/questdb/questdb/pull/5314
- fix(sql): fix errors when querying Window functions with non matching order with outer ORDER BY by @kafka1991 in https://github.com/questdb/questdb/pull/5220
- feat(sql): multi-threaded read_parquet() execution by @puzpuzpuz in https://github.com/questdb/questdb/pull/5256
- chore(core): add stack traces to WAL apply error logs by @puzpuzpuz in https://github.com/questdb/questdb/pull/5287
- fix(core): fix column conversion error leading to file descriptor leaks by @ideoma in https://github.com/questdb/questdb/pull/5321
- feat(sql): introduce last_value(D), last_not_null_value(D), lag(D) and lead(D) window function by @kafka1991 in https://github.com/questdb/questdb/pull/5255
- fix(sql): fix the missing of ORDER BY position's resolve in the JOIN-UNION QueryModel. by @kafka1991 in https://github.com/questdb/questdb/pull/5273
- fix(sql): fix errors for certain queries that use the window function on join with select same columns by @kafka1991 in https://github.com/questdb/questdb/pull/5320
- fix(core): fix memory leak when handing file open error by @ideoma in https://github.com/questdb/questdb/pull/5323
- fix(sql): fix PGWire
char
type mapping and binary protocol issues withboolean
type by @jerrinot in https://github.com/questdb/questdb/pull/5285 - feat(core): http query and ilp connection soft limits by @glasstiger in https://github.com/questdb/questdb/pull/5278
- feat(core): configurable context path for HTTP endpoint by @glasstiger in https://github.com/questdb/questdb/pull/5297
- fix(sql): fix NPE in
sample by
with value fills by @bluestreak01 in https://github.com/questdb/questdb/pull/5324 - feat(sql): sql parser support for 'union distinct' and 'foo is [not] true/false' by @jerrinot in https://github.com/questdb/questdb/pull/5318
- feat(sql): SQL query tracing for analysis by @bluestreak01 in https://github.com/questdb/questdb/pull/5315
- feat(ui): new tab and system monitoring widgets by @insmac in https://github.com/questdb/ui/pull/352
- fix(ui): case insensitive auto-complete by @insmac in https://github.com/questdb/ui/pull/366
- fix(ui): kick user out if access token expired and there is no refresh token by @glasstiger in https://github.com/questdb/ui/pull/373
- @abant07 made their first contribution in https://github.com/questdb/questdb/pull/5209
- @irufus made their first contribution in https://github.com/questdb/questdb/pull/5080
Full Changelog: https://github.com/questdb/questdb/compare/8.2.1...8.2.2
8.2.1
Winter is coming... And so are more features and improvements within 8.2.1.
This release follows a restive holiday weekend and the successful deployment of 8.2.0. Our prior release shipped our re-constructed PostgreSQL server implementation. After seeing the initial usage patterns, we've rolled out a series of stability fixes to smooth the overall journey. Those consuming PGWire, within tools like R Studio and PowerBI, will find a more seamless experience.
And, as usual, a series of fixes and performance improvements and general optimizations.
- The
dateadd(AIN)
function will now error when provided with an invalidperiod
orn
(stride) value, if they are constants.- Use the errors to reconstruct the function syntax as appropriate.
- PowerBI integration now uses PostgreSQL type names in
information_schema.columns()
.- Please update to these type names if you've applied an alternative.
- Support for ID token in Auth ui/#355
- News Image zoom, to better see all the cool new stuff :) ui/#350
- Highlight integer numbers that include
_
(underscore) separator ui/#353 - Handle and display error received while scrolling the grid ui/#348
- Use new
information_schema.questdb_columns()
instead ofinformation_schema.columns()
ui/#359
- New
min(D)
andmax(D)
window function.- We've also overhauled the window function docs, for better clarity and with more examples.
- Reduced CPU idle load for improved overall efficiency.
- Improved
length(varchar)
function performance.
- Fixed an issue when purging dropped tables that previously led to critical failures.
- Fixed issue where WAL tables would be suspended when a table update was followed by a rename.
- Fixed error reporting in the scenario where a 'drop table if exists' SQL command does not find the table.
- Fixed incorrect error reporting to PostgreSQL drivers:
- Prepared statements that might fail at runtime will no longer contain duplicate error messages
- SQL compilation errors will not be reported as NPE
- Modified
INSERT AS SELECT
will correctly return the number of rows inserted.
- perf(core): reduce CPU idle load by @ideoma in https://github.com/questdb/questdb/pull/5190
- perf(sql): performance improvement in length(varchar) function by @jerrinot in https://github.com/questdb/questdb/pull/5188
- fix(core): fix purging of dropped tables not to error out as critical failures by @ideoma in https://github.com/questdb/questdb/pull/5172
- fix(sql): breaking change 💥 -
dateadd(AIN)
will now error if provided invalid constant period or stride by @nwoolmer in https://github.com/questdb/questdb/pull/5166 - fix(pgwire): fix incorrect error reporting to PostgresSQL drivers by @bluestreak01 in https://github.com/questdb/questdb/pull/5189
- feat(sql): add support for the min(D) and max(D) window functions by @kafka1991 in https://github.com/questdb/questdb/pull/5173
- fix(sql): fix error returned that table does not exist on drop table if exists SQL by @ideoma in https://github.com/questdb/questdb/pull/5197
- fix(core): fix WAL table suspended when update to the table followed by table rename by @ideoma in https://github.com/questdb/questdb/pull/5200
- fix(sql): fix PowerBI integration, but breaking change 💥 - use PostgreSQL type names in information_schema.columns() by @jerrinot in https://github.com/questdb/questdb/pull/5206
- fix(pgwire):
INSERT AS SELECT
to return the number of rows inserted by @glasstiger in https://github.com/questdb/questdb/pull/5007
Full Changelog: https://github.com/questdb/questdb/compare/8.2.0...8.2.1
8.2.0
This release brings the PostgresSQL server rewrite to comply with the wire protocol rigorously. As a result, we now support PowerBI and R to name a couple of tools. There will be more to come!
- speed up small transactions via PGwire by ~10x, added latency control to the background job, which improves data visibility
- New SQL functions:
count()
window function,md5
,sha1
,sha256
, andregr_intercept
- Query performance boost for SQL Window Functions.
- The healthcheck endpoint is now more responsive, which improves server stability
- More error messages returned to HTTP client rather than being just logged
QuestDB Enterprise new features:
- Microsoft EntraID compatibility
- Improved support for Pingfederate
- fix(pgwire): fix a spurios errors after table schema change by @jerrinot in https://github.com/questdb/questdb/pull/5099
- fix(sql): cap
string_agg()
memory use to the "strFunctionMaxBufferLength" value by @bluestreak01 in https://github.com/questdb/questdb/pull/5106 - feat(http): make healthcheck endpoint responsive on high CPU load by @ideoma in https://github.com/questdb/questdb/pull/5108
- fix(sql): fix incorrect error message out of
table_storage
function when selecting non-existing column by @bluestreak01 in https://github.com/questdb/questdb/pull/5109 - fix(sql): BREAKING 💥 - rename
writerLagTxnCount
tobufferedTxnSize
in wal_tables() to reduce user confusion by @vss96 in https://github.com/questdb/questdb/pull/5001 - perf(core): replace unconditional txn sync with a conditional one. 10x improvement of ingress perf for small transactions by @bluestreak01 in https://github.com/questdb/questdb/pull/5115
- perf(core): optimize StringSink buffer reuse - garbage elimination by @jerrinot in https://github.com/questdb/questdb/pull/5127
- feat(sql): introduce latency configuration to ensure small batch commit visibility is upheld by @bluestreak01 in https://github.com/questdb/questdb/pull/5118
- fix(core): fix http client handling of cookies by @bluestreak01 in https://github.com/questdb/questdb/pull/5119
- feat(sql): add regr_intercept() SQL function by @vss96 in https://github.com/questdb/questdb/pull/5071
- fix(ilp): Java ILP client supports timestamps up to 9999-12-31 23:59:59.999999 by @jerrinot in https://github.com/questdb/questdb/pull/5134
- fix(http): send error to http client instead of closing connection by @glasstiger in https://github.com/questdb/questdb/pull/5078
- perf(sql): use faster hash table in window functions by @puzpuzpuz in https://github.com/questdb/questdb/pull/5135
- fix(sql): fix non-reporting of error for SQLs with multiple
where
clauses by @LinuxMercedes in https://github.com/questdb/questdb/pull/5082 - feat(sql): support for
_
in SQL integer constants and human-friendly configuration values for time intervals inserver.conf
by @bluestreak01 in https://github.com/questdb/questdb/pull/5128 - perf(sql): speed up negative limit queries with a wildcard by @nwoolmer in https://github.com/questdb/questdb/pull/5139
- fix(core): fix drop partition SQL not removing the expected partition data and in some rare circumstances leading to a data loss by @mtopolnik in https://github.com/questdb/questdb/pull/5132
- fix(core): fix table disappear after restart if created with the naming collisions by @ideoma in https://github.com/questdb/questdb/pull/5144
- fix(sql): cross join queries not cancelling when circuit breaker is invoked by @nwoolmer in https://github.com/questdb/questdb/pull/5161
- feat(sql): add FORCE DROP partition SQL syntax, useful to unblock suspended WAL tables by @ideoma in https://github.com/questdb/questdb/pull/5140
- fix(core): fix metadata queries returning stale data in tables() and table_columns() functions after table drop concurrent with column add by @ideoma in https://github.com/questdb/questdb/pull/5168
- fix(sql): fix comparison error of
rowsLow
andRowsHigh
in window function range frame. by @kafka1991 in https://github.com/questdb/questdb/pull/5170 - feat(sql): Add common hash functions such as md5, sha1 and sha256 by @mliezun in https://github.com/questdb/questdb/pull/5156
- feat(pgwire): server support for pipelining in PGWire protocol by @bluestreak01 in https://github.com/questdb/questdb/pull/4975
- perf(sql): improve performance of queries with negative limits and existing order by clauses by @nwoolmer in https://github.com/questdb/questdb/pull/5148
- feat(sql): add count(*), count(D), count(Ø), count(K) window function. by @kafka1991 in https://github.com/questdb/questdb/pull/5153
- fix(sql): correctly escape double quotes when exporting CSVs by @nwoolmer in https://github.com/questdb/questdb/pull/5178
- perf(sql): introduce fast path for ordered and limited queries over single long column by @puzpuzpuz in https://github.com/questdb/questdb/pull/5152
Ent:
feat(core): support for decoding groups from ID token feat(core): replace admin-only checks with permissions fix(core): fix for not being able to login with other users if built-in admin is disabled feat(core): config switch to disable ILP over TCP authentication
- @imalasong made their first contribution in https://github.com/questdb/questdb/pull/4967
- @LinuxMercedes made their first contribution in https://github.com/questdb/questdb/pull/5082
- @kafka1991 made their first contribution in https://github.com/questdb/questdb/pull/5170
- @mliezun made their first contribution in https://github.com/questdb/questdb/pull/5156
Full Changelog: https://github.com/questdb/questdb/compare/8.1.4...8.2.0
8.1.4
It's spooky season. 🎃
What scares us the most? Poor performance. 😱
And just behind that, bugs and unintuitive UIs. Aaaahhhh!!
This release brings light to all of the aforementioned fears, as we continue with our seasonal theme of balance.
Last patch, we introduced tabs to the Web Console experience. With tabs, navigating and work flows are easier and cleaner.
The polish continues in 8.1.4
and includes many small, tidy incremental improvements such as:
- More prominent error highlighting
- Prettier formatting when errors are generated by larger queries
- Revamped the look and feel of the table list panel — gone is the pop-up menu
- Once executed via shortcut, such as
F9
orCTL
+Enter
, hitting the same shortcut will no longer cancel running SQL - Indicates
Running..
. when a query is running (... so you'd better go catch it!) - While
Running..
. the "play" button is replaced with "stop" button - Removed
=
as word delimiter, so that expressions like==
can be highlighted as errors
And more! Download, upgrade or checkout our live demo to see them.
We've introduced the regr_slope(y, x)
SQL function, which calculates the slope of the linear regression line determined by the dependent variable y
and independent variable x
. One might use such a function in statistical analysis, trend identification, and predictive modelling:
SELECT regr_slope(sales, time) FROM revenue_data;
This query computes the slope of sales over time. Great for trend spotting.
The DISTINCT
keyword is now available within aggregate functions to operate on unique values.
Counting unique values:
SELECT count(DISTINCT user_id) FROM events;
Aggregating unique strings:
SELECT string_agg(DISTINCT city, ', ') FROM customers;
This simplifies queries where you need to work with distinct entries. We all appreciate more concise and expressive SQL.
-
Suped up many statistical functions with parallelized execution. Functions like
var_samp()
,var_pop()
,stddev_samp()
,stddev_pop()
,covar_samp()
,covar_pop()
, andcorr()
are now up to 10× faster. -
Reduced memory usage during paralleled aggregate queries
-
Addressed a disk space leak issue when upserting with deduplication
-
Resolved phantom errors in
SELECT
queries caused by concurrent partition squashing -
Fixed inconsistencies in the interaction between the Web Console and the static metadata cache
-
Fixed issues causing unexpected timeouts and error messages in parallel query execution
-
Resolved an infinite loop issue that could occur on errors in parallel filter and
GROUP BY
queries - as fun as it was... -
Addressed a potential transaction leak in table reader/writer initialization on ZFS.
-
Fixed a rare failure to restore from a checkpoint, triggered by an indexed column being created while a checkpoint is in progress.
-
Unified macOS runtime requirements to macOS 13 for build consistency.
-
Fixed checkpoint backward compatibility with snapshot semantics.
-
Fixed a memory leak with pipelined
UPDATE
s in the PostgreSQL Wire Protocol.
- fix(build): Unify MacOS runtime requirements to MacOS 13 by @jerrinot in https://github.com/questdb/questdb/pull/5035
- perf(sql): reduce memory footprint of parallel aggregate functions by @puzpuzpuz in https://github.com/questdb/questdb/pull/5046
- fix(sql): fix unexpected timeouts, error messages in parallel query execution by @glasstiger in https://github.com/questdb/questdb/pull/5039
- fix(core): fix disk space leak on upserting with dedup by @ideoma in https://github.com/questdb/questdb/pull/5048
- feat(http): signal empty query as a notice, not an error by @mtopolnik in https://github.com/questdb/questdb/pull/5031
- fix(sql): infinite loop on error in parallel filter and group by queries by @puzpuzpuz in https://github.com/questdb/questdb/pull/5055
- feat(sql): breaking change 💥 - support for count(distinct col) and string_agg(distinct col) by @jerrinot in https://github.com/questdb/questdb/pull/5045
- fix(core): fix phantom select query errors caused by concurrent partition squashing by @ideoma in https://github.com/questdb/questdb/pull/5058
- fix(sql): resolve inconsistencies in interaction between web console and static metadata cache by @nwoolmer in https://github.com/questdb/questdb/pull/5043
- feat(sql): add
regr_slope()
SQL function by @vss96 in https://github.com/questdb/questdb/pull/5021 - fix(http): improved error handling for unsupported column types by @jerrinot in https://github.com/questdb/questdb/pull/5068
- fix(pgwire): memory leak with pipelined UPDATEs by @jerrinot in https://github.com/questdb/questdb/pull/5083
- perf(sql): parallelise sample and population variance by @nwoolmer in https://github.com/questdb/questdb/pull/5072
- perf(sql): parallelise sample and population standard deviation by @nwoolmer in https://github.com/questdb/questdb/pull/5075
- perf(sql): parallelise sample and population covariance by @nwoolmer in https://github.com/questdb/questdb/pull/5074
- fix(core): potential transaction leak in table reader/writer initialization on ZFS by @puzpuzpuz in https://github.com/questdb/questdb/pull/5086
- fix(core): fix rare failure to restore from checkpoint, triggered by indexed column being created while checkpoint in progress by @bluestreak01 in https://github.com/questdb/questdb/pull/5090
- perf(sql): parallelise correlation by @nwoolmer in https://github.com/questdb/questdb/pull/5079
- fix(core): fix checkpoint backward compatibility with snapshot semantics by @ideoma in https://github.com/questdb/questdb/pull/5091
- fix(core): fix rare crash on read binary and other var length column types by @ideoma in https://github.com/questdb/questdb/pull/5093
Full Changelog: https://github.com/questdb/questdb/compare/8.1.2...8.1.4