Announcing DuckDB 1.5.6
TL;DR: Today we are releasing DuckDB 1.5.6 with bugfixes and performance improvements.
In this blog post, we highlight a few important fixes in DuckDB v1.5.6, the sixth patch release in DuckDB's 1.5 (Variegata) line. The release ships bugfixes, performance improvements and security patches. You can find the full release notes on GitHub.
To install the new version, please visit the installation page.
Fixes
Here are the most important fixes from the DuckDB v1.5.6 release, organized by category:
Correctness
#24240– FixLIMITpushdown through a volatile projection with anOFFSET#24239– Don't push filters on volatile groups through aggregates#24119– FixUNNESTpushdown#24399– PreserveNULLs in Top-N window elimination when theORDER BYexpression has no column references#24551– Fix Top-N window elimination for nullable ordering expressions#25831– Fix wrong results from common subplan elimination withUNION ALLarms sharing a join subtree#25714– Fix silent truncation of very long integer literals intoHUGEINT#25766– Fixmaxon Hive partition column after file pruning#24438– Fix ICUstrptimeleaking time zone state between rows#24845– FixGEOMETRYrow group pruning withNULLs and empty geometries#25728– Fix reading and writingTIME_NSvalues in Parquet#26027– Fix Parquet v2 value count mismatch forNULLs in a list that fills a page#26162– Fix ParquetVARIANTshredding forREQUIREDfields and element groups
Crashes and Internal Errors
#25103– Fix crash in Top-N withLIMIT 0#24427– Fix segfault inurl_decodewithTRY()on dictionary-encoded columns#24447– Fix failed checkpoint marker recovery#25490– Close the main WAL handle before renaming over it during WAL recovery
Generic Bugfixes
#24065– Automatically roll back failed implicitly wrapped multi-statements on all paths#25693– Fix dead node counting in ART indexes#25573– Report the real storage version when opening a DuckDB v2.0+ database file#25808– Reject invalid UTF-8 produced byprintf's%cconversion
Miscellaneous
#26102– Addenable_optimistic_writesetting#25283– Harden temporary file reads#24362– Unify C API symbol versioning for clients and extensions, stabilize all v1 APIs#25214– Always quote identifiers in error messages
Looking Ahead: DuckDB v2.0 on Windows
If you have read this far, don't miss out on a sneak peek at DuckDB v2.0.0-dev for Windows. First, extensions are now available for these clients. Second, we recently ran a benchmark to measure the performance improvement that the new clients bring, and the results blew our minds!
We used Windows 11 25H2 on a laptop with 128 GB RAM and 12 AMD Ryzen AI 300 CPU cores with simultaneous multithreading (yielding 24 threads). We used the TPC-H SF300 dataset and ran each query twice on both DuckDB v1.5.6 and v2.0.0-dev (alpha43586). For each query, we took the runtime of the second (hot) run. The total runtime for DuckDB v1.5.6 was 822 seconds, while for v2.0.0-dev it was 129 seconds. That's more than 6× faster!
This improvement is thanks to several optimizations, including a switch to the clang-cl compiler and a new allocator.
That said, please do not expect a 6× speedup to generalize to all workloads – but rest assured that you should see significant improvements.
Conclusion
This post was a short summary of the changes in v1.5.6. As usual, you can find the full release notes on GitHub. We would like to thank our contributors for providing detailed issue reports and patches. Stay tuned for future DuckDB releases, including v2.0.0 in October!