Repository navigation
Releases: duckdb/duckdb
Release list
DuckDB v2.0.0 "Cyanoptera"
This release of DuckDB is named "Cyanoptera" after Spatula Cyanoptera, a species of duck found in western North and South America.
Please also refer to the announcement blog post: https://duckdb.org/2026/10/21/announcing-duckdb-200.html
What's Changed
- Make
Identifiera class instead of using string everywhere by @Mytherin in #23161 - Move to tidy-check diff again by @Mytherin in #23196
- Step 3: Make duplicate eliminator optimizer logic work for CTE rewrite by @kryonix in #23187
- Allow
MERGE INTOin triggers by @Dtenwolde in #23179 - RETURNING support for tables with triggers by @krleonid in #23153
- Remove special formatting code for main CMakeLists.txt by @Mytherin in #23211
- Expand aggregate state export to work with lists (
StateListType) and sort keys (StateSortKey), and add aggregate state export tolist,any_value/first/last,arg_min/arg_maxby @Mytherin in #23199 - Initial implementation of
variant_array_lengthprocessing function by @sebastiaan-dev in #23167 - Add row group count to parquet RETURN_STATS by @pdet in #23218
- Unify
ProfilerPrintFormatandExplainFormat, remove special casing and move towards pluggable tree renderers by @Mytherin in #23222 - Rework
quantileto uselistinfrastructure by @Mytherin in #23228 - Add
decimal_averageaggregate function by @Dtenwolde in #23097 - Step 4: Make unnest rewriter recognize CTE-based plans by @kryonix in #23240
- Rework ordered aggregates to use the
listinfrastructure by @Mytherin in #23231 - Pluggable combine types rules by @yan-alex in #23173
- Auto generate
select.gramby @Dtenwolde in #23236 - Unify quantile
update/combinecallbacks with the list aggregate by @Mytherin in #23247 - Add
JSONBenchto the benchmark suite by @Mytherin in #23265 - Add support for static linking C-API extensions by @Maxxen in #22251
- Add
vertex_extractfunction to get coordinates out of point-geometries by @Maxxen in #23252 - [Dev] Resolve
DEFAULTs for INSERT/UPDATE/MERGE_INTO at bind-time rather than plan-time by @Tishj in #23033 - Consistent ordering for gen files in package_build by @staticlibs in #23267
- Transform type literals into unbound logical types by @d-justen in #23237
- Remove UnaryAggregateDestructor, and instead fold it into UnaryAggregate by @Mytherin in #23268
- Add comment policy for bots by @Mytherin in #23272
- Fix null sentinel for keys in dict vector (Arrow) by @evertlammerts in #22648
- Parquet: add expression stats pruning for arithmetic filters by @Damon07 in #23264
- Add
init_local_state_finalizecallback to aggregate functions which allows them to create aFunctionLocalStatethat is persisted acrossFinalizecalls, and use this to speed up ordered aggregates by @Mytherin in #23270 - fix out-of-bounds read in strict time parsing by @jmestwa-coder in #23266
- Add support for
string_aggto export its state by making separators part of the signature by @Mytherin in #23271 - Remove redundancies in join filter creation by @d-justen in #23250
- Add setting
force_update_to_del_and_insertwhich forces updates to always be converted to delete and inserts by @Mytherin in #23281 - [Variant] Implement
SetVectorTypeforShreddedVectorBufferby @Tishj in #23280 - Commits on top of PR #20859 by @lnkuiper in #23282
- Dead node counting fixes by @artjomPlaunov in #23289
- Add support for
quantile,median,madto aggregate state export by @Mytherin in #23285 - Optimize rollup / cube / grouping sets queries by folding them into CTEs to allow for cascading aggregation by @Mytherin in #23287
- Async Parquet Writes by @lnkuiper in #23283
- Step 5: Make Mark to Semi join conversion more stable by @kryonix in #23296
- Add setting: SET dialect_compatibility_mode='spark' by @yan-alex in #23251
- Remove stale PR workflow by @DinosL in #23301
- Fix flaky
AsyncFileWritertest by @lnkuiper in #23300 - [Variant] Fix crash for variant_extract on non-object shredded column by @Tishj in #23303
- Add Parquet ASYNC I/O for local files by @pdet in #23290
- Fix flaky
AsyncFileWritertest by @lnkuiper in #23309 - Simplify subquery planning for provably single-row subqueries by @lnkuiper in #23306
- Add
variant_comparatorwhich ensures variants are ordered / compared in the same manner as native DuckDB values by @Mytherin in #23307 - Add missing import / fix non-unity builds by @evertlammerts in #23308
- Pass
ParserOptionsin default macro generation by @nicholasjng in #23288 - [Dev] Refactor
MultiFileReader::GetVirtualColumnExpressionandBaseFileReader::expression_mapby @Tishj in #22928 - Allow slicing of shredded vectors, and fix issue with shredded vectors being fed into
StructVector::GetEntriesby @Mytherin in #23312 - Auto generate transform
expression.gram(Part 8) by @Dtenwolde in #23310 - Add
VariantIteratorwhich allows traversal of variant values without unshredding by @Mytherin in #23317 - Remove specialized variant comparison code by @Mytherin in #23319
- Internal #9655: Test Vector DOUBLE[3] by @hawkfish in #23320
- Add export/import callbacks for aggregates with non-standard state, and support
approx_top_k/approx_quantileby @Mytherin in #23304 - Avoid unnecessary call to ToUnifiedFormat in ColumnSegment filter by @Mytherin in #23324
- CMake: Set the extension base directory to the duckdb module dir by @nicholasjng in #23328
- Handle exceptions thrown while recovering from a failed commit by @Huey97 in #23298
- Use optional semantic values for generated transformer rules by @Dtenwolde in #23332
- [Parquet] Fix corrupted file invalidating the database by @Tishj in #23331
- Report in check_peg_parser parse errors by @fallintoplace in #22975
- Step 6: Flip the switch and have delim join as CTEs by default by @kryonix in #23333
- Add invoke scalar function by @feichai0017 in #23185
- Allow empty STRUCT types by @Maxxen in #23273
- Fix uninitialized TransactionContext::invalidation_policy and auto_rollback members by @evertlammerts in #23321
- Propagate shredded stats through
variant_comparatorby @Mytherin in #23336 - AGENTS.md: Drop in-process by @szarnyasg in #23345
- Clean-up VariantIterator API and unify it with vector iterator infrastructure by @Mytherin in #23346
- Support AFTER INSERT FOR EACH ROW triggers by @EtgarDev in #23284
- Add
shredded_vectoroption todebug_verify_vectorby @Mytherin in #23343 - Fix state export finalize with non-zero offset, and update list of skipped tests by @Mytherin in #23349
- Propagate stats in
structured type -> variantcasts by @Mytherin in #23347 - Deprecate Implicit Table-Function Identifier String Conversion by @kryonix in #23350
- Support submodules in extensions patching process by @staticlibs in #23191
- Nicer variable syntax by @Dtenwolde in #21194
- Remove
TransformEnumby @Dtenwolde in #23355 - Quote special object keys in json_each/json_tree fullkey and path by @truffle-dev in #23206
- New
debug_local_file_system_delay_mssetting and asynchronous file initialization/finalization by @lnkuiper in ...
DuckDB v1.5.6 Bugfix Release
This is a bug fix release for various issues discovered after we released v1.5.5
What's Changed
- Use relative includes in unity build sources for cache reuse by @NiclasHaderer in #23972
- bump vortex by @samansmink in #24089
- [variegata] Remove Julia client in favor of duckdb/DuckDB.jl by @evertlammerts in #24127
- [variegata] Replace the C API spec and code generation by @evertlammerts in #24131
- TopNWindowElimination Fixes by @d-justen in #24080
- Fix active query race by @NiclasHaderer in #24123
- Fix UNNEST Pushdown by @d-justen in #24119
- [Parquet][Variant] Don't produce VARIANT metadata with
sorted_stringsset by @Tishj in #23591 - Fix LIMIT pushdown through a volatile projection with an OFFSET by @DinosL in #24240
- Don't push filters on volatile groups through aggregates by @DinosL in #24239
- fix(adbc): return a dense union from ConnectionGetInfo by @eitsupi in #24196
- Backport 24038 by @artjomPlaunov in #24326
- Unify C-API symbol versioning for clients/extensions, stabilize all v1 API's by @Maxxen in #24362
- backport 24332 by @DinosL in #24427
- Fix #24363: Preserve NULLs in Top-N window elimination when ORDER BY expression has no column references by @sdk011 in #24399
- backport 24260 by @artjomPlaunov in #24447
- Fix ICU strptime leaking time zone state between rows by @NiclasHaderer in #24438
- Moved thread-local work outside the global lock in
PhysicalInsert::Combineby @sebastiaan-dev in #24516 - Bump httpfs by @mlafeldt in #24580
- bump vortex by @samansmink in #24650
- Fix 1.5 release by @smvv in #24687
- Allow duplicates in index in ReplayRowGroupData by @artjomPlaunov in #24744
- Dispatch Go nightly build by @mlafeldt in #24720
- Fix join projection map bug in TopNWindowElimination by @d-justen in #24592
- Fix Go nightly workflow dispatch by @mlafeldt in #24802
- Fix Top-N window elimination for nullable ordering expressions by @matthiasgoergens in #24551
- Backport 23964 & 24336 by @DinosL in #24791
- Fix off-by-one in union type by @Maxxen in #24843
- Fix inner join deduplication in TopNWindowElimination by @d-justen in #24586
- fix geometry row group pruning with nulls/empty (on v1.5) by @Maxxen in #24845
- Backport DuckDB 2.0 API spellings to 1.5 by @JelteF in #24852
- Reserve column_ids.size() in CollectionScanState::Initialize by @jeewonhh in #24888
- Fix pathological scan memory for NULLs trailing an overflow string (#24897) by @mdlavin in #24918
- Use absolute unity build includes on Windows to avoid MSVC MAX_PATH errors by @NiclasHaderer in #24978
- Fix mixed path separators for extension/loader in amalgamation (v1.5 backport) by @mlafeldt in #25026
- Backport #25101: Fix crash in Top-N with LIMIT 0 (#24794) by @RagamuffinCat in #25103
- Track and expose Pipeline's intra-MetaPipeline dependencies by @jeewonhh in #24494
- Bump httpfs by @DinosL in #25202
- Skip top-n window elimination when the limit exceeds the min/max n cap by @AbhinavMir in #24741
- Add v1.5.6 storage by @carlopi in #25208
- TryScanIndex fixes by @artjomPlaunov in #25209
- Backport #22678: avoid per-row DATE->TIMESTAMP casts in comparisons by @peterboncz in #25139
- Harden temp file reads by @carlopi in #25283
- Avoid deduplicating UNION twice by @ywelsch in #25261
- Backport #24878: Always quote identifiers in error messages by @JelteF in #25214
- Fixup TryFlushCachingOperators to avoid doubly emitted chunks by @carlopi in #25331
- Close the main WAL handle before renaming over it during WAL recovery by @carlopi in #25490
- [1.5] Report the real storage version when opening a v2.0+ database file by @DinosL in #25573
- Do not assert on a scan of a row group collection without committed row groups by @bleskes in #25668
- Backport dead node counting fixes to v1.5 by @artjomPlaunov in #25693
- Fix silent truncation of very long integer literals into HUGEINT by @DinosL in #25714
- Auto-rollback failed implicitly-wrapped multi-statements on all paths by @jraymakers in #24065
- Backport #25690: Fix MAX on hive partition column after file pruning by @avakili-voleon in #25766
- Bump scanners for 1.5 by @staticlibs in #25671
- Backport #23958 (Fix TIME_NS read/write with parquet) by @avakili-voleon in #25728
- Fix deprecated CLI highlighting dot commands suggesting .render_color by @DinosL in #25689
- Backport PR #25189: Reject invalid UTF8 from printf formatting by @artjomPlaunov in #25808
- Update vortex extension by @samansmink in #25791
- Backport fix for wrong results from common_subplan with UNION ALL arms sharing a join subtree (#25819) by @Kunal8954 in #25831
- Backport #25660: Use read-only transaction to bind indexes in Checkpoint by @Flogex in #25858
- Backport 22373 by @DinosL in #25844
- Internal #10791: v1.5.6 TimeZone 2026c by @hawkfish in #25745
- Keep the delete blocks of an unchanged table in use without rewriting them by @ywelsch in #25971
- Update MySQL and ODBC scanners in 1.5 by @staticlibs in #25945
- Internal #10927: v1.5.6 TimeZone 2026d by @hawkfish in #26039
- backport 25752 by @DinosL in #26027
- Bump DuckLake for v1.5.6 by @pdet in #26009
- Backport #24557: Resolve partition columns for non-pushdown table functions by @rustyconover in #25998
- Issue #25995: Streaming Window UNIONs by @hawkfish in #26104
- Bump multiple extensions by @maiadegraaf in #26072
- Backport 35ce409 to v1.5-variegata by @carlopi in #26137
- bump iceberg by @Tmonster in #25899
- Bump: ducklake by @maiadegraaf in #26151
- Backport #24194: Add
enable_optimistic_writesetting by @mbrobbel in #26102 - bump delta + unity_catalog extensions for v1.5.6 by @benfleis in #26204
- Bump lance to 291316938c4ab06dc9fec5b92820f496662ef24a by @carlopi in #26203
- Bump vortex to b86c6ab223b53b445ec4c96e74f26dcb616d9c4f by @carlopi in #26202
- [Parquet] Backport of #25891 by @Tishj in #26162
New Contributors
- @AbhinavMir made their first contribution in #24741
- @mbrobbel made their first contribution in #26102
Full Changelog: v1.5.5...v1.5.6
DuckDB v1.5.5 Bugfix Release
This is a bug fix release for various issues discovered after we released v1.5.4.
What's Changed
- backport the out-of-bounds security fixes made in #23100 by @Tishj in #23197
- Remove checked_array_iterator from fmt dep (1.4) by @carlopi in #23261
- Remove checked_array_iterator from fmt dep (1.4) by @staticlibs in #23239
- [Dev] Add LLDB scripts to help with debugging by @Tishj in #23297
- Add support for test config extending by @NiclasHaderer in #23145
- bump iceberg again by @Tmonster in #23311
- Correctly get typed value stats for fully shredded variants by @Mytherin in #23325
- bump unity to include backfill fix by @benfleis in #23326
- Add request body length to http logs by @DinosL in #23316
- Show transport errors in HTTP log by @DinosL in #23327
- Dispatch Rust nightly build by @mlafeldt in #23352
- parquet: reject DATA_PAGE_V2 pages with inconsistent compressed_page_size by @benfleis in #23279
- Fix deadlock in
TemporaryMemoryManagerby @lnkuiper in #23351 - Register
oidof dependencies in theDependencyManagerso that we can track if an object was re-created with the same name by @Mytherin in #23348 - [Dev] Fix recursion issue with
scripts/lldb/pointer_printby @Tishj in #23362 - [MultiFileReader] Prevent NULL MAP keys because of (likely missing) default value by @Tishj in #23354
- Propagate lambda bindings into
tryoperator by @Mytherin in #23375 - Bump Julia to v1.5.4 by @carlopi in #23398
- Add additional guards to
DICT_FSSTto prevent exception during compression with small block size by @sebastiaan-dev in #23341 - fix out-of-bounds read in json path ReadKey lookahead by @jmestwa-coder in #23371
- fix out-of-bounds read in string to struct cast by @jmestwa-coder in #23384
- Issue #23383: Common Aggregate CTEs by @hawkfish in #23409
- Use correct start time when verifying dependencies by @Mytherin in #23430
- Fix false RLE corruption error by @DinosL in #23458
- [v1.5] No cache if file doesn't contain version information by @dentiny in #23434
- Improve rle corruption error messages by @DinosL in #23480
- Issue #23457: Ordered FIRST_VALUE Framing by @hawkfish in #23499
- Enabled
ALPandALP_RDfor storage version v1.5.0 and up when using smaller block sizes by @sebastiaan-dev in #23483 - [v1.5] Backport PR #23444: fix eviction node memleak when external fi… by @dentiny in #23479
- [v1.5] Fix min/max aggregate stats when row groups filtered by @dentiny in #23517
- Backport #23468 and #23510 by @artjomPlaunov in #23529
- Fix arrow type extension bugs by @evertlammerts in #23534
- Issue #23500: JSON TIMESTAMP_TZ Formatting by @hawkfish in #23513
- fix out-of-bounds read in dictionary string decompression by @jmestwa-coder in #23549
- Merge v1.4 into v1.5 by @carlopi in #23560
- [ADBC] Add support for duckdb:// URI scheme in URI option by @amoeba in #21293
- Fix/capi scalar bind subquery crash by @krleonid in #23566
- [variegata] Bump extensions by @carlopi in #23562
- Fix filter combiner not pruning unsatisfiable bounds by @DinosL in #23563
- fix out-of-bounds read on empty byte array decimals by @jmestwa-coder in #23567
- [v1.5] Quickfix
ALTER TABLE ADD COLUMN IF NOT EXISTS ... DEFAULTregression by @yan-alex in #23507 - Bump version map to include v1.5.5 by @carlopi in #23629
- backport #23548 to v1.5 by @myrrc in #23587
- Issue #23641: CUME_DIST Underflow by @hawkfish in #23651
- Fixed unsafe iteration when parent is
NULLin string cast by @sebastiaan-dev in #23593 - Bump HTTPFS by @lnkuiper in #23648
- backport #23573 by @artjomPlaunov in #23672
- fix(adbc): support the ADBC Statistics API by @eitsupi in #23230
- Issue #23664: RANGE ZERO by @hawkfish in #23710
- Fix DROP COLUMN corrupting per-column metadata block bookkeeping by @ywelsch in #23714
- Include extension header in libduckdb archives by @mlafeldt in #23752
- Correctly promote
SUGGEST_NEWtoREQUIRE_NEWfor variant / geometry columns by @Mytherin in #23763 - Fix lance build on Rust 1.97: patch its Cargo.lock to ethnum 1.5.3 by @carlopi in #23770
- Bump Postgres, MySQL and SQLite in 1.5 by @staticlibs in #23780
- Fix segfault in external hash aggregate when radix bits grow after going external by @carlopi in #23757
- Add HTTPUtil::ShouldRetry(request, response) retry-classification hook by @carlopi in #23793
- Bump azure, unity_catalog extensions to v1.5-variegata HEAD by @benfleis in #23800
- Bump extensions in preparation for v1.5.5 by @carlopi in #23794
- bump iceberg by @lnkuiper in #23735
- Fix for malformed JSON when rendering via duckbox by @sebastiaan-dev in #23803
- [v1.5] Backport a few fix PRs for v1.5.5 release by @dentiny in #23804
- bound alp/alprd exception positions to vector size by @jmestwa-coder in #23778
- Fix swapped min/max for multi-row-group 128-bit DECIMAL in RETURN_STATS by @sfc-gh-okalaci in #23693
- [variegata] Bump quack to 8e715ebb by @carlopi in #23820
- backport #22198 by @artjomPlaunov in #23810
- [v1.5] Backport two more fixes by @dentiny in #23841
- [DependencyManager] Fix ALTER dependency preservation by @Tishj in #23808
- TryLookupEntry now uses default schema as fallback by @okruitho in #23790
- Fix concurrent ALTER and INSERT crash by @Tishj in #23861
- Bump Postgres extension for 1.5 by @staticlibs in #23930
- [v1.5 backport] Fix: reset empty_range in the TIMESTAMP range() table function by @wmTJc9IK0Q in #23879
- Bump extensions for v1.5.5: quack, httpfs and aws by @carlopi in #23892
- Expose destructors, so they are callable module boundaries by @carlopi in #23953
- Bump DuckLake by @pdet in #23962
- Fix OSX ci by @Tmonster in #23963
- Bump lance pin to upstream ethnum fix, drop local patch by @carlopi in #23969
- Add missing statement types to capi by @hrl20 in #23407
- Bump httpfs by @lnkuiper in #24003
Full Changelog: v1.5.4...v1.5.5
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 @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 https://github....
DuckDB v1.4.5 Bugfix Release
This is a bug fix release for various issues discovered after we released v1.4.4.
Please also refer to the announcement blog post: https://duckdb.org/2026/06/17/announcing-duckdb-145.html
What's Changed
- Internal #7212: FILL Empty Chunk by @hawkfish in #20657
- Secret Manager: Ensure secrets are created exactly once by @Mytherin in #20686
- Use FileSystem APIs in QueryProfiler::Write by @Mytherin in #20727
- Fix escape handling in AddEscapes function by @llukito in #20760
- Fixup test/extension/update_extensions_ci.test [v1.4-andium] by @carlopi in #20777
- Backport various race condition fixes to v1.4 by @Mytherin in #20804
- bump ref to azure for v1.4.4 (rebuild) by @benfleis in #20888
- Internal #7584: AsOf Simple Joins by @hawkfish in #21090
- Do not write ccache to github cache for v1.4-andium by @smvv in #21109
- Disable extension caching for v1.4 to free github cache space by @smvv in #21150
- Disable save_cache for v1.4-andium by @smvv in #21167
- Backport #19232: allow * Not similar to 'pattern' by @Dtenwolde in #21177
- backport zstd PR to 1.4 by @artjomPlaunov in #21178
- Fix unbounded row group growth for indexed tables on repeated load+insert cycles by @abramk in #21316
- Backport #21271 by @artjomPlaunov in #21326
- [lance] Add for v1.4-andium by @carlopi in #21410
- add lance for v1.4 by @samansmink in #21113
- Correctly detect overflows when decoding integers from storage by @Mytherin in #21482
- Bump Julia to
v1.4.4onv1.4-andiumby @taniabogatsch in #21589 - Fix for CSV reader buffer-boundary value read by @Mytherin in #21577
- Backport
__EMSCRIPTEN__fix by @Mytherin in #21581 - counting fix by @artjomPlaunov in #21733
- 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
- Bump httpfs to fix CI by @sebastiaan-dev in #22817
- bump avro hash for 1.4.5 by @djouallah in #22952
- Rename emscripten action in v1.4 by @smvv in #23045
- Add v1.4.5 to storage version map by @carlopi in #23081
- 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 extensions to v1.4-andium by @carlopi in #23090
- backport GetLocalFileSystem improvements to andium by @ccfelius in #23130
- backport the out-of-bounds security fixes made in #23100 by @Tishj in #23197
- Remove checked_array_iterator from fmt dep (1.4) by @carlopi in #23261
- Remove checked_array_iterator from fmt dep (1.4) by @staticlibs in #23239
Full Changelog: v1.4.4...v1.4.5
DuckDB v1.5.3 Bugfix Release
This is a bugfix release for various issues discovered after we released v1.5.2.
Please also refer to the announcement blog post: https://duckdb.org/2026/05/20/announcing-duckdb-153
What's Changed
- Use DB serialization compatibility for json_serialize_sql by @kryonix in #22004
- DuckLake Bump by @pdet in #22014
- fix: resolve current catalog in ADBC Ingest to avoid temp table shadowing by @eitsupi in #22020
- Fix TIMESTAMPFORMAT being ignored for TIMESTAMPTZ columns in copy to json by @DinosL in #21992
- Provide BWC support for join filter pushdowns by @ywelsch in #22029
- Add iceberg copy function autoload by @NiclasHaderer in #22037
- Fix DISABLE_EXTENSION_LOAD by @mlafeldt in #22019
- Fix
INSERT OR REPLACE BY NAMEregression by excluding conflict columns fromSETlist by @DinosL in #22049 - Git-ignore generated extension loader by @mlafeldt in #22056
- Fix constant struct args in lateral table in-out functions by @AlfieJones in #21827
- Avoid handling Ctrl+C during shutdown (state might be already gone) by @carlopi in #22059
- Add
DISABLE_BUILTIN_HTTPLIBoption by @carlopi in #22054 - Set
queryfield for statements inALTER TABLE ... ADD COLUMN ... DEFAULT ...workaround by @yan-alex in #22057 - Coorporative tasks might lead to busy spinning in
TaskExecutor::WorkOnTasksby @NiclasHaderer in #22092 - Row group append by @evertlammerts in #22060
- Fix empty parquet child schema by @dentiny in #22105
- Issue #22096: TopN Window Casts by @hawkfish in #22098
- Add support for reading
VARIANTusing C API by @Dtenwolde in #22065 - Bump Julia to v1.5.2 by @taniabogatsch in #22121
- fix commit iteration offset bug + relax RemoveFromIndexes assertion by @artjomPlaunov in #22094
- Internal #8812: From TIMESTAMPTZ Casts by @hawkfish in #22000
- Only build plan_serializer when building the main DuckDB library by @rustyconover in #22100
- Fix Row Group Pruner Distinct Bug by @d-justen in #22132
- Correctly skip preprocessing PIVOT MultiStatements by @yan-alex in #22141
- fix(adbc): report the table name if the table doesn't exist when appending by @eitsupi in #22146
- [v1.5 patch] Attempt to fix cache read by @dentiny in #22126
- Also execute auto-rollback on CLI ClientContext::Query() query by @yan-alex in #22159
- Fix window self join optimizer by @kryonix in #22164
- Account for ROW_GROUP_SIZE when deciding whether to append to an existing row group by @evertlammerts in #22109
- Use the latest storage version for temp storage by @Mytherin in #22169
- Fix: Add pg_catalog.pg_collation compatibility view for SQLAlchemy 2.0.45 reflection by @alonfaraj in #22160
- Fix CSV escape by @dentiny in #22176
- Fix union_by_name remap for non-nested parquet columns by @feichai0017 in #22177
- User-facing
enable_caching_operatorssetting by @lnkuiper in #22191 - Fix bignum sum Combine to correctly take over memory ownership of state by @Mytherin in #22209
- CompressedFile::Close -> calls Close on its child_handle by @benfleis in #22149
- ISSUE-22061: Fix JSON shell output: emit BOOLEAN as true/false, not strings by @herbenderbler in #22073
- [Bugfix] Reset pg_err_pos in pg_parser_init to prevent stale error position leaking by @p1p1bear in #22239
- Bump httpfs to 3139e40a by @carlopi in #22248
- Correctly use new row group when checkpointing, and avoid incorrectly re-using metadata when targeting older storage versions and row ids have changed by @Mytherin in #22253
- Fix: release ParquetReader when a file is marked SKIPPED in multi-file scan by @J-Meyers in #22261
- Fix UTC±NN00 cannot be parsed in SQL by @tianjq16 in #22244
- Defer Bloom Filter Pushdown until it's done by @lnkuiper in #22218
- [v1.5] Backport ADBC memleak fix on error path by @dentiny in #22216
- Allow package builds to choose linked extensions by @mlafeldt in #22305
- Fix UTC+HHMM time zone was parsed incorrectly by @tianjq16 in #22297
- Bump httpfs by @carlopi in #22312
- Exception format: accept string literals by @carlopi in #22314
- Skip schema analysis even if no shredding for rowgroup by @rgernhardt in #21937
- Use batch limit for table scans with filters by @Mytherin in #22315
- Also redacting bearer token for HTTP secrets by @hannes in #22323
- First initialize system, then load extensions (to peek at file to be opened) by @carlopi in #22341
- Node Handle Scoping fix by @artjomPlaunov in #22344
- Enable windows_amd64 for lance extension by @carlopi in #22367
- Internal #9003: TIMETZ Parsing Limit by @hawkfish in #22378
- Downcasting decimal fix incorrect out of range error by @Dtenwolde in #22386
- GetLocalFileSystem improvements by @carlopi in #21983
- Fix double decrement of evicted_data_per_tag in .block read-back by @krleonid in #22394
- RowGroup Operator metrics: sequentially scanned row groups + total row groups + cumulative counterparts by @artjomPlaunov in #22339
- PostgreSQL compatability: in
pg_catalog.pg_databasesimulate columns datallowconn, datistemplate by @muayyad-alsadi in #22302 - Fix eviction size metrics report by @dentiny in #22452
- Fix enable_logging() silently resetting logging_storage by @guillesd in #22475
- Avoid 3 instances of idx_t - idx_t > 0, and avoid unnecessary check on zLine by @carlopi in #22518
- Fix RESET my_global_extension_setting to actually be GLOBAL by @carlopi in #22520
- Fix BlockAllocator invalid memory access by @dentiny in #22503
- Patch httplib by making ThreadPool constructor more solid on pthread_create failures by @carlopi in #22516
- Fix duck fuzz #4430 by @dentiny in #22435
- Test runner: avoid running clean-up routine if there is no database to run it in by @Mytherin in #22540
- Fix bare numeric interval parsing at end of string on v1.5 by @M1llerF in #22534
- Fix parquet metadata cache validation by @dentiny in #22547
- ExtensionInstall: Remove use of IsHTTP to IsRemoteFile by @carlopi in #21900
- Fix variant write small decimal by @dentiny in #22544
- Move http_proxy setting to global setting, and use GetEnvVariable('HTTP_PROXY') as default by @carlopi in #22541
- Bump httpfs and remove patches by @carlopi in #22556
- Bump Postgres, MySQL and ODBC by @staticlibs in #22579
- Bump avro, azure, delta, ducklake, spatial, unity_catalog and vortex by @carlopi in #22554
- Fix variant selection vector index by @dentiny in #22573
- Fix for SIGABRT in setting size on zero-capacity vector by @ccfelius in #22571
- Fix incorrect profiling results when using
LIMITby @sebastiaan-dev in #22561 - Move Jemalloc into core by @Maxxen in #22558
- Allow json ts format variation across columns - issue 22103 by @benfleis in #22559
- Limit parallel linker jobs to avoid out-of-memory errors by @smvv in #22588
- ARTOperator::Delete return false if rowid not found in nested ART leaf by @artjomPlaunov in #22591
- Enable/disable jemalloc linking through BUILD/SKIP_EXTENSIONS by @Maxxen in https://gi...
DuckDB v1.5.2 Bugfix Release
This is a bug fix release for various issues discovered after we released v1.5.1
What's Changed
- Backport various race condition fixes to v1.4 by @Mytherin in #20804
- bump ref to azure for v1.4.4 (rebuild) by @benfleis in #20888
- Internal #7584: AsOf Simple Joins by @hawkfish in #21090
- Do not write ccache to github cache for v1.4-andium by @smvv in #21109
- Disable extension caching for v1.4 to free github cache space by @smvv in #21150
- Disable save_cache for v1.4-andium by @smvv in #21167
- Backport #19232: allow * Not similar to 'pattern' by @Dtenwolde in #21177
- backport zstd PR to 1.4 by @artjomPlaunov in #21178
- Fix unbounded row group growth for indexed tables on repeated load+insert cycles by @abramk in #21316
- Backport #21271 by @artjomPlaunov in #21326
- [lance] Add for v1.4-andium by @carlopi in #21410
- add lance for v1.4 by @samansmink in #21113
- Correctly detect overflows when decoding integers from storage by @Mytherin in #21482
- Correctly revert dictionary size when reverting string appends by @Mytherin in #21489
- Add descriptions for vortex and lance by @carlopi in #21500
- Fixup Write bytes are counted as BYTES_WRITTEN by @carlopi in #21501
- Fix memory leak when reusing PreparedStatement (#21089) by @wzharies in #21104
- Make some MultiStatements and PRAGMAs Transactional by @yan-alex in #21171
- Reduce concurrent thread count in test by @Mytherin in #21511
- Fixing integer overflow in list_resize by @hannes in #21515
- Fix #21512: correctly render empty results in .mode json by @Mytherin in #21517
- Fix parsing test path to skip by @jeewonhh in #21495
- Add setting for limiting the number of threads launched concurrently in the test runner (
max_test_threads) by @Mytherin in #21520 - Unify adding suffixes to path in
Path:: AddSuffixToPath- fix temp directory split bug by @Mytherin in #21527 - Correctly deal with negative values in
GetPosixVersionTag, and fix constantNULLstruct scans after recent fix by @Mytherin in #21549 - Fix missing extension static libs in Windows MinGW bundle by @mlafeldt in #21559
- PEG grammar fixes: Update extension and allow numeric struct keys by @Dtenwolde in #21331
- [v1.5-variegata] Fix #21514: ASOF join empty right by @Pieczasz in #21553
- Fix data path in
test/sql/copy/parquet/parquet_no_stats.testby @jeewonhh in #21561 - TopNWindowElimination Column Binding Fix by @d-justen in #21564
- lance: bump lance-duckdb to 4d9ecab by @Xuanwo in #21572
- Bump Julia to
v1.5.0by @taniabogatsch in #21588 - Bump Julia to
v1.4.4onv1.4-andiumby @taniabogatsch in #21589 - Simplify the way we determine which row groups to checkpoint during checkpoints by @Mytherin in #21574
- Fix for CSV reader buffer-boundary value read by @Mytherin in #21577
- CLI: Avoid division by zero when formatting a large result with a non-wide shell by @Mytherin in #21591
- Backport
__EMSCRIPTEN__fix by @Mytherin in #21581 - Fix missing SetSizeAndFinalize in BIGNUM Add for zero result case by @pdet in #21465
- Segfault due to unchecked malloc/realloc, proposed fix to #21593 by @wasade in #21594
- Reduce arg_min_max_n heap preallocation by @feichai0017 in #21467
- Fixed an issue where the describe statement did not work correctly in markdown output mode(ISSUE:#21579) by @ArNine in #21611
- fix unpivot serialization by @Maxxen in #21595
- Windows shell: enable VT100 processing on startup by @staticlibs in #21615
- Make PEG Parser use strict mode in CI by @Dtenwolde in #21590
- Fix #21623: flatten input chunk in TopNHeap::CheckBoundaryValues by @Mytherin in #21629
- Issue #21592: Window Self-Join Framing by @hawkfish in #21628
- Bump Julia to v1.5.1 by @taniabogatsch in #21637
- Merge v1.4-andium into v1.5-variegata by @Mytherin in #21639
- Bump storage version to
v1.5.2by @taniabogatsch in #21638 - bump delta and unity_catalog ext refs in v1.5-variegata by @benfleis in #21640
- Fix cancellation order between pipelines and tasks in CancelTasks by @carlopi in #21642
- Fix shell completion enter handling by @atulagrwl in #21552
- fix(adbc): err use after free by @gishor in #21605
- Fix some Parquet fuzzer issues by @lnkuiper in #21635
- Re-organize WAL replay slightly, and correctly deal with empty checkpoint WAL files in WAL recovery by @Mytherin in #21645
- Warn instead of error when trying to persist geometry columns with CRS in old storage format by @Maxxen in #21649
- Avoid throwing an error when failing to bind views in
duckdb_columnsby @Mytherin in #21658 - Infer timestamps with timezone in read_json_auto by @leo-altertable in #21660
- Windows: remove prefix from canonical paths by @staticlibs in #21652
- CLI: Add .help shortcuts by @carlopi in #21662
- Internal #8553: Window TopN Except by @hawkfish in #21671
- Fix issue with struct filter on missing structs by @Mytherin in #21676
- Internal #7568: ASOF SEMI Test by @hawkfish in #21683
- Fix type check in
st_crsby @Maxxen in #21688 - Disable regular updates for geometry by @Maxxen in #21641
- Fix stoi crash in Arrow format string parsing for w: and +w: types by @yharby in #21692
- Test runner: Support replacement without dollar (
{i}instead of${i}) in loop iterators by @Mytherin in #21708 - Internal #8657: IEJoin Filter Sides by @hawkfish in #21721
- Add missing test for delta byte array by @ccfelius in #21714
- Fix variant shredding consistency issue by @Tishj in #21715
- TopNWindowElimination fixes by @d-justen in #21663
- Ignore
NULL/__HIVE_DEFAULT_PARTITION__when detecting types by @lnkuiper in #21731 - fix path test warnings by @benfleis in #21711
- Allow
SET DEFAULT / DROP DEFAULTfor tables that have dependencies by @Mytherin in #21729 - Add clickbench by @c-herrewijn in #21730
- Fix prepared temp-table INSERT invalidation after DROP by @wordhardqi in #21712
- Allow join filter pushdown through integral up/down casts by @lnkuiper in #21743
- Allow join filter pushdown for NOP collations by @lnkuiper in #21742
- counting fix by @artjomPlaunov in #21733
- [Variant] Re-add the removed
variant_legacy_encodingsetting by @Tishj in #21710 - Fix update plans when deserializing if type no longer supports regular updates by @Maxxen in #21718
- Re-instantiate dependencies of tables for
ALTER TABLE ... DROP COLUMNandALTER TABLE .. SET DEFAULTby @Mytherin in #21752 - Use correct error message for name conflicts between table and views by @JelteF in #21760
- Bump spatial by @taniabogatsch in #21781
- PEG parser strict mode: followup fixes and improvements by @Dtenwolde in #21709
- Fix DELETE RETURNING for rows inserted in the same transaction by @rustyconover in #21541
- Disable bloom filter pushdown through casts by @lnkuiper in #21792...
DuckDB v1.5.1 Bugfix Release
This is a bug fix release for various issues discovered after we released v1.5.0.
Please also refer to the announcement blog post: https://duckdb.org/2026/03/23/announcing-duckdb-151
What's Changed
- [Extensions] Preserve
requireorder inInterpretedBenchmarkby @Tishj in #21214 - CLI: Make help entry uppercase by @szarnyasg in #21224
- Restore view's bind_state when binding fails by @jeewonhh in #21193
- [Regression v1.5] Fix INTERNAL Error in UnnestRewriter for deeply nested struct UNNEST by @guizmaii in #21209
- fix(storage): prevent TrimFreeBlocks from zeroing concurrently alloca… by @llersch in #21146
- Windows shell: UTF-8 mode when writing to pager by @staticlibs in #21202
- [Dev] Add internal exception for misuse of
MultiFileReadermethod by @Tishj in #21046 - Before loading libraries in TryAutoLoadExtension check AutoloadKnownExtensions Setting by @pdet in #21051
- fix: buffer overread in Arrow dictionary conversion with NULLs - fixes crash. by @rustyconover in #21083
- Avoid misleading GetRequestInfo constructor that takes endpoint + path by @carlopi in #21151
- Enable column pruning for
MATERIALIZEDCTEs by @kryonix in #21169 - Add framework to test two DuckDB versions by @Y-- in #21184
- Internal #7691: 2026a Time Zones by @hawkfish in #21204
- Fix DuckFuzz #4325 by @kryonix in #21215
- Fix decorrelation delim index bug by @kryonix in #21233
- Fix two minor shell bugs: Avoid mutating rendered strings and avoid p… by @carlopi in #21234
- Fix wrong cast in RecursiveDependentJoinPlanner by @kryonix in #21235
- Use atomic load in bloom filter look-up by @Mytherin in #21238
- Move BWC tests to nightly for now by @Mytherin in #21266
- Internal #7740: AsOf Tidy Fix by @hawkfish in #21255
- Re-add accidentally removed -jsonlines command line parameter by @Mytherin in #21263
- Switch MAIN_BRANCH_VERSIONING to False for v1.5-variegata branch by @carlopi in #21239
- Lazy call
mmapinBlockAllocatorby @lnkuiper in #21276 - Dynamically determine radix bits for external aggregation by @lnkuiper in #21274
- Avoid potential division by 0 in
PhysicalHashJoin::PrepareFinalizeby @lnkuiper in #21271 - Do not use MSYS shell for MinGW builds by @staticlibs in #21296
- add structured Path objects, update joinpath: normalize, support url/… by @benfleis in #21277
- When stress testing FORCE_ASYNC, add the relevant error messages by @carlopi in #21267
- Fix invalid JSON when casting from certain types by @Maxxen in #21280
- Fix .open of Parquet files etc. in CLI by @hannes in #21269
- Bump storage version to
v1.5.1by @taniabogatsch in #21287 - Implement line number reporting in errors for PEG parser by @Dtenwolde in #21157
- Support new v1.5 syntax for PEG grammar by @Dtenwolde in #21172
- [Fix] Memory error when transforming to
v1.0.0ART storage by @taniabogatsch in #21270 - Add missing expression traversal in
merge intobinding by @kryonix in #21283 - Add UUID to settings cache by @Mytherin in #21290
- Fix Terminal::TryGetBackgroundColor when stdin is reading from a pipe but stdout is still writing to the terminal by @Mytherin in #21288
- Fix #21248: correctly expand type count in CSV header detection by @Mytherin in #21292
- Add batch index support to parquet_metadata and friends to allow it to be executed in parallel also with order preservation by @Mytherin in #21314
- Make overriding HTTPUtil thread safe by @Mytherin in #21210
- Revert #21067 - and fix WAL corruption issue through calling
MarkBlockAsCheckpointedon WAL blocks by @Mytherin in #21285 - Fix sampling for UB in musl libc by @carlopi in #21318
- TryGetCurrentSetting: Fixup paramater passing for FileOpenerInfo by @carlopi in #21301
- Fix Row Group Reorderer Bug by @d-justen in #21282
- Windows shell: fix UTF-8 to UTF-16 conversion by @staticlibs in #21319
- Issue #21244: AsOf Unordered LIMIT by @hawkfish in #21250
- Throw error on incorrect use of
ParseExpressionListby @Dtenwolde in #21306 - Issue #20481: Prepare Window Parameters by @hawkfish in #21323
- CLI: Explicitly clean up shell state instead of letting static destructor order determine when it gets destroyed by @Mytherin in #21315
- Fixup 401bcf0: "When stress testing … by @carlopi in #21329
- CLI: Make bail on error the default in more situations by @Mytherin in #21344
- Improve estimate when first Parquet file is almost empty, and get exact cardinality count when we are using union by name by @Mytherin in #21345
- Fix infinite recursion in FileOpener::TryGetCurrentSetting by @Mytherin in #21356
- fix argument check for .multiline and .singleline by @jaywgraves in #21336
- Windows shell: remove .utf8 dot command by @staticlibs in #21343
- When writing unsupported Parquet variant types to Parquet, try to convert them to INT64 by @Mytherin in #21357
- Use cached Parquet metadata to improve cardinality estimates over Parquet files by @Mytherin in #21358
- Parquet Reader: Allow merging of prefetch column ranges for columns that do not have table filters by @Mytherin in #21373
- In the parquet reader, if we are globbing over a directory, use file sizes from the glob to estimate cardinalities instead of relying only on the first parquet file by @Mytherin in #21374
- MbedTLS: Actually throw exception by @hannes in #21365
- Well-defined environment for MinGW builds by @staticlibs in #21371
- Fix #21335: correctly add checkpoint and recovery WAL to allowed paths when launching an initial db with enable_external_access set to false by @Mytherin in #21379
- automate clangd/compile_commands.json gen via builds by @benfleis in #21361
- Parquet: Ignore optional filters when deciding whether or not to do a lazy fetch by @Mytherin in #21383
- parquet: avoid corrupting define buffers during skips by @Mikubill in #21298
- CLI: Fix .tables rendering for large database names by @Mytherin in #21389
- Fix column pruning for CTEs by @kryonix in #21275
- add test for #21271 by @artjomPlaunov in #21398
- Grab correct row group id in ValidityColumnData::UpdateWithBase by @Mytherin in #21397
- Add lance extension by @carlopi in #21406
- add lance for v1.5 by @samansmink in #21111
- Fix #21289: correctly determine render width of UTF8 string with grapheme clusters by @Mytherin in #21409
- Avoid calling PushCollation in create_sort_key by @Mytherin in #21412
- Flush remaining operators in pipeline by @DinosL in #21405
- Correctly limit auto-detection in read_json for files that don't have string columns by @Mytherin in #21411
- Fix INSERT OR REPLACE updates on non-unique indexed columns by @feichai0017 in #20962
- fix(adbc): support concurrent statements on the same connection by @eitsupi in #21415
- Fix invalid common subplan CTE reuse for issue #21372 by @feichai0017 in #21386
- Use regular pushdown path for semi/anti/left delim joins by @Mytherin in #21416
- Predicate factoring by @lnkuiper in #21418
- Bump SQLite by @staticlibs in https://github.com/duckdb/duckdb/pull...
DuckDB v1.5.0 "Variegata"
This release of DuckDB is named "Variegata" after the paradise shelduck Tadorna Variegata, also known as the paradise duck, a species of Shelduck (a group of goose-like ducks), endemic to New Zealand.
Please also refer to the announcement blog post: https://duckdb.org/2026/03/09/announcing-duckdb-150.html
What's Changed
- Optimize LAST aggregate to iterate backward within batches by @xe-nvdk
- Allow user type with schema defined to have array bounds by @Dtenwolde in #18342
- Remove case-insensitive character from grammar files by @Dtenwolde in #18948
- Fix query() function error message for PIVOT statements without explicit IN clauses by @shivampr in #18900
- Merge v1.4-andium into main by @c-herrewijn in #18952
- [Dev] Some light code cleanup in
RemoveUnusedColumns::VisitOperatorby @Tishj in #18964 - Support renaming a database - ALTER DATABASE <> RENAME TO <> by @abramk in #18970
- V1.4 andium by @Mytherin in #18982
- Fix field id uniqueness for alter database by @abramk in #18988
- Fix unused variable warnings by @mlafeldt in #18913
- Avoid adding a TupleDataChunkPart with only one row. by @lance5401 in #18904
- Tiny fix for ColumnDataAllocator::ColumnDataAllocator by @baolinhuang in #18990
- Fixes for ALTER DATABASE - use serialization framework, and fix stringification of identifiers by @Mytherin in #18994
- Expected errors 2053 by @hmeriann in #18960
- Fix union semantics in recursive CTEs by @cryoEncryp in #19017
- Multifile
parquet_metadataand friends parallelism by @J-Meyers in #18854 - [Optimize] use StorageLock for CompressionFunction by @baolinhuang in #19028
- PEG grammar updates by @Dtenwolde in #19031
- Rework Compression Function registration to avoid grabbing locks by @Mytherin in #19045
- Merge v1.4 into main by @Mytherin in #19048
- [C-API] default to adding overload on conflict when registering functions by @Maxxen in #19036
- Destroy row groups in parallel by @Mytherin in #19053
- Switching core extension upload to dedicated credentials by @hannes in #19060
- CI: Increase stale bot timeout to 1 year by @szarnyasg in #19000
- Revert "set default value of MAIN_BRANCH_VERSIONING to false" by @c-herrewijn in #19057
- Fix extension load by @dentiny in #19079
- Change core extensions bucket name by @hannes in #19082
- Merge v1.4 into main by @Mytherin in #19098
- Allow directory override for extension build by @Mytherin in #19110
- Skip serialization of row_start in DataPointer when targeting latest storage by @Mytherin in #19111
- [C-API] Initial support for accessing file system by @Maxxen in #19086
- Rework
UNION (ALL)operators (SetOperationNode/LogicalSetOperation/PhysicalUnion) to have multiple children by @Mytherin in #19109 - pushdown filter when doing cross or lateral join with unnest by @DinosL in #19085
- Fix unholy interaction between
CREATE VIEWandCTEdefinitions by @kryonix in #19116 - Add support for
read_duckdb- a function that allows reading / globbing DuckDB database files by @Mytherin in #19108 - Fix typo by @szarnyasg in #19130
- fix: check tree depth and flatten dep join for custom operator extension by @Wal8800 in #19094
- During optimistic writing, gather N row groups and write them at the same time column-at-a-time by @Mytherin in #19118
- Remove unused code by @szarnyasg in #19134
- Add support for late materialization and filter pushdown to read_duckdb by @Mytherin in #19145
- Move storage block prefetching to an option instead of baking in testing during ALTERNATIVE_VERIFY + add a test config for this option by @Mytherin in #19146
- Introduce
parser_override_function_tby @Dtenwolde in #19126 - Perform deduplication based on join_keys when building ht by @tianjq16 in #19097
- Print help to stdout by @staticlibs in #19170
- Validate filesystem registration by @dentiny in #19168
- Fix missing replacement scan code for CTEs by @kryonix in #19159
- Correctly set row start in WAL replay by @Mytherin in #19192
- Use a
PartialBlockManagerper column, instead of sharing one over the entire row group by @Mytherin in #19194 - Internal #5380: AsOf Join Pipeline by @hawkfish in #19169
- Cross and lateral join pushdown with unnest or json - update by @DinosL in #19152
- Missing error messages for test cases by @hmeriann in #19129
- [Profiling] Move
EXTRA_INFOinto the metrics map by @maiadegraaf in #19124 - Common Subplan Elimination by @lnkuiper in #19080
GEOMETRYRework: Part 1 - Logical Type by @Maxxen in #19136- [Parquet] Implement (unshredded)
VARIANTsupport forCOPY TOparquet by @Tishj in #19125 - Add more missing error messages to test cases by @hmeriann in #19210
- [CI] - Fix failing
Extension updating testNightlyTests job by cleaning up some space on the runner by @hmeriann in #19214 - Inconsistent semicolon handling by @Dtenwolde in #19199
- Internal #5383: Range Join Sorting by @hawkfish in #19174
- [Profiling] Add QueryContext to more functions, for Reads by @maiadegraaf in #18726
- Merge v1.4-andium into main by @Maxxen in #19225
- [shell] Fix tilde parsing for .once statement by @dentiny in #19254
- Partially remove BoundQueryNode - have Bind directly emit a BoundStatement by @Mytherin in #19289
- Binder clean-up by @Mytherin in #19293
- test: add test for CREATE TABLE with
my_schema.my_enum[]by @NickCrews in #19296 - Fix uncaught exception in test_empty_profiling_settings.test by @maiadegraaf in #19286
GEOMETRYRework: Part 2 - Statistics by @Maxxen in #19203- Internal #5380: AsOf Sorting Conversion by @hawkfish in #19278
- Add option for opt-in to parser override by @Dtenwolde in #19181
- Remove BoundTableRef and make binding a TableRef directly return a BoundStatement by @Mytherin in #19294
- Rewrite Grouped Top-N Window Functions To Aggregations by @d-justen in #19280
- Perform optimistic reads while filling gaps in CachingFileSystem by @carlopi in #19122
- Issue #19027: AsOf Join Predicates by @hawkfish in #19316
- Enable experimental metadata re-use by default by @Mytherin in #19317
- Binder: BoundQueryNode cleanup by @Mytherin in #19322
- Remove old sort code by @lnkuiper in #19321
- [Parquet] Implement shredded
VARIANTsupport for COPY TO parquet by @Tishj in #19219 - Merge andium into main by @Tishj in #19325
- [C API] Expose column count and type for table description by @taniabogatsch in #19334
- Relocate the python sqllogic code to the dedicated repository by @Tishj in #19340
- Binder: Rework the way set operations work so that we can use the standard binding flow by @Mytherin in #19342
- Rework CTE binding: remove CTENode, and bind CommonTableExpressionMap directly instead by @Mytherin in #19351
- Avoid keeping shared ptr to ClientContext in QueryContext by @Mytherin in #19353
- Internal #6190: AsOf Threading by @hawkfish in #19328
- [Indexes] Buffer Managed Indexes Part 4: Segment Handles f...
v1.4.4 Bugfix Release
This is a bug fix release for various issues discovered after we released 1.4.3. Please excuse the erroneous release earlier.
What's Changed
- Cast Fix: Correctly handle negative exponent with a number with a decimal in VARCHAR -> INTEGER cast by @Mytherin in #20098
- [Storage] Fix NULL filter check for constant segments by @Tishj in #20103
- fixing staged upload for install.duckdb.org - hopefully by @hannes in #20104
- Remove undefined loop by @artjomPlaunov in #20105
- [Test] Adjust concurrent attach-detach test to expect write-write conflict by @taniabogatsch in #20108
- Fix ALIAS function in filter pushdown to preserve column aliases(#20008) by @henry8128 in #20106
- Headers missing from http logs by @samansmink in #20030
- Bumping httpfs to include duckdb/duckdb-httpfs#174 by @carlopi in #20145
- Issue #20136: Secondary IGNORE NULLS by @hawkfish in #20153
- Fix minio nightly tests by @c-herrewijn in #20132
- Fix use-after-free in mode aggregate Combine function by @victor-ab in #20146
- Only pushdown varchar if the arrow type is not a string view by @evertlammerts in #20165
- Quote filters in adbc_get_objects by @evertlammerts in #20172
- Issue #20156: Streaming Window Unions by @hawkfish in #20191
- MergeInto: correctly clean-up buffer and handle non trivial GetData by @carlopi in #20163
- Fix extentension-ci-tools to latest release version in the v1.4-andium branch by @carlopi in #20227
- [Chore] Clean up CI nightly run to prevent time outs by @taniabogatsch in #20150
- Bump Julia to v1.4.3 by @maiadegraaf in #20248
- Internal #6881: 2025c Time Zones by @hawkfish in #20258
- Split statements by semicolon by @Dtenwolde in #20174
- [chore] Remove
numeric_cast.hppimport and other tidy stuff by @taniabogatsch in #20278 - [chore] Reduce latency of VARCHAR index creation test by @taniabogatsch in #20277
- Reuse correct table-level metadata during checkpoints by @ywelsch in #20267
- Fix view resolution not being stable if the referenced table lives in a different schema by @Tishj in #20260
- ConstantOrNullFunction input validity mask overwrite bugfix by @artjomPlaunov in #20283
- dbgen: use TaskExecutor framework by @Mytherin in #20284
- fix(adbc): return error when setting an empty sql query by @gishor in #20071
- Bump iceberg, and add wasm platforms! by @carlopi in #20205
- _extension_distribution: Pin to
v1.4-andiumbranch of extension-ci-tools by @carlopi in #20294 - Optimize prepared statement parameter lookups by @EtgarDev in #20252
- Update
VectorTypeinComputePartitionIndicesby @lnkuiper in #20343 - Add some defensive programming in
RadixPartitionedHashTable::CombineandRadixPartitionedHashTable::Finalizeby @lnkuiper in #20342 - Increase reserved size for paths in SetPathsInternal by @Flogex in #20340
- Use UTF-16 console output in Windows shell (1.4) by @staticlibs in #20339
- Force repartitioning in
RadixPartitionedHashTable::Combineby @lnkuiper in #20357 - Fixup comparison to wrong iterator on abdc's driver by @carlopi in #20360
- [chore] dsdgen generation signed integer overflow fix by @taniabogatsch in #20279
- Give preference do variables set in config by @pdet in #20396
- Add QueryContext also to Write(void *buffer, idx_t nr_bytes), so that BytesWritten are updated also there by @carlopi in #20393
- Fix Issue #20233: fix function chain in qualify by @ArNine in #20302
- Backport client data cleanup by @taniabogatsch in #20403
- Add v1.4.4 to Storage Version by @maiadegraaf in #20404
- Parquet Reader: Ignore invalid UTF8 in string stats, instead of throwing an error by @Mytherin in #20405
- Don't add a semicolon to final query when splitting statements by @Dtenwolde in #20401
- Fixup BRANCHES_TO_BE_CACHED, vars are not available on PRs, so env it is by @carlopi in #20411
- [Fix] Defensive infinite loop guard and UTF-8 check in C API by @taniabogatsch in #20348
- Add ducklake, httpfs and iceberg tests so they are run in CI by @carlopi in #20319
- [Stats]
date_truncstat propagation fix by @Tishj in #20421 - Refactor allowed path sanitize by @hannes in #20346
- Issue #20413: ASOF SEMI/ANTI Bindings by @hawkfish in #20433
- Fix #20410: fix for RIGHT SEMI/ANTI - cannot fully label chain as found if there are non-equality predicates present in the join condition by @Mytherin in #20435
- [Fix] Misaligned size in ART prefix count by @taniabogatsch in #20455
- Wrap ccache in own action by @carlopi in #20466
- [Chore] Add
ORDER BYtoAS OFtest by @taniabogatsch in #20465 - Fix segfault in hive partitioning with NULL values by @Schwarf in #20468
- Nightly test encryption fixes by @ccfelius in #20461
- [C API] Fix error data creation by @taniabogatsch in #20451
- Skip concurrent_encrypted_attach due to race in autoloading httpfs by @carlopi in #20471
- CI fixup: Comparisons needs to be done via strings (since input via workflow_call is a string) by @carlopi in #20464
- Add unity_catalog to extensions built by duckdb/duckdb by @carlopi in #20445
- Invert the setup of ccache and cleanup_runner by @carlopi in #20429
- bump spatial for andium by @Maxxen in #20479
- Reclaim disk space on MacOS runners by @lnkuiper in #20493
- Adding secure clear functions by @ccfelius in #20285
- rewrite unaligned scan by @artjomPlaunov in #20474
- Issue #20470: TIMESTAMPTZ to DATE by @hawkfish in #20498
- Reset cached dictionaries in
TRYexpression by @Maxxen in #20452 - [Copy] Fix #20324
partition_byoption binding by @Tishj in #20509 - Bump multiple extensions by @maiadegraaf in #20504
- update azure ref for v1.4-andium by @benfleis in #20506
- [Fix] Directly retrieve the logical column index during
MERGE INTObinding by @taniabogatsch in #20503 - Sanitize pragmas by @samansmink in #20514
- Bump httpfs, ducklake and postgres by @carlopi in #20518
- Revert vortex bump for v1.4.4 by @taniabogatsch in #20527
- Bump VSS by @taniabogatsch in #20542
- Bump Excel by @maiadegraaf in #20540
- Fix Issue #20233: Fix function chain in having and merge to v1.4 by @ArNine in #20532
- bump iceberg by @Tmonster in #20549
- Bump Iceberg v1.4 by @Tmonster in #20604
- Fix KeyValueSecretReader init by @NiclasHaderer in #20620
- Fail fast extensions by @carlopi in #20605
New Contributors
- @victor-ab made their first contribution in #20146
- @gishor made their first contribution in #20071
Full Changelog: v1.4.3...v1.4.4
