Skip to content

Releases: duckdb/duckdb

v1.4.1 Bugfix Release

07 Oct 10:29
b390a7c
Compare
Choose a tag to compare

This is a bug fix release for various issues discovered after we released 1.4.0.

What's Changed

Full Changelog: v1.4.0...v1.4.1

DuckDB 1.4.0 "Andium"

16 Sep 10:17
b8a06e4
Compare
Choose a tag to compare

This release of DuckDB is named "Andium" after Anas Andium, a species of duck that lives in the Andes mountains in South America.

Please also refer to the announcement blog post: https://duckdb.org/2025/09/16/announcing-duckdb-140.html

What's Changed

Read more

v1.3.2 Bugfix Release

08 Jul 10:39
0b83e5d
Compare
Choose a tag to compare

This is a bug fix release for various issues discovered after we released 1.3.1. There are no new major features, just bug fixes. Database files created by DuckDB versions all the way back to v0.9 can be read by this version.

What's Changed

Full Changelog: v1.3.1...v1.3.2

v1.3.1 Bugfix Release

16 Jun 13:54
2063dda
Compare
Choose a tag to compare

This is a bug fix release for various issues discovered after we released 1.3.0 "Ossivalis". There are no new major features, just bug fixes. Database files created by DuckDB versions all the way back to v0.9 can be read by this version.

What's Changed

Read more

DuckDB 1.3.0 "Ossivalis"

21 May 16:04
71c5c07
Compare
Choose a tag to compare

This release of DuckDB is named "Ossivalis" after Bucephala Ossivalis, an ancestor of the Goldeneye duck that lived Millions of years ago.

Please also refer to the announcement blog post: https://duckdb.org/2025/05/21/announcing-duckdb-130

What's Changed

  • V1.2 histrionicus by @Mytherin in #16070
  • V1.2 histrionicus by @Mytherin in #16072
  • unittests: clear test directory after every test by @Mytherin in #16053
  • Benchmark runner: catch and log errors + add support for retry load N syntax by @Mytherin in #16054
  • Throw an error when unsupported commands are used in concurrentloop by @Mytherin in #16009
  • Remove extension definitions to prevent re-compilation of the entire system on commit by @Mytherin in #15955
  • Display schema information of currently selected database only by @ashwaniYDV in #15815
  • Issue #14366: Average Intervals by @hawkfish in #15864
  • Internal #2176: Temporal AVG by @hawkfish in #15661
  • discussions #15981: remove confusing comment in "duckdb/tools/shell/shell.cpp" by @komainu8 in #15984
  • Fix #15466 Transform LIMIT or OFFSET first based on order specified in prepared statement by @ashwaniYDV in #15484
  • Bitpacking mode info by @arjenpdevries in #15623
  • Sniff Timestamp_TZ from CSV FIles by @pdet in #15730
  • [no-op] Add documentation for filesystem read behavior by @dentiny in #15937
  • Accept "Auto" as date/timestamp format by @pdet in #15808
  • Parquet Reader Cleanup: Move ColumnReaders to separate files by @Mytherin in #16092
  • Parquet Reader: Move decoding logic into separate Decoder classes by @Mytherin in #16100
  • BundleStaticLibs to be also triggered by InvokeCI by @carlopi in #16107
  • Parquet Reader: Split DeltaLengthByteArray decoder from DeltaByteArray, and read the strings in a streaming manner by @Mytherin in #16105
  • Parquet Dictionary reader: set NULL values as the last value in the dictionary by @Mytherin in #16106
  • Parquet Reader: Share ResizeableBuffers across decoders, and unify Plain/PlainReference by @Mytherin in #16113
  • Using GitHub ARM runners for Linux CLI builds by @hannes in #16119
  • Parquet Reader: Implement dedicated Skip method by @Mytherin in #16117
  • Use ColumnSegment::FilterSelection and SelectionVector for filtering in Parquet scans by @Mytherin in #16126
  • [Dev] Fix output (long lines > 333 characters) getting truncated in shell by @Tishj in #16128
  • Adaptive table filter: initialize filter order based on heuristics by @Mytherin in #16127
  • Feature #16044: TimeZone Offset Seconds by @hawkfish in #16048
  • ATTACH OR REPLACE database to allow swapping of new data. by @xevix in #15355
  • [Dev] Remove upsert_conflict_in_different_chunk.test by @Tishj in #15980
  • [Dev] Fix issue related to unpacked columns and the NOT operator by @Tishj in #15534
  • [Julia] Add support for named params in prepared statements by @tqml in #15621
  • Use Adaptive Filters in the Parquet reader by @Mytherin in #16133
  • Parquet reader: push table filters directly into dictionaries by @Mytherin in #16136
  • Parquet reader: Plain templates - make CHECKED a template parameter, and use memcpy/bulk skip when reading/skipping without defines by @Mytherin in #16141
  • Parquet reader: only set invalid entry in the dictionary when the column has defines by @Mytherin in #16144
  • Add uniq_ptr_cast for interpreted benchmark. by @Tmonster in #16151
  • Hopefully fixing ci runs by @hannes in #16150
  • Removed the last CI job that used the Ubuntu 18 setup by @hannes in #16155
  • Parquet Reader: Split CreateReader into two separate stages - ParseSchema and CreateReader by @Mytherin in #16161
  • Have CSV Parellel tests on CI again by @pdet in #16164
  • [Python][Dev] Bump the minimum pybind11 version from 2.6 to 2.9 by @Tishj in #16159
  • Add StackTraces to FatalExceptions by @NiclasHaderer in #16158
  • Rework invoke by @carlopi in #16108
  • Adds pre-optimization hooks for DuckDB by @NiclasHaderer in #16115
  • Unify behavior of range/generate_series with PostgreSQL by @kryonix in #15935
  • [CI] Avoid Linux CLI jobs to fail-fast by @carlopi in #16173
  • Parquet: Add dedicated Select method that can be used to push selection vectors into the read by @Mytherin in #16174
  • Unvendor ICU by @m-kuhn in #16176
  • Parquet reader: batch check if buffer is available in RLEBpDecoder by @Mytherin in #16185
  • Parquet Reader: for DeltaLengthByteArray encoding, directly refer to strings from the block without copying by @Mytherin in #16186
  • unified names for duckdb-extensions by @hmeriann in #16179
  • Only delete test directory when --test-temp-dir is not specified by @Mytherin in #16192
  • Fix #16163: COLUMNS should not treat identifiers as strings by @Mytherin in #16193
  • Parquet reader: Avoid applying bloom filters if we are casting columns by @Mytherin in #16194
  • Pretty print sniffer values by @pdet in #16182
  • V1.2 histrionicus by @Mytherin in #16191
  • Bump Julia by @Mytherin in #16199
  • Ensure that dependent targets are present after find_package. by @BillyONeal in #16197
  • Concurrency groups for R and Wasm by @hmeriann in #16201
  • Parquet Writer Cleanup: Move ColumnWriters to separate files by @Mytherin in #16202
  • [fix] Use bigobj when building with MSVC by @m-kuhn in #16200
  • Improve performance of UNNEST/UNPIVOT by using selection vectors to unnest multiple lists at once by @Mytherin in #16210
  • Add the TRY expression by @Tishj in #15939
  • [Python][Dev] Replace the default connection when it's closed by @Tishj in #16160
  • Use steady clock for profiler by @dentiny in #16198
  • Add parallel memset when building hash join table by @hehezhou in #16172
  • Avoid unnecessarily projecting the input columns of the UNPIVOT operator in the UNNEST by @Mytherin in #16221
  • Left join push down optimization by @Damon07 in #15881
  • Do In-Filter pushdown in PyArrow by @pdet in #16224
  • Use _win32 with MSVC by @cfis in #16235
  • Fix Python 3 executable name on Windows by @cfis in #16236
  • Fix -std=c++11 by @cfis in #16237
  • Issue #8265: AsOf Nested Loop by @hawkfish in #16218
  • Include extension_util.hpp in libduckdb by @mlafeldt in #16255
  • Generalize rowid into the concept of virtual columns, and make filename a virtual column in the Parquet/CSV/JSON readers by @Mytherin in #16248
  • Modify histogram test to more fuzzily check boundaries since the test can be inconsistent on different platforms by @Mytherin in #16261
  • [Dev] Fix issue in TRY expression with dictionary_expression Vector verification by @Tishj in #16262
  • [Python Dev] Add the correct variant of the -std=c++11 flag based on the compiler (MSVC or not) by @Tishj in #16267
  • Fix extension install mode null by @samansmink in #16268
  • A little cleanup. by @JasonPunyon in #16028
  • Improve Parquet writer performance by @lnkuiper in #16243
  • Merge v1.2-histrionicus into main by @Mytherin in #16284
  • Many reclaim storage fixes by @taniab...
Read more

v1.2.2 Bugfix Release

08 Apr 08:44
7c03946
Compare
Choose a tag to compare

This is a bug fix release for various issues discovered after we released 1.2.1. There are no new major features, just bug fixes. Database files created by DuckDB versions all the way back to v0.9.* can be read by this version.

What's Changed

Full Changelog: v1.2.1...v1.2.2

v1.2.1 Bugfix Release

05 Mar 18:03
8e52ec4
Compare
Choose a tag to compare

This is a bug fix release for various issues discovered after we released 1.2.0. There are no new major features, just bug fixes. Database files created by DuckDB versions all the way back to v0.9.* can be read by this version.

What's Changed

  • [Dev] MultiFileReader fix InternalError in CreateFilterMap by @Tishj in #16114
  • [bug-fix] Avoid throwing in catch block for failed commits by @Vegetable26 in #15903
  • Issue #16098: ValidEnd Parallel Vectorisation by @hawkfish in #16140
  • Adding an extension option shouldn't delete a set value and promote unrecognized options by @bleskes in #15919
  • Parquet writer: Re-implement GetRowSize for Strings by @Mytherin in #16178
  • Fix #16157: correctly get the first row when reading hive partitions from a dictionary vector by @Mytherin in #16180
  • Fix #16122: bind default values in a sub-binder to avoid modifying the catalog search path of the current binder by @Mytherin in #16181
  • Fix #16134: when a catalog/schema/table has the same name, we prefer to suggest the table name by @Mytherin in #16189
  • Ensure MergeCollectionTask has a writer by @ywelsch in #16207
  • Backport #16115 by @NiclasHaderer in #16227
  • Deleted copy constructor of pending query by @NiclasHaderer in #16242
  • Correctly report errors caused by get_database in C extensions by @mlafeldt in #16253
  • use random seeds for bernoulli sample when parallel is enabled by @Tmonster in #16223
  • Parquet Reader: avoid caching the compressed buffer in the ColumnReader by @Mytherin in #16263
  • Fix #16260: correctly handle parameters in getvariable by @Mytherin in #16264
  • Avoid calling SetFilterAlwaysTrue multiple times in RowGroup::CheckZonemap by @Mytherin in #16269
  • [Fix] Scanning from normal leaf to nested leaf by @taniabogatsch in #16270
  • Fix #16231: refer to order by condition in ARRAY(SUBQUERY) by alias instead of by index by @Mytherin in #16272
  • Fix #16257 by @lnkuiper in #16275
  • AFL Tests for the CSV reader by @pdet in #16280
  • Issue #16250: Window Range Performance by @hawkfish in #16276
  • Fix #16278: late materialization should not trigger on very large limits, and it should never trigger on limits without offsets when preserve_insertion_order = false by @Mytherin in #16282
  • Overflow strings allocations: avoid rounding up memory allocated per overflow string - when reading "small" overflow strings place them directly into the vector instead by @Mytherin in #16283
  • Use ordered map to preserve expressions order by @Damon07 in #16111
  • [Dev] register_filesystem stubs, use fsspec.AbstractFileSystem, not str by @Tishj in #16266
  • [Python Dev] Fix crash with empty args for isin | Fix transformation for isnotin by @Tishj in #16271
  • Fix issue related to hang when all candidates are eliminated in refinement by @pdet in #16288
  • [Fix] Early-out on CREATE INDEX (IF NOT EXISTS) by @taniabogatsch in #16093
  • [Python] Fix the reverse binary expressions in the Expression API by @Tishj in #16300
  • Bugfixes by @lnkuiper in #16244
  • [Fix] MinGW bundle static libs by @taniabogatsch in #16292
  • Fix heap buffer oveflow sampling by @Tmonster in #16279
  • Expose STRING_LITERAL in C API by @taniabogatsch in #16293
  • Allow accessing profiler query tree under lock by @ywelsch in #16314
  • bump extensions by @Maxxen in #16313
  • Inline virtual list lambda bind functions by @Maxxen in #16327
  • Update shell.cpp to fix #16333 by @teaguesterling in #16335
  • Add the suggestion to verify the nullstring as part of the cast error message by @pdet in #16336
  • Take NULLs into account for DELTA_BINARY_PACKED by @lnkuiper in #16317
  • PhysicalTableScan: Adapt to allow async behaviour by @carlopi in #16310
  • Allow querying attached catalog from detached catalog by @jeewonhh in #16289
  • Reduce minimum expected memory usage in RadixPartitionedHashTable by @lnkuiper in #16332
  • Backport ebb4dcc to v1.2-, adding missing include by @carlopi in #16369
  • Excecption load on mismatched ABI: Use '%d' to print ABI type by @carlopi in #16367
  • Aggregation: For dictionaries without an id - use the correct threshold to bail-out on using the dictionary by @Mytherin in #16364
  • Bump excel to the same version distributed on core repository by @carlopi in #16375
  • Accept valid dialects with escape set into the refinement phase by @pdet in #16387
  • Push the correct casts for values of different types in (X, Y) IN (SELECT X, Y) by @Mytherin in #16392
  • Add support for autoload and autoinstall for ui extension by @carlopi in #16393
  • Add twine_upload option to Python.yml to trigger upload by @carlopi in #16410
  • Only select options that generate more columns with null_padding, if they at least hold 50% of consistency by @pdet in #16404
  • Use checkpoint bind in DuckTableEntry::Copy to avoid re-validating default values (and potentially causing issues during WAL replay) by @Mytherin in #16398
  • Rename DUCKDB_API to DUCKDB_C_API for duckdb.h by @Mytherin in #16397
  • Issue #16407: Try_Strptime Invalid TimeZone by @hawkfish in #16416
  • Internal #4303: Windowed DISTINCT Leaks by @hawkfish in #16417
  • Internal #4258: MODE Spooling Stability by @hawkfish in #16415
  • Fix PyPi upload also for branches, when twine_upload is provided by @carlopi in #16421
  • [Fix] Throw constraint violation for FK constraint checking by @taniabogatsch in #16399
  • Add storage and serialization version for v1.2.1 by @Flogex in #16403
  • Update flaky return_files.test by @jeewonhh in #16432
  • Add python version to duckdb_api by @guenp in #15599
  • Do not accept null values in lists for column parameters by @pdet in #16425
  • Use seed for system sample when it is provided. by @Tmonster in #16408
  • Bump delta to working commit by @carlopi in #16442
  • Adding windows code signing using azure by @hannes in #16444
  • CSV small code Improvements + initialising boolean variable. by @pdet in #16454
  • [Python Dev] Make pandas not required in a couple places, check if it's installed in others by @Tishj in #16414
  • fix passing a null path to the C API instance cache by @jraymakers in #16474
  • Add methods to retrieve current task scheduler busyness by @NiclasHaderer in #16465
  • Fixed reading piped JSON by @lnkuiper in #16480
  • [Python Dev] pyproject.toml should not use oldest-supported-numpy anymore by @Tishj in #16486
  • [tests] Multiple FORMAT in copy, only last one matters by @carlopi in #16493
  • Bump postgres_scanner and fts extensions by @lnkuiper in #16492
  • bump sqlsmith extension tag by @Tmonster in #16488
  • [BugFix]: Swap join children, not left and right set by @Tmonster in #16487
  • [tests] Add allow_unsigned_extensions require by @carlopi in #16499
  • Provide callback when tasks are starting / stopping by @ywelsch in #16451
  • CodeQuality: ubuntu-20 to ubuntu-22, lock black to version 24 and trick clang_format detection by @carlopi in #16513
  • Move from ubuntu-20:04 to ubuntu-22:04, part I by @carlopi in #16510
  • [chore] Build Linux releases also on PRs AND ubuntu-20 to 22 by @carlopi in https://github.com/duckdb/duckd...
Read more

DuckDB 1.2.0 "Histrionicus"

05 Feb 13:57
5f5512b
Compare
Choose a tag to compare

This release of DuckDB is named "Histrionicus" after the good-looking Harlequin duck (Histrionicus Histrionicus) that inhabits "cold fast moving streams in North America, Greenland, Iceland and eastern Russia".

Please also refer to the announcement blog post: https://duckdb.org/2025/02/05/announcing-duckdb-120

What's Changed

Read more

v1.1.3 Bugfix Release

04 Nov 13:59
1986445
Compare
Choose a tag to compare

This is a bug fix release for various issues discovered after we released 1.1.2. There are no new major features, just bug fixes. Database files created by DuckDB versions all the way back to v0.9.* can be read by this version.

What's Changed

Full Changelog: v1.1.2...v1.1.3

v1.1.2 Bugfix Release

14 Oct 11:41
f680b7d
Compare
Choose a tag to compare

This is a bug fix release for various issues discovered after we released 1.1.1. There are no new major features, just bug fixes. Database files created by DuckDB versions all the way back to v0.9.* can be read by DuckDB v1.1.2.

What's Changed

  • [CI] Re-enable ART zero initialisation verification by @taniabogatsch in #14031
  • Push filters instead of overwriting filters by @Tmonster in #14078
  • Fix test by @Tmonster in #14079
  • fix maximum_threads test inside containers by @wenjun93 in #14083
  • Fix: remove is_probe_in_domain by @Light-City in #14084
  • Add duckdb_extension.h to amalgamation release by @samansmink in #14086
  • Bump minimum required cmake version by @abramk in #14089
  • Fix parser error by removing alias by @taniabogatsch in #14090
  • [Dev] Move EnumTypeInfoTemplated definition into a hpp file by @Tishj in #14038
  • Fix #14077: correctly reset next pointer when reconstructing new row group segment tree after vacuum by @Mytherin in #14092
  • Format CSV error messages by @szarnyasg in #14097
  • Fix the answer file for tpcds q67 at sf100 by @Tmonster in #14096
  • Add v1.1.1 to version_map.json by @Flogex in #14110
  • CREATE TABLE now supports columns with ENUM[] types. by @Tishj in #14102
  • fix parquet cardinality when first file is empty by @wenjun93 in #14058
  • [Python Dev] Make sure the GIL is released when the connection+db are being shut down by @Tishj in #14113
  • Less salt by @lnkuiper in #14173
  • remove redundant code by @flashmouse in #14172
  • comparison of nested types returns true or false always (even with nulls) by @Tmonster in #14094
  • subtype DBInterface.Connection in julia client by @piever in #14193
  • [Python] Fix a bug with python_scan_all_frames reaching the bottom of the frame stack by @Tishj in #14183
  • [Dev] Fix issue where the InsertStatement::ToString call destroyed the alias of the ValuesList by @Tishj in #14171
  • [Python] Fix issue related to scanning float64 dtype columns that contain a mask by @Tishj in #14170
  • Fix some warnings found while compiling duckdb-node by @carlopi in #13994
  • fix minmax type info miss by @Damon07 in #14159
  • fix: ArrowSchemaMetadata::GetOption to return empty string instead of raising exception if key is not found. by @rustyconover in #14157
  • Issue 14151: Fix conflicting defines on Windows hidden by cmake unity builds by @zmajeed in #14154
  • Issue 14189: Fix build when threads are disabled by @zmajeed in #14190
  • Fix an uncaught error with a generated column containing a subquery by @Tishj in #14198
  • Add missing word in TableFunction comment by @JelteF in #14210
  • add method to check whether julia connection is open by @piever in #14195
  • Avoid schema changes with IF NOT EXISTS by @ywelsch in #14143
  • Fix typos in code by @c8ef in #14243
  • [Dev] Add the ExecutorException class, making use of the EXECUTOR ExceptionType by @Tishj in #14231
  • [Python] Don't allow construction of DuckDBPyType from empty Dict type by @Tishj in #14221
  • Fix #14232: fix deliminator optimizer by @flashmouse in #14238
  • [CSV Reader] Also use figure-out-line code when ignoring errors. by @pdet in #14184
  • remove redundant Bit::SetBit by @flashmouse in #14226
  • Fix #14212: mention correct query component when using literal in DISTINCT ON by @Mytherin in #14255
  • Removing overzealous check in Parquet by @hannes in #14268
  • Update sqlsmith extension and patches by @Tmonster in #14270
  • Support for duckdb.varint extension in Arrow. by @pdet in #14273
  • Disable CSV ignore_errors benchmark by @pdet in #14277
  • Only slice initialized vectors in PhysicalHashAggregate::SinkDistinctGrouping by @lnkuiper in #14289
  • Fix #14249: return NAN when dividened is 0 by @flashmouse in #14298
  • Revert "Fix #14249: return NAN when dividened is 0" by @Mytherin in #14308
  • fix macro name with the same function name in it which causing repeat… by @Damon07 in #14296
  • Fixing issue with the sniffer on copy statetements by @pdet in #14295
  • Json bugfixes by @lnkuiper in #14288
  • [Bitstring] Add overload for bitstring to accept BIT as the type of the first argument by @Tishj in #14247
  • [Fix] Don't initialize reference, constant, and parameter children in intermediate chunk by @taniabogatsch in #14254
  • Profiling - correct settings per node type and minor renaming for clarity by @taniabogatsch in #14290
  • Fix extension size increase by @samansmink in #14185
  • Add option to ignore GeoParquet, disable spatial autoloading when reading GeoParquet by @Maxxen in #14297
  • More defensive programming in RowVersionManager::CleanupAppend by @Mytherin in #14317
  • Change Makefile to correctly handle DISABLE_SANITIZER and DISABLE_UBSAN by @JelteF in #14316
  • [CSV Reader] Making escape not limited to only quotes by @pdet in #14314
  • allow external cardinality information (e.g. from iceberg) by @peterboncz in #14292
  • [SecretManager] Fix deserialization of Value types in KeyValueSecret::Deserialize by @Tishj in #14332
  • Avoid throwing InternalException on reading secret by @carlopi in #14336
  • delay the rewrite of a large IN-clause into a MarkJoin on remote Filter-Scans by @peterboncz in #14266
  • JSON reader - never generate maps if map_inference_threshold is -1 by @Mytherin in #14348
  • [Appender] Support appending to table with generated columns by @Tishj in #14346
  • Internal #3251: DateDiff Across Epoch by @hawkfish in #14338
  • Bump azure and delta extensions commits by @carlopi in #14350
  • Bump spatial to 3f94d52aa9f7d67b1a30e6cea642bbb790c04aa2 by @carlopi in #14351
  • Bump more extensions: iceberg, vss and sqlite_scanner by @carlopi in #14352
  • Emit profiling info for extension operators by @Mytherin in #14355

Full Changelog: v1.1.1...v1.1.2