No. 086 eng-blog gh-rel-duckdb 75
DuckDB v1.5.4 Bugfix 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…
data-science data-strategy tech
5 min read open original ↗
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 TemporaryFileManager reported 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 WindowSelfJoinOptimizer ignore 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 ParseFormatSpecifier returns 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 RowGroupReorderer by @lnkuiper in #22884
Fix geometry stats checkpointing when no changes are detected by @Maxxen in #22882
Check for nullptr expressions 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 RowGroupReorderer by @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 StatementExecuteSchema of 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 MATCHED and source table when binding WHEN NOT MATCHED BY TARGET by @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 UNPIVOT by @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_SCANNED to 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 BaseStatistics members and zero stats_union by @krlmlr in #23202
Initialize TransactionContext::invalidation_policy and auto_rollback by @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 SelectionData destructor to silence g++-16 -Warray-bounds by @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_env is used by @Tishj in #21305
parquet: initialize ParquetReader::rows_read by @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-variegata by @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 ALL or rowsort to 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-mode and -light-mode options 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