Fix1.5.4
DuckDB v1.5.4 Bugfix Release
This release contains multiple bug fixes and stability improvements across various components including JSON handling, window functions, parquet reading, and memory management. Users should update to resolve issues discovered after the v1.5.3 release.
This is a bug fix release for various issues discovered after we released v1.5.3.
Please also refer to the announcement blog post: https://duckdb.org/2026/06/17/announcing-duckdb-154.html
What's Changed
- backport 22094 by @artjomPlaunov in #22136
- backport 21815 & 21427 by @artjomPlaunov in #22137
- remove CleanupState destructor and remove noexcept on DuckCleanupInfo… by @artjomPlaunov in #22186
- Backport revert append fix to v1.4 by @Mytherin in #22414
- Backport windows-32bit test fix to 1.4 by @staticlibs in #22639
- Fix
TemporaryFileManagerreported size to reflect live blocks by @DinosL in #22767 - Set query text on PIVOT MultiStatement sub-statements at construction by @bleskes in #22769
- Fix double free and memory leak in Arrow GeoArrow CRS serialization by @rustyconover in #21854
- Render MAP values as valid SQL in Value::ToSQLString() by @carlopi in #22815
- Remove time-out waiting for terminal background color by @Mytherin in #22838
- Fix
WindowSelfJoinOptimizerignore exception by @qsliu2017 in #22800 - fix progress bar output and crash when piping SQL by @DinosL in #22836
- Internal #9438: TopN Window Projections by @hawkfish in #22851
- Fix: check if
ParseFormatSpecifierreturns unrecognized format by @DinosL in #22850 - Issue #22791: Window Self-Join Limits by @hawkfish in #22844
- [Backport] Column-level metadata loading and serialization by @ywelsch in #22768
- Fix json_keys with wildcard paths by @feichai0017 in #22855
- Fix: JSON add list type check by @DinosL in #22862
- Use committed row count in
RowGroupReordererby @lnkuiper in #22884 - Fix geometry stats checkpointing when no changes are detected by @Maxxen in #22882
- Check for
nullptrexpressions in deserialized JSON by @lnkuiper in #22906 - Add vacuum_rebuild_indexes as an (experimental) ATTACH option by @evertlammerts in #22690
- Use non-deleted row count in
RowGroupReordererby @lnkuiper in #22911 - Validate width/scale in duckdb_create_decimal_type and duckdb_create_decimal by @mlafeldt in #22905
- Bump httpfs to fix CI by @sebastiaan-dev in #22817
- Update vortex extension by @samansmink in #22930
- Fix alias propagation when replacement scan is wrapped in SubqueryRef by @truffle-dev in #22852
- Rowgroup index append by @artjomPlaunov in #22940
- Bump Julia to v1.5.3 by @carlopi in #22804
- Make url a value, not a const ref by @NiclasHaderer in #22953
- fix(adbc): support
StatementExecuteSchemaof ADBC 1.1.0 by @eitsupi in #22965 - Fix partial column metadata reuse bug by @ywelsch in #22994
- bump avro hash for 1.4.5 by @djouallah in #22952
- Add avro and unity_catalog to extension list by @d-justen in #22948
- Fix case-insensitive column match in INSERT ... SELECT ON CONFLICT by @remsky in #22825
- Normalize db_type to lowercase on ATTACH, apply extension aliases on compare by @carlopi in #22758
- MERGE INTO: only consider target table when binding
WHEN NOT MATCHEDand source table when bindingWHEN NOT MATCHED BY TARGETby @Mytherin in #23014 - In the optimistic writer always start a new row group after merging by @Mytherin in #22997
- Merge Into: Avoid recursively binding in the ProjectionBinder by @Mytherin in #23022
- Rename emscripten action in v1.5 by @smvv in #23044
- Rename emscripten action in v1.4 by @smvv in #23045
- Fix VARIANT cast reading wrong rows under a filter by @mlafeldt in #23031
- fix(adbc): implement ADBC 1.1.0 Rich Error Metadata API by @eitsupi in #23073
- Add v1.4.5 to storage version map by @carlopi in #23081
- Merge v1.4-andium into v1.5-variegata, and add storage versions v1.4.5 and v1.5.4 by @carlopi in #23082
- Backport PR #22348 to andium by @carlopi in #23084
- Backport variegata bugfixes into andium by @carlopi in #23085
- Bump vortex in andium by @carlopi in #23091
- Bump lance in variegata by @carlopi in #23094
- Bump vortex in variegata by @carlopi in #23096
- Bump extensions to v1.4-andium by @carlopi in #23090
- v1.5-variegata: bump extensions by @carlopi in #23089
- Fix Parquet thrift byte order on windows + relax geometry stats pruning by @Maxxen in #23095
- fix(adbc): fill metadata of GetObjects by @eitsupi in #23110
- backport GetLocalFileSystem improvements to andium by @ccfelius in #23130
- Reject NULL json key by @dentiny in #23116
- Fix windows last modification timestamp by @dentiny in #23136
- Fix: ignore_errors silently accepting invalid json by @DinosL in #23137
- [v1.5] Backport external file cache fix by @dentiny in #23132
- Internal #9375: PRAGMA enum NULL by @hawkfish in #23146
- Clarify BIGNUM C API data is big endian by @mlafeldt in #23127
- Allow array type for array_to_json by @dentiny in #23129
- Fix json argument order affecting result by @DinosL in #23144
- Fix #21931: avoid trying to bind an expression that doesn't exist in
UNPIVOTby @Mytherin in #23156 - Fix RowGroup assertion by @ywelsch in #23155
- Upgrade ducklake for release by @pdet in #23182
- Update Postgres, SQLite and ODBC in 1.5 by @staticlibs in #23172
- Fix native geometry parquet stats pruning and add
OPERATOR_ROW_GROUPS_SCANNEDto parquet reader by @Maxxen in #23140 - Expose bytes to parquet variant function by @Tmonster in #23057
- Minor fixes by @DinosL in #23162
- Bump aws extension by @ccfelius in #23170
- Merge v1.4-andium into v1.5-variegata by @carlopi in #23171
- Backport to variegata some isolated fixes by @carlopi in #23175
- Fix: guard againt null row group reorder stats by @DinosL in #23189
- bump iceberg by @Tmonster in #23192
- Replace ARTConflictType::TRANSACTION with fatal exception by @artjomPlaunov in #23193
- [Dev] Fix variant shredding analysis logic discrepancy with shredded writing by @Tishj in #23194
- Initialize all
BaseStatisticsmembers and zerostats_unionby @krlmlr in #23202 - Initialize
TransactionContext::invalidation_policyandauto_rollbackby @krlmlr in #23203 - Fix selection vector use in Arrow extension callbacks by @evertlammerts in #23190
- Add hardening to many DuckDB/Parquet decompression/deserializing paths by @Tishj in #23100
- Out-of-line
SelectionDatadestructor to silence g++-16-Warray-boundsby @krlmlr in #23204 - Bump quack to 9ac6521f712812cc6f2e58815ef0a6c85c5e06e0 by @carlopi in #23178
- Fix crash when storage path is not set by @guillesd in #23174
- Zero the inlined buffer in string_t's length-only constructor by @krlmlr in #23201
- [Dev] Fix "environment variable already defined" error in sqllogictest when
test_envis used by @Tishj in #21305 - parquet: initialize
ParquetReader::rows_readby @krlmlr in #23205 - Bump quack no patches by @carlopi in #23210
- bump delta & unity for 1.5.4 by @benfleis in #23212
- Bump DuckLake by @pdet in #23226
- Bump httpfs for variegata by @carlopi in #23215
- Hopefully fix timeouts on
v1.5-variegataby @lnkuiper in #23224 - Variant fixes by @DinosL in #23195
- Fix VARIANT shredding, avoid including empty object keys by @Tishj in #23213
- Remove checked_array_iterator from fmt dep (1.5) by @staticlibs in #23238
- [Dev] Add missing
ORDER BY ALLorrowsortto merge into tests by @Tishj in #23258 - Cherry picks on variegata by @carlopi in #23262
- Bump vortex to 275ac230e1d9afd08926b6989ec2467f92fae6e3 by @carlopi in #23263
- Add explicit
-dark-modeand-light-modeoptions to the CLI, and improve terminal background color detection by @Mytherin in #23246 - Fix gzip compression write overflow by @dentiny in #23232
- Bump iceberg for v1.5.4 by @Tmonster in #23225
- Trim the system heap in the allocator flush path on jemalloc builds by @JelteF in #23253
- Backport loop in sleep_ms by @DinosL in #23245
- Fix NULL propagation for date parts of infinite dates by @DinosL in #23254
- [Dev][Parquet][VARIANT] Fix problem with re-use of cached transform data for differently shredded files by @Tishj in #23234
- bump iceberg by @Tmonster in #23277
- Fix more geom stats by @Maxxen in #23295
Full Changelog: v1.5.3...v1.5.4
bugfixstabilityjsonparquetmemory
Source: original entry ↗