From c6196789756c60a433d40af53909d8ec86fe2bb4 Mon Sep 17 00:00:00 2001 From: Gabor Szarnyas Date: Thu, 21 Aug 2025 10:55:43 +0200 Subject: [PATCH 01/12] Prepare for v1.4.0 --- _config.yml | 9 +- _data/past_releases.csv | 1 + _posts/2025-09-10-announcing-duckdb-140.md | 23 ++ data/installation-data-1.4.yml | 310 ++++++++++++++++++ data/latest_stable_version.txt | 2 +- .../concatenate_to_single_file.py | 2 +- 6 files changed, 340 insertions(+), 7 deletions(-) create mode 100644 _posts/2025-09-10-announcing-duckdb-140.md create mode 100644 data/installation-data-1.4.yml diff --git a/_config.yml b/_config.yml index 7e76274a468..bd6a609bf1e 100644 --- a/_config.yml +++ b/_config.yml @@ -21,11 +21,10 @@ baseurl: "" # the subpath of your site, e.g. /blog url: "https://duckdb.org" # the base hostname & protocol for your site, e.g. http://example.com # Set current codename of DuckDB and version numbers of DuckDB clients current_duckdb_codename: "Ossivalis" -current_short_duckdb_version: "1.3" -preview_short_duckdb_version: "1.4-dev" -current_duckdb_version: 1.3.2 -current_duckdb_hash: "0b83e5d2f6" -current_snapshot_version: 1.2.3-dev +current_short_duckdb_version: "1.4" +preview_short_duckdb_version: "1.5-dev" +current_duckdb_version: 1.4.0 +current_duckdb_hash: "xx" current_duckdb_odbc_version: 1.3.2.0 current_duckdb_odbc_short_version: 1.3.2 current_duckdb_go_version: 1.3.2 diff --git a/_data/past_releases.csv b/_data/past_releases.csv index bac65d0f1c5..e62afcb3c4d 100644 --- a/_data/past_releases.csv +++ b/_data/past_releases.csv @@ -1,4 +1,5 @@ release_date,version_number,codename,duck_species_primary,duck_species_secondary,duck_wikipage,blog_post +2025-09-10,1.4.0,Andium,Anas andium,Andean teal,https://en.wikipedia.org/wiki/Andean_teal,https://duckdb.org/2025/09/10/announcing-duckdb-140 2025-07-08,1.3.2,,,,, 2025-06-16,1.3.1,,,,, 2025-05-21,1.3.0,Ossivalis,Bucephala ossivalis,Goldeneye duck,https://en.wikipedia.org/wiki/Goldeneye_(duck),https://duckdb.org/2025/05/21/announcing-duckdb-130 diff --git a/_posts/2025-09-10-announcing-duckdb-140.md b/_posts/2025-09-10-announcing-duckdb-140.md new file mode 100644 index 00000000000..c3bfdc3707a --- /dev/null +++ b/_posts/2025-09-10-announcing-duckdb-140.md @@ -0,0 +1,23 @@ +--- +layout: post +title: "Announcing DuckDB 1.4.0" +author: "The DuckDB team" +thumb: "/images/blog/thumbs/duckdb-release-1-4-0.svg" +image: "/images/blog/thumbs/duckdb-release-1-4-0.png" +excerpt: "The DuckDB team is happy to announce that today we're releasing DuckDB version 1.4.0, codenamed “Andium”." +tags: ["release"] +--- + +> To install the new version, please visit the [installation guide]({% link docs/installation/index.html %}). Note that it can take a few hours to days to release some client libraries (e.g., Go, R, Java) and extensions due to the extra changes and review rounds required. + +We are proud to release DuckDB 1.4.0. This release of DuckDB is named “Andium” after the Andean teal _(Anas andium),_ +which lives in the Andean highlands of Colombia, Venezuela and Ecuador. + +In this blog post, we cover the most important features of the new release. DuckDB is moving rather quickly, and we could cover only a small fraction of the changes in this release. For the complete release notes, see the [release page on GitHub](https://github.com/duckdb/duckdb/releases/tag/v1.4.0). + +## Breaking Changes and Deprecations + + + +## Final Thoughts + diff --git a/data/installation-data-1.4.yml b/data/installation-data-1.4.yml new file mode 100644 index 00000000000..8a3bf06a0f3 --- /dev/null +++ b/data/installation-data-1.4.yml @@ -0,0 +1,310 @@ +- variant: stable + environment: Command line + platform: Windows + download_method: Package manager + architecture: universal + installation_code: winget install DuckDB.cli + note: >- + Note that DuckDB on Windows requires the Microsoft Visual C++ Redistributable. +- variant: stable + environment: Command line + platform: Windows + download_method: Direct download + architecture: x86_64 + sha_256: 0f20f96cc83540817e9e42f88d1f62e5452a9a2b4fcdef7f97cfc94a971d313f + link: https://github.com/duckdb/duckdb/releases/download/v1.4.0/duckdb_cli-windows-amd64.zip + note: >- + Note that DuckDB on Windows requires the Microsoft Visual C++ Redistributable. +- variant: stable + environment: Command line + platform: Windows + download_method: Direct download + architecture: arm64 + sha_256: c8093ef9bdfa27d06b3f4f3d9a858044b7eac07e6a799012f5f722dc07242eb8 + link: https://github.com/duckdb/duckdb/releases/download/v1.4.0/duckdb_cli-windows-arm64.zip + note: >- + Note that DuckDB on Windows requires the Microsoft Visual C++ Redistributable. +- variant: stable + environment: Command line + platform: macOS + download_method: Package manager + architecture: universal + installation_code: brew install duckdb +- variant: stable + environment: Command line + platform: macOS + download_method: Direct download + architecture: universal + sha_256: 660ed83745a7024fe7c92d4de6c28665cc79bfb6e22101e5761830cc4ec050ef + link: https://github.com/duckdb/duckdb/releases/download/v1.4.0/duckdb_cli-osx-universal.zip + installation_code: >- + curl https://install.duckdb.org | sh +- variant: stable + environment: Command line + platform: Linux + download_method: Direct download + architecture: x86_64 + sha_256: 682ff48f988cb6f054fe42e755b7037ade3441e7a406cce3180b05ac0287279d + link: https://github.com/duckdb/duckdb/releases/download/v1.4.0/duckdb_cli-linux-amd64.zip + installation_code: >- + curl https://install.duckdb.org | sh +- variant: stable + environment: Command line + platform: Linux + download_method: Direct download + architecture: arm64 + sha_256: f322807f0f5d146d2bb1eea253f894d0a015561695408fa22981f085eb2b77ad + link: https://github.com/duckdb/duckdb/releases/download/v1.4.0/duckdb_cli-linux-arm64.zip + installation_code: >- + curl https://install.duckdb.org | sh +- variant: stable + environment: Python + platform: all + download_method: Package manager + architecture: universal + installation_code: pip install duckdb + note: >- + Note that on Windows 10, the DuckDB Python client requires the latest Microsoft Visual C++ Redistributable. Please make sure to install the latest MSVC Redistributable on this platform. To work around this issue without upgrading the MSVC Redistributable, consider installing the preview (nightly) release, which resolves this problem. +- variant: stable + environment: R + platform: all + download_method: Package manager + architecture: universal + installation_code: install.packages("duckdb") + note: >- + On certain platforms, such as Linux AArch64 (arm64), the DuckDB R package needs to be compiled from source. + To speed up this process, follow the instructions on the R build page. +- variant: stable + environment: Java + platform: all + download_method: Package manager + architecture: universal + installation_code: >- + + org.duckdb + duckdb_jdbc + 1.3.2.0 + +- variant: stable + environment: Java + platform: all + download_method: Direct download + architecture: universal + link: https://repo1.maven.org/maven2/org/duckdb/duckdb_jdbc/1.3.2.0/duckdb_jdbc-1.3.2.0.jar +- variant: stable + environment: Node.js + platform: all + download_method: Package manager + architecture: universal + installation_code: npm install @duckdb/node-api +- variant: stable + environment: Rust + platform: all + download_method: Package manager + architecture: universal + installation_code: cargo add duckdb --features bundled +- variant: stable + environment: Go + platform: all + download_method: Package manager + architecture: universal + installation_code: go get github.com/marcboeker/go-duckdb +- variant: stable + environment: C/C++ + platform: Windows + download_method: Direct download + architecture: x86_64 + link: https://github.com/duckdb/duckdb/releases/download/v1.4.0/libduckdb-windows-amd64.zip + sha_256: b156e9d6f977291ceb0e07f7a339589865bfabae02dae7357cf10465cbb85ce7 +- variant: stable + environment: C/C++ + platform: Windows + download_method: Direct download + architecture: arm64 + link: https://github.com/duckdb/duckdb/releases/download/v1.4.0/libduckdb-windows-arm64.zip + sha_256: 4f61418ee9de3afd93828469c3d999ac1f0fecd89ac9b65acca01ed0daafa307 +- variant: stable + environment: C/C++ + platform: macOS + download_method: Direct download + architecture: universal + link: https://github.com/duckdb/duckdb/releases/download/v1.4.0/libduckdb-osx-universal.zip + sha_256: 6e4a9bfd4f15c83f43b9585b4f62c6f9851de3410cd28275de37d6d74b138415 +- variant: stable + environment: C/C++ + platform: Linux + download_method: Direct download + architecture: x86_64 + link: https://github.com/duckdb/duckdb/releases/download/v1.4.0/libduckdb-linux-amd64.zip + sha_256: 748f7c3722f8a4a15e7666e24b917615776879a2e9d92e079d0191a7832e93c1 +- variant: stable + environment: C/C++ + platform: Linux + download_method: Direct download + architecture: arm64 + link: https://github.com/duckdb/duckdb/releases/download/v1.4.0/libduckdb-linux-arm64.zip + sha_256: 3fc6e2c310eef6244d3a9d9ccbbc7c1b80e34cb7115ac67739fe1b9744246b68 +- variant: stable + environment: ODBC + platform: Windows + download_method: Direct download + architecture: x86_64 + link: https://github.com/duckdb/duckdb-odbc/releases/download/v1.3.2.0/duckdb_odbc-windows-amd64.zip +- variant: stable + environment: ODBC + platform: macOS + download_method: Direct download + architecture: universal + link: https://github.com/duckdb/duckdb-odbc/releases/download/v1.3.2.0/duckdb_odbc-osx-universal.zip +- variant: stable + environment: ODBC + platform: Linux + download_method: Direct download + architecture: x86_64 + link: https://github.com/duckdb/duckdb-odbc/releases/download/v1.3.2.0/duckdb_odbc-linux-amd64.zip +- variant: stable + environment: ODBC + platform: Linux + download_method: Direct download + architecture: arm64 + link: https://github.com/duckdb/duckdb-odbc/releases/download/v1.3.2.0/duckdb_odbc-linux-arm64.zip +- variant: nightly + environment: Command line + platform: Windows + download_method: Direct download + architecture: universal + link: 'https://artifacts.duckdb.org/latest/duckdb-binaries-windows.zip' +- variant: nightly + environment: Command line + platform: macOS + download_method: Direct download + architecture: universal + link: 'https://artifacts.duckdb.org/latest/duckdb-binaries-osx.zip' + installation_code: >- + curl -fL --progress-bar --output duckdb-binaries-osx.zip https://artifacts.duckdb.org/latest/duckdb-binaries-osx.zip && + unzip duckdb-binaries-osx.zip && + unzip duckdb_cli-osx-universal.zip +- variant: nightly + environment: Command line + platform: Linux + download_method: Direct download + architecture: x86_64 + link: 'https://artifacts.duckdb.org/latest/duckdb-binaries-linux-amd64.zip' + installation_code: >- + curl -fL --progress-bar --output duckdb-binaries-linux-amd64.zip https://artifacts.duckdb.org/latest/duckdb-binaries-linux-amd64.zip && + unzip duckdb-binaries-linux-amd64.zip && + unzip duckdb_cli-linux-amd64.zip +- variant: nightly + environment: Command line + platform: Linux + download_method: Direct download + architecture: arm64 + link: 'https://artifacts.duckdb.org/latest/duckdb-binaries-linux-arm64.zip' + installation_code: >- + curl -fL --progress-bar --output duckdb-binaries-linux-arm64.zip https://artifacts.duckdb.org/latest/duckdb-binaries-linux-arm64.zip && + unzip duckdb-binaries-linux-arm64.zip && + unzip duckdb_cli-linux-arm64.zip +- variant: nightly + environment: Python + platform: all + download_method: Package manager + architecture: universal + installation_code: pip install duckdb --pre --upgrade + note: >- + The DuckDB Python package requires the Microsoft Visual C++ Redistributable. +- variant: nightly + environment: R + platform: all + download_method: Package manager + architecture: universal + installation_code: | + install.packages("pak") + pak::pak("duckdb/duckdb-r") + note: >- + On certain platforms, such as Linux AArch64 (arm64), the DuckDB R package needs to be compiled from source. + To speed up this process, follow the instructions on the R build page. +- variant: nightly + environment: Java + platform: all + download_method: Package manager + architecture: universal + installation_code: >- + + + org.duckdb + duckdb_jdbc + 1.4.0-SNAPSHOT + + + + + oss-sonatype + oss-sonatype + https://oss.sonatype.org/content/repositories/snapshots/ + + true + + + + note: 'Nightly Java builds are served through the Sonatype snapshots repository.' +- variant: nightly + environment: Java + platform: all + download_method: Direct download + architecture: universal + link: 'https://artifacts.duckdb.org/duckdb-java/latest/java-jars.zip' +- variant: nightly + environment: Node.js + platform: all + download_method: Package manager + architecture: universal + installation_code: npm install duckdb@next + note: The nightly release of the Node.js driver installs the old Node.js driver and not DuckDB Node Neo. For the Node Neo driver, the nightly release is currently not available. +- variant: nightly + environment: C/C++ + platform: Windows + download_method: Direct download + architecture: universal + link: 'https://artifacts.duckdb.org/latest/duckdb-binaries-windows.zip' +- variant: nightly + environment: C/C++ + platform: macOS + download_method: Direct download + architecture: universal + link: 'https://artifacts.duckdb.org/latest/duckdb-binaries-osx.zip' +- variant: nightly + environment: C/C++ + platform: Linux + download_method: Direct download + architecture: x86_64 + link: 'https://artifacts.duckdb.org/latest/duckdb-binaries-linux-amd64.zip' +- variant: nightly + environment: C/C++ + platform: Linux + download_method: Direct download + architecture: arm64 + link: 'https://artifacts.duckdb.org/latest/duckdb-binaries-linux-arm64.zip' +- variant: nightly + environment: ODBC + platform: Windows + download_method: Direct download + architecture: x86_64 + link: 'https://artifacts.duckdb.org/duckdb-odbc/main/odbc-windows-amd64.zip' +- variant: nightly + environment: ODBC + platform: macOS + download_method: Direct download + architecture: universal + link: 'https://artifacts.duckdb.org/duckdb-odbc/main/odbc-osx-universal.zip' +- variant: nightly + environment: ODBC + platform: Linux + download_method: Direct download + architecture: x86_64 + link: 'https://artifacts.duckdb.org/duckdb-odbc/main/odbc-linux-amd64.zip' +- variant: nightly + environment: ODBC + platform: Linux + download_method: Direct download + architecture: arm64 + link: 'https://artifacts.duckdb.org/duckdb-odbc/main/odbc-linux-aarch64.zip' diff --git a/data/latest_stable_version.txt b/data/latest_stable_version.txt index 1892b926767..88c5fb891dc 100644 --- a/data/latest_stable_version.txt +++ b/data/latest_stable_version.txt @@ -1 +1 @@ -1.3.2 +1.4.0 diff --git a/single-file-document/concatenate_to_single_file.py b/single-file-document/concatenate_to_single_file.py index 74705daff5d..8e75d0c739d 100644 --- a/single-file-document/concatenate_to_single_file.py +++ b/single-file-document/concatenate_to_single_file.py @@ -383,7 +383,7 @@ def add_blog_posts(blog_root, of): --- title: DuckDB Documentation subtitle: >- - DuckDB version {config["current_snapshot_version"]}\\newline + DuckDB version {config["current_duckdb_version"]}\\newline Generated on {datetime.now(timezone.utc).strftime("%Y-%m-%d at %H:%M UTC")} --- """)) From 72d32dcdb4408e873c2e7d6534fac3a728ea54cd Mon Sep 17 00:00:00 2001 From: Gabor Szarnyas Date: Wed, 10 Sep 2025 16:31:33 +0200 Subject: [PATCH 02/12] date --- ...nouncing-duckdb-140.md => 2025-09-15-announcing-duckdb-140.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename _posts/{2025-09-10-announcing-duckdb-140.md => 2025-09-15-announcing-duckdb-140.md} (100%) diff --git a/_posts/2025-09-10-announcing-duckdb-140.md b/_posts/2025-09-15-announcing-duckdb-140.md similarity index 100% rename from _posts/2025-09-10-announcing-duckdb-140.md rename to _posts/2025-09-15-announcing-duckdb-140.md From d4aef22d79e68d350c355a93363bce8e0c54db14 Mon Sep 17 00:00:00 2001 From: Gabor Szarnyas Date: Mon, 15 Sep 2025 16:19:35 +0200 Subject: [PATCH 03/12] bump --- ...cing-duckdb-140.md => 2025-09-16-announcing-duckdb-140.md} | 4 ++++ 1 file changed, 4 insertions(+) rename _posts/{2025-09-15-announcing-duckdb-140.md => 2025-09-16-announcing-duckdb-140.md} (84%) diff --git a/_posts/2025-09-15-announcing-duckdb-140.md b/_posts/2025-09-16-announcing-duckdb-140.md similarity index 84% rename from _posts/2025-09-15-announcing-duckdb-140.md rename to _posts/2025-09-16-announcing-duckdb-140.md index c3bfdc3707a..269a2efd644 100644 --- a/_posts/2025-09-15-announcing-duckdb-140.md +++ b/_posts/2025-09-16-announcing-duckdb-140.md @@ -15,6 +15,10 @@ which lives in the Andean highlands of Colombia, Venezuela and Ecuador. In this blog post, we cover the most important features of the new release. DuckDB is moving rather quickly, and we could cover only a small fraction of the changes in this release. For the complete release notes, see the [release page on GitHub](https://github.com/duckdb/duckdb/releases/tag/v1.4.0). +{: .lightmode-img } +{: .darkmode-img } + + ## Breaking Changes and Deprecations From 8d01d9999f087662286fdc1ff2122cc125089e24 Mon Sep 17 00:00:00 2001 From: Gabor Szarnyas Date: Mon, 15 Sep 2025 17:48:45 +0200 Subject: [PATCH 04/12] vid --- _posts/2025-09-16-announcing-duckdb-140.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/_posts/2025-09-16-announcing-duckdb-140.md b/_posts/2025-09-16-announcing-duckdb-140.md index 269a2efd644..8aad75d30fd 100644 --- a/_posts/2025-09-16-announcing-duckdb-140.md +++ b/_posts/2025-09-16-announcing-duckdb-140.md @@ -15,9 +15,13 @@ which lives in the Andean highlands of Colombia, Venezuela and Ecuador. In this blog post, we cover the most important features of the new release. DuckDB is moving rather quickly, and we could cover only a small fraction of the changes in this release. For the complete release notes, see the [release page on GitHub](https://github.com/duckdb/duckdb/releases/tag/v1.4.0). -{: .lightmode-img } -{: .darkmode-img } + + ## Breaking Changes and Deprecations From 4d8b8a7e706839bbd862360f4736b84ca6400e9f Mon Sep 17 00:00:00 2001 From: Gabor Szarnyas Date: Tue, 16 Sep 2025 09:54:35 +0200 Subject: [PATCH 05/12] Release blog post complete --- _posts/2025-09-16-announcing-duckdb-140.md | 214 ++++++++++++++++++++- 1 file changed, 208 insertions(+), 6 deletions(-) diff --git a/_posts/2025-09-16-announcing-duckdb-140.md b/_posts/2025-09-16-announcing-duckdb-140.md index 8aad75d30fd..50e2d5aaf96 100644 --- a/_posts/2025-09-16-announcing-duckdb-140.md +++ b/_posts/2025-09-16-announcing-duckdb-140.md @@ -4,17 +4,168 @@ title: "Announcing DuckDB 1.4.0" author: "The DuckDB team" thumb: "/images/blog/thumbs/duckdb-release-1-4-0.svg" image: "/images/blog/thumbs/duckdb-release-1-4-0.png" -excerpt: "The DuckDB team is happy to announce that today we're releasing DuckDB version 1.4.0, codenamed “Andium”." +excerpt: "We're releasing DuckDB version 1.4.0, codenamed “Andium”. This is an LTS release with 1 year of community support, which packs new features such as database encryption, the MERGE statement and Iceberg writes." tags: ["release"] --- -> To install the new version, please visit the [installation guide]({% link docs/installation/index.html %}). Note that it can take a few hours to days to release some client libraries (e.g., Go, R, Java) and extensions due to the extra changes and review rounds required. +We are proud to release DuckDB v1.4.0, named “Andium” after the _Andean teal_ (Anas andium), which lives in the Andean highlands of Colombia, Venezuela and Ecuador. -We are proud to release DuckDB 1.4.0. This release of DuckDB is named “Andium” after the Andean teal _(Anas andium),_ -which lives in the Andean highlands of Colombia, Venezuela and Ecuador. +In this blog post, we cover the most important updates for this release around support, features and extensions. DuckDB is moving rather quickly, and we could cover only a small fraction of the changes in this release. For the complete release notes, see the [release page on GitHub](https://github.com/duckdb/duckdb/releases/tag/v1.4.0). -In this blog post, we cover the most important features of the new release. DuckDB is moving rather quickly, and we could cover only a small fraction of the changes in this release. For the complete release notes, see the [release page on GitHub](https://github.com/duckdb/duckdb/releases/tag/v1.4.0). +> To install the new version, please visit the new [installation page]({% link install/index.html %}). Note that it can take a few days to release some client libraries (e.g., Go, R, Java) due to the extra changes and review rounds required. +## Long Term Support (LTS) Edition + +We are delighted to see that DuckDB is used regularly in production environments and realize that such deployments often come with a requirement for long-term maintenance. +In the past, we would automatically deprecate old DuckDB versions whenever the newer version was released. But we’re changing this today. + +Starting with this release, every _other_ DuckDB version is going to be a Long Term Support (LTS) edition. +For LTS DuckDB versions, [community support](https://duckdblabs.com/community_support_policy/) will last a year after the release (for now). +[DuckDB Labs](https://duckdblabs.com/) is also starting to offer support for older LTS versions after their community support has expired. + +| Version | Codename | End of community support | +| ---------: | ------------ | ------------------------ | +| 0.\* | | 2024-06-03 | +| 1.0.\* | Nivis | 2024-09-09 | +| 1.1.\* | Eatoni | 2025-02-05 | +| 1.2.\* | Histrionicus | 2025-05-21 | +| 1.3.\* | Ossivalis | 2025-09-15 | +| 1.4.\* LTS | Andium | 2026-09-15 | + +## New Features + +### Database Encryption + +Being able to encrypt DuckDB database files has been a [long-standing feature request](https://github.com/duckdb/duckdb/discussions/4512). Starting with this release, DucKDB supports encryption of its files. Encryption keys are given using the `ENCRYPTION_KEY` parameter for to [`ATTACH`]({% link docs/stable/sql/statements/attach.md %}), like so: + +```sql +ATTACH 'encrypted.db' AS enc (ENCRYPTION_KEY 'asdf'); +``` + +DuckDB uses the industry-standard [AES encryption](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) with a key length of 256 bits using the recommended [GCM](https://en.wikipedia.org/wiki/Galois/Counter_Mode) mode by default. + +The encryption covers the main database file, the write-ahead-log (WAL) file, and even temporary files. To encrypt data, DuckDB can use either the built-in `mbedtls` library or the OpenSSL library from the `httpfs` extension. Note that the OpenSSL versions are much faster due to hardware acceleration, so make sure to `LOAD httpfs` for good encryption performance. + +Encryption support in DuckDB was implemented by [Lotte Felius (@ccfelius)](https://github.com/ccfelius). + +### `MERGE` Statement + +DuckDB now supports `MERGE INTO` as an alternative to `INSERT INTO ... ON CONFLICT`. +`MERGE INTO` does not require a primary key since it works on any custom merge condition. This is a very common statement in OLAP systems that do not support primary keys but still want to support upserting (i.e., `UPDATE` plus `INSERT`) functionality. + +In this example we use a simple condition matching on a key and we call the `RETURNING` statement to get a summary of the updated and inserted rows. + +```sql +CREATE TABLE Stock(item_id INTEGER, balance INTEGER); +INSERT INTO Stock VALUES (10, 2200), (20, 1900); + +WITH new_stocks(item_id, volume) AS (VALUES (20, 2200), (30, 1900)) + MERGE INTO Stock + USING new_stocks USING (item_id) + WHEN MATCHED + THEN UPDATE SET balance = balance + volume + WHEN NOT MATCHED + THEN INSERT VALUES (new_stocks.item_id, new_stocks.volume) + RETURNING merge_action, *; +``` + +```text +┌──────────────┬─────────┬─────────┐ +│ merge_action │ item_id │ balance │ +│ varchar │ int32 │ int32 │ +├──────────────┼─────────┼─────────┤ +│ UPDATE │ 20 │ 4100 │ +│ INSERT │ 30 │ 1900 │ +└──────────────┴─────────┴─────────┘ +``` + +`MERGE INTO` also supports more complex conditions and DELETE statements. + +```sql +WITH deletes(item_id, delete_threshold) AS (VALUES (10, 3000)) + MERGE INTO Stock + USING deletes USING (item_id) + WHEN MATCHED AND balance < delete_threshold + THEN DELETE + RETURNING merge_action, *; +``` + +```text +┌──────────────┬─────────┬─────────┐ +│ merge_action │ item_id │ balance │ +│ varchar │ int32 │ int32 │ +├──────────────┼─────────┼─────────┤ +│ DELETE │ 10 │ 2200 │ +└──────────────┴─────────┴─────────┘ +``` + + + +### Iceberg Writes + +The [duckdb-iceberg]({% link docs/stable/core_extensions/iceberg/overview.md %}) extension now **supports writing to Iceberg**. + +
+ +Click to see the code snippet showing Iceberg writes. + +```sql +-- Having setup an Iceberg REST catalog using +-- https://github.com/duckdb/duckdb-iceberg/blob/main/scripts/start-rest-catalog.sh +INSTALL iceberg; +LOAD iceberg; +ATTACH '' AS iceberg_datalake ( + TYPE ICEBERG, + CLIENT_ID 'admin', + CLIENT_SECRET 'password', + ENDPOINT 'http://127.0.0.1:8181' + ); +CREATE SECRET ( + TYPE S3, + KEY_ID 'admin', + SECRET 'password', + ENDPOINT '127.0.0.1:9000', + URL_STYLE 'path', + USE_SSL 0 + ); +USE iceberg_datalake.default; +ATTACH ‘duckdb.db’ AS duckdb_db; +CREATE TABLE duckdb_db.t AS SELECT range a FROM range(4); +CREATE TABLE t AS SELECT * FROM duckdb_db.t; +FROM iceberg_datalake.default.t; +``` + +```text +┌───────┐ +│ a │ +│ int64 │ +├───────┤ +│ 0 │ +│ 1 │ +│ 2 │ +│ 3 │ +└───────┘ +``` +
+ +This means that copying data from DuckDB or DuckLake to Iceberg is now possible. + +* **Copying from Iceberg to DuckDB/DuckLake** is also supported via the `COPY` statement: + + ```sql + COPY FROM DATABASE iceberg_datalake TO duckdb_db; + ``` + +* **Copying from DuckLake/DuckDB to Iceberg** needs manual creation of the schemas on the Iceberg side of things: + + ```sql + CREATE SCHEMA iceberg_datalake.main; + COPY FROM DATABASE duckdb_db TO iceberg_datalake; + ``` + +### CLI Progress Bar ETA + +Community member [Rusty Conover (@rustyconover)](https://github.com/rustyconover) [contributed](https://github.com/duckdb/duckdb/pull/18575) an ETA (estimated time of arrival) feature to the DuckDB command line client. Estimating the remaining time is a difficult problem as progress measurements can vary a lot due to noise. To alleviate this, the new feature estimate uses a Kalman filter to improve estimates. Here's how it works in practice: -## Breaking Changes and Deprecations +### `FILL` Window Function + +[Richard (@hawkfish)](https://github.com/hawkfish) built a new window function, `FILL`, that can be used to _interpolate_ missing values in ordered windows. Here is an example, you can see a missing value between 1 and 42, it's interpolated to 21 in the result. + +```SQL +FROM (VALUES (1, 1), (2, NULL), (3, 42)) t(c1, c2) SELECT fill(c2) OVER (ORDER BY c1) f; +``` + +This will be the result: +| f | +|---:| +| 1 | +| 21 | +| 42 | + +### Teradata Connector + +DuckDB now has a [Teradata Connector](https://github.com/duckdb/duckdb-teradata). +A separate blog post will be coming. + +## Performance and Optimizations + +### Sorting Rework + +[Laurens (@lnkuiper)](https://github.com/lnkuiper) [rewrote DuckDB’s sorting implementation](https://github.com/duckdb/duckdb/pull/17584#thread-scaling-performance) ([again](https://github.com/duckdb/duckdb/pull/1561)). This new implementation uses a k-way merge sort to reduce data movement. It is also adaptive to pre-sorted data and uses a new API that makes it possible to use this new sorting code elsewhere in DuckDB, for example in window functions. We are seeing much better thread scaling performance with this implementation. We will publish a separate blog post with more detailed performance measurements. + +### Materializing Common Table Expressions + +Common table expressions (CTEs) are now materialized by default (instead of inlining them). This both improves performance and resolves some correctness bugs that happened due to inlining. +This feature was [implemented](https://github.com/duckdb/duckdb/pull/17459) by [Denis Hirn (kryonix)](https://github.com/kryonix), who [contributed support for recursive CTEs](https://github.com/duckdb/duckdb/pull/404) back in 2020. + +### Checkpointing In-Memory Tables + +In-memory tables now support [checkpointing](https://github.com/duckdb/duckdb/pull/18348). This has two key benefits: + +1. In-memory tables now support compression. This is disabled by default – you can turn it on using: + +```sql +ATTACH ':memory:' AS memory_compressed (COMPRESS); +``` + +Checkpointing triggers vacuuming deleted rows, allowing space to be reclaimed after deletes/truncation. + +## Distribution + +### MacOS Notarization + +MacOS has a fairly advanced model to ensure system integrity built around cryptographic signatures along with so-called “[notarization](https://developer.apple.com/documentation/Security/notarizing-macos-software-before-distribution)” by Apple. We had been signing our binaries [for about two years already](https://github.com/duckdb/duckdb/pull/7484). +Starting from this release, the DuckDB command line utility (`duckdb`) and the dynamic library `libduckdb…dylib` are _released with this notarization_. This will reduce the amount of complaints when using web browsers to download our binaries. Unfortunately, macOS does not yet fully support notarization of command line utility, so the “open with double click” use case will still have to wait. The recommended path to install the CLI on macOS is still our install script: `curl https://install.duckdb.org | bash` +### Moved Python Integration to its Own Repository +We have been slowly moving language integrations (“clients”) into their own repositories from `duckdb/duckdb`. For this release, we moved the Python client to its [own repository](https://github.com/duckdb/duckdb-python), `duckdb/duckdb-python`. Please make sure to [file issues](https://github.com/duckdb/duckdb-python/issues/new) related to the Python client there. ## Final Thoughts +These were a few highlights – but there are many more features and improvements in this release. There have been over 3,500 commits by over 90 contributors since we released v1.3.2. The full release notes can be [found on GitHub](https://github.com/duckdb/duckdb/releases/tag/v1.4.0). We would like to thank our community for providing detailed issue reports and feedback. And our special thanks goes to external contributors, who directly landed features in this release! From 062cf105932c09cf45488db086e80e9da4cb11f2 Mon Sep 17 00:00:00 2001 From: Gabor Szarnyas Date: Tue, 16 Sep 2025 10:27:41 +0200 Subject: [PATCH 06/12] edits --- _data/past_releases.csv | 106 ++++++++++----------- _posts/2025-09-16-announcing-duckdb-140.md | 23 ++++- images/blog/lts-support.svg | 62 ++++++++++++ 3 files changed, 133 insertions(+), 58 deletions(-) create mode 100644 images/blog/lts-support.svg diff --git a/_data/past_releases.csv b/_data/past_releases.csv index e62afcb3c4d..9d202ae20fe 100644 --- a/_data/past_releases.csv +++ b/_data/past_releases.csv @@ -1,53 +1,53 @@ -release_date,version_number,codename,duck_species_primary,duck_species_secondary,duck_wikipage,blog_post -2025-09-10,1.4.0,Andium,Anas andium,Andean teal,https://en.wikipedia.org/wiki/Andean_teal,https://duckdb.org/2025/09/10/announcing-duckdb-140 -2025-07-08,1.3.2,,,,, -2025-06-16,1.3.1,,,,, -2025-05-21,1.3.0,Ossivalis,Bucephala ossivalis,Goldeneye duck,https://en.wikipedia.org/wiki/Goldeneye_(duck),https://duckdb.org/2025/05/21/announcing-duckdb-130 -2025-04-08,1.2.2,,,,, -2025-03-05,1.2.1,,,,, -2025-02-05,1.2.0,Histrionicus,Histrionicus histrionicus,Harlequin duck,https://en.wikipedia.org/wiki/Harlequin_duck,https://duckdb.org/2025/02/05/announcing-duckdb-120 -2024-11-04,1.1.3,,,,, -2024-10-14,1.1.2,,,,, -2024-09-24,1.1.1,,,,, -2024-09-09,1.1.0,Eatoni,Anas eatoni,Eaton's pintail,https://en.wikipedia.org/wiki/Eaton%27s_pintail,https://duckdb.org/2024/09/09/announcing-duckdb-110 -2024-06-03,1.0.0,Nivis,Anas nivis,Snow duck,,https://duckdb.org/2024/06/03/announcing-duckdb-100 -2024-05-22,0.10.3,,,,, -2024-04-17,0.10.2,,,,, -2024-03-18,0.10.1,,,,, -2024-02-13,0.10.0,Fusca,Melanitta fusca,Velvet scoter,https://en.wikipedia.org/wiki/Velvet_scoter,https://duckdb.org/2024/02/13/announcing-duckdb-0100 -2023-11-14,0.9.2,,,,, -2023-10-11,0.9.1,,,,, -2023-09-26,0.9.0,Undulata,Anas undulata,Yellow-billed duck,https://en.wikipedia.org/wiki/Yellow-billed_duck,https://duckdb.org/2023/09/26/announcing-duckdb-090 -2023-06-13,0.8.1,,,,, -2023-05-17,0.8.0,Fulvigula,Anas fulvigula,Mottled duck,https://en.wikipedia.org/wiki/Mottled_duck,https://duckdb.org/2023/05/17/announcing-duckdb-080 -2023-02-27,0.7.1,,,,, -2023-02-13,0.7.0,Labradorius,Camptorhynchus labradorius,Labrador duck,https://en.wikipedia.org/wiki/Labrador_duck,https://duckdb.org/2023/02/13/announcing-duckdb-070 -2022-12-06,0.6.1,,,,, -2022-11-14,0.6.0,Oxyura,Oxyura leucocephala,White-headed duck,https://en.wikipedia.org/wiki/White-headed_duck,https://duckdb.org/2022/11/14/announcing-duckdb-060 -2022-09-19,0.5.1,,,,, -2022-09-05,0.5.0,Pulchellus,Nettapus pulchellus,Green pygmy goose,https://en.wikipedia.org/wiki/Green_pygmy_goose, -2022-06-20,0.4.0,Ferruginea,Oxyura ferruginea,Andean duck,https://en.wikipedia.org/wiki/Andean_duck, -2022-04-25,0.3.4,,,,, -2022-04-11,0.3.3,Sansaniensis,Chenoanas sansaniensis,,https://species.wikimedia.org/wiki/Chenoanas_sansaniensis, -2022-02-07,0.3.2,Gibberifrons,Anas gibberifrons,Sunda teal,https://en.wikipedia.org/wiki/Sunda_teal, -2021-11-16,0.3.1,Spectabilis,Somateria spectabilis,King eider,https://en.wikipedia.org/wiki/King_eider, -2021-10-06,0.3.0,Gracilis,Anas gracilis,Grey teal,https://en.wikipedia.org/wiki/Grey_teal, -2021-09-06,0.2.9,Platyrhynchos,Anas platyrhynchos,Mallard,https://en.wikipedia.org/wiki/Mallard, -2021-08-02,0.2.8,Ceruttii,Histrionicus ceruttii,,https://en.wikipedia.org/wiki/Harlequin_duck#Taxonomy, -2021-06-14,0.2.7,Mollissima,Somateria mollissima,Common eider,https://en.wikipedia.org/wiki/Common_eider, -2021-05-08,0.2.6,Jamaicensis,Oxyura jamaicensis,Blue-billed ruddy duck,https://en.wikipedia.org/wiki/Ruddy_duck, -2021-03-10,0.2.5,Falcata,Mareca falcata,Falcated duck,https://en.wikipedia.org/wiki/Falcated_duck, -2021-02-02,0.2.4,Jubata,Chenonetta jubata,Australian wood duck,https://en.wikipedia.org/wiki/Australian_wood_duck, -2020-12-03,0.2.3,Serrator,Mergus serrator,Red-breasted merganser,https://en.wikipedia.org/wiki/Red-breasted_merganser, -2020-11-01,0.2.2,Clypeata,Spatula clypeata,Northern shoveler,https://en.wikipedia.org/wiki/Northern_shoveler, -2020-08-29,0.2.1,,,,, -2020-07-23,0.2.0,,,,, -2020-06-19,0.1.9,,,,, -2020-05-29,0.1.8,,,,, -2020-05-04,0.1.7,,,,, -2020-04-05,0.1.6,,,,, -2020-03-02,0.1.5,,,,, -2020-02-03,0.1.3,,,,, -2020-01-06,0.1.2,,,,, -2019-09-24,0.1.1,,,,, -2019-06-27,0.1.0,,,,, +release_date,version_number,codename,duck_species_primary,duck_species_secondary,duck_wikipage,blog_post,end_of_life +2025-09-10,1.4.0,Andium,Anas andium,Andean teal,https://en.wikipedia.org/wiki/Andean_teal,https://duckdb.org/2025/09/10/announcing-duckdb-140,2026-09-16 +2025-07-08,1.3.2,,,,,, +2025-06-16,1.3.1,,,,,, +2025-05-21,1.3.0,Ossivalis,Bucephala ossivalis,Goldeneye duck,https://en.wikipedia.org/wiki/Goldeneye_(duck),https://duckdb.org/2025/05/21/announcing-duckdb-130,2025-09-16 +2025-04-08,1.2.2,,,,,, +2025-03-05,1.2.1,,,,,, +2025-02-05,1.2.0,Histrionicus,Histrionicus histrionicus,Harlequin duck,https://en.wikipedia.org/wiki/Harlequin_duck,https://duckdb.org/2025/02/05/announcing-duckdb-120,2025-05-21 +2024-11-04,1.1.3,,,,,, +2024-10-14,1.1.2,,,,,, +2024-09-24,1.1.1,,,,,, +2024-09-09,1.1.0,Eatoni,Anas eatoni,Eaton's pintail,https://en.wikipedia.org/wiki/Eaton%27s_pintail,https://duckdb.org/2024/09/09/announcing-duckdb-110,2025-02-05 +2024-06-03,1.0.0,Nivis,Anas nivis,Snow duck,,https://duckdb.org/2024/06/03/announcing-duckdb-100,2024-09-09 +2024-05-22,0.10.3,,,,,, +2024-04-17,0.10.2,,,,,, +2024-03-18,0.10.1,,,,,, +2024-02-13,0.10.0,Fusca,Melanitta fusca,Velvet scoter,https://en.wikipedia.org/wiki/Velvet_scoter,https://duckdb.org/2024/02/13/announcing-duckdb-0100,2024-06-03 +2023-11-14,0.9.2,,,,,, +2023-10-11,0.9.1,,,,,, +2023-09-26,0.9.0,Undulata,Anas undulata,Yellow-billed duck,https://en.wikipedia.org/wiki/Yellow-billed_duck,https://duckdb.org/2023/09/26/announcing-duckdb-090, +2023-06-13,0.8.1,,,,,, +2023-05-17,0.8.0,Fulvigula,Anas fulvigula,Mottled duck,https://en.wikipedia.org/wiki/Mottled_duck,https://duckdb.org/2023/05/17/announcing-duckdb-080, +2023-02-27,0.7.1,,,,,, +2023-02-13,0.7.0,Labradorius,Camptorhynchus labradorius,Labrador duck,https://en.wikipedia.org/wiki/Labrador_duck,https://duckdb.org/2023/02/13/announcing-duckdb-070, +2022-12-06,0.6.1,,,,,, +2022-11-14,0.6.0,Oxyura,Oxyura leucocephala,White-headed duck,https://en.wikipedia.org/wiki/White-headed_duck,https://duckdb.org/2022/11/14/announcing-duckdb-060, +2022-09-19,0.5.1,,,,,, +2022-09-05,0.5.0,Pulchellus,Nettapus pulchellus,Green pygmy goose,https://en.wikipedia.org/wiki/Green_pygmy_goose,, +2022-06-20,0.4.0,Ferruginea,Oxyura ferruginea,Andean duck,https://en.wikipedia.org/wiki/Andean_duck,, +2022-04-25,0.3.4,,,,,, +2022-04-11,0.3.3,Sansaniensis,Chenoanas sansaniensis,,https://species.wikimedia.org/wiki/Chenoanas_sansaniensis,, +2022-02-07,0.3.2,Gibberifrons,Anas gibberifrons,Sunda teal,https://en.wikipedia.org/wiki/Sunda_teal,, +2021-11-16,0.3.1,Spectabilis,Somateria spectabilis,King eider,https://en.wikipedia.org/wiki/King_eider,, +2021-10-06,0.3.0,Gracilis,Anas gracilis,Grey teal,https://en.wikipedia.org/wiki/Grey_teal,, +2021-09-06,0.2.9,Platyrhynchos,Anas platyrhynchos,Mallard,https://en.wikipedia.org/wiki/Mallard,, +2021-08-02,0.2.8,Ceruttii,Histrionicus ceruttii,,https://en.wikipedia.org/wiki/Harlequin_duck#Taxonomy,, +2021-06-14,0.2.7,Mollissima,Somateria mollissima,Common eider,https://en.wikipedia.org/wiki/Common_eider,, +2021-05-08,0.2.6,Jamaicensis,Oxyura jamaicensis,Blue-billed ruddy duck,https://en.wikipedia.org/wiki/Ruddy_duck,, +2021-03-10,0.2.5,Falcata,Mareca falcata,Falcated duck,https://en.wikipedia.org/wiki/Falcated_duck,, +2021-02-02,0.2.4,Jubata,Chenonetta jubata,Australian wood duck,https://en.wikipedia.org/wiki/Australian_wood_duck,, +2020-12-03,0.2.3,Serrator,Mergus serrator,Red-breasted merganser,https://en.wikipedia.org/wiki/Red-breasted_merganser,, +2020-11-01,0.2.2,Clypeata,Spatula clypeata,Northern shoveler,https://en.wikipedia.org/wiki/Northern_shoveler,, +2020-08-29,0.2.1,,,,,, +2020-07-23,0.2.0,,,,,, +2020-06-19,0.1.9,,,,,, +2020-05-29,0.1.8,,,,,, +2020-05-04,0.1.7,,,,,, +2020-04-05,0.1.6,,,,,, +2020-03-02,0.1.5,,,,,, +2020-02-03,0.1.3,,,,,, +2020-01-06,0.1.2,,,,,, +2019-09-24,0.1.1,,,,,, +2019-06-27,0.1.0,,,,,, diff --git a/_posts/2025-09-16-announcing-duckdb-140.md b/_posts/2025-09-16-announcing-duckdb-140.md index 50e2d5aaf96..51d5a4f95b4 100644 --- a/_posts/2025-09-16-announcing-duckdb-140.md +++ b/_posts/2025-09-16-announcing-duckdb-140.md @@ -23,20 +23,33 @@ Starting with this release, every _other_ DuckDB version is going to be a Long T For LTS DuckDB versions, [community support](https://duckdblabs.com/community_support_policy/) will last a year after the release (for now). [DuckDB Labs](https://duckdblabs.com/) is also starting to offer support for older LTS versions after their community support has expired. +
+ DuckDB Long-Term Support +
+ +
+ +Click to see the end-of-life (EOL) dates for DuckDB releases. + | Version | Codename | End of community support | | ---------: | ------------ | ------------------------ | | 0.\* | | 2024-06-03 | | 1.0.\* | Nivis | 2024-09-09 | | 1.1.\* | Eatoni | 2025-02-05 | | 1.2.\* | Histrionicus | 2025-05-21 | -| 1.3.\* | Ossivalis | 2025-09-15 | -| 1.4.\* LTS | Andium | 2026-09-15 | +| 1.3.\* | Ossivalis | 2025-09-16 | +| 1.4.\* LTS | Andium | 2026-09-16 | +
## New Features ### Database Encryption -Being able to encrypt DuckDB database files has been a [long-standing feature request](https://github.com/duckdb/duckdb/discussions/4512). Starting with this release, DucKDB supports encryption of its files. Encryption keys are given using the `ENCRYPTION_KEY` parameter for to [`ATTACH`]({% link docs/stable/sql/statements/attach.md %}), like so: +Being able to encrypt DuckDB database files has been a [long-standing feature request](https://github.com/duckdb/duckdb/discussions/4512). Starting with this release, DuckDB supports encryption of its files. Encryption keys are given using the `ENCRYPTION_KEY` parameter for to [`ATTACH`]({% link docs/stable/sql/statements/attach.md %}), like so: ```sql ATTACH 'encrypted.db' AS enc (ENCRYPTION_KEY 'asdf'); @@ -129,7 +142,7 @@ CREATE SECRET ( USE_SSL 0 ); USE iceberg_datalake.default; -ATTACH ‘duckdb.db’ AS duckdb_db; +ATTACH 'duckdb.db' AS duckdb_db; CREATE TABLE duckdb_db.t AS SELECT range a FROM range(4); CREATE TABLE t AS SELECT * FROM duckdb_db.t; FROM iceberg_datalake.default.t; @@ -165,7 +178,7 @@ This means that copying data from DuckDB or DuckLake to Iceberg is now possible. ### CLI Progress Bar ETA -Community member [Rusty Conover (@rustyconover)](https://github.com/rustyconover) [contributed](https://github.com/duckdb/duckdb/pull/18575) an ETA (estimated time of arrival) feature to the DuckDB command line client. Estimating the remaining time is a difficult problem as progress measurements can vary a lot due to noise. To alleviate this, the new feature estimate uses a Kalman filter to improve estimates. Here's how it works in practice: +Community member [Rusty Conover (@rustyconover)](https://github.com/rustyconover) [contributed](https://github.com/duckdb/duckdb/pull/18575) an ETA (estimated time of arrival) feature to the DuckDB command line client. Estimating the remaining time is a [difficult problem](https://xkcd.com/612/) as progress measurements can vary a lot due to noise. To alleviate this, the ETA feature first collects some initial performance data, then continues to refine its estimate using a [Kalman filter](https://en.wikipedia.org/wiki/Kalman_filter). Here's how it works in practice: