本文へスキップ

DuckDB 2.0 LTSがサーバーモード、トリガー、VARIANT型を追加

DuckDB 2.0.0は10月21日に公開された長期サポート(LTS)リリースで、サーバーモード、トリガー、VARIANT(バリアント)型を追加しました。2.0より前のバージョンは、2.0のファイルを読み込めません。

著者 Tech AI Wire Team

4 分で読めます

DuckDBによる2.0リリースのアートワーク。黄色の背景に、飛んでいるカモが点線で描かれています。
写真: DuckDB

数字で見る

commits since DuckDB 1.5, per the DuckDB team
~20,000
earliest end of support for DuckDB 2.0
Oct 2027
extended end of support for DuckDB 1.5
March 2027

DuckDBは2026年10月21日にバージョン2.0.0をリリースしました。長期サポート(LTS)リリースで、プロジェクトは少なくとも2027年10月までサポートします。組み込みのサーバーモード、SQLトリガー、新しいパーサーが加わりました。一方で、元に戻せない変更もあります。2.0で書き込んだデータベースファイルは、それより前のどのバージョンでも開けないため、アップグレードには計画が必要です。

DuckDBは、分析向けのオープンソースSQLデータベースです。SQLiteと同じく、独立したサーバーとしてではなく、プログラムの内部で動作します。SQLiteと違い、大きなテーブルや、ParquetやCSVなどのファイルに対する大規模な分析クエリ向けに作られています。

DuckDB 2.0で加わった機能

DuckDBの発表は、2.0をチームにとってこれまでで最大の機能リリースと呼んでいます。バージョン1.5以降の20,000件近いコミットから作られたものです。DuckDBチームは「DuckDB 2.0は、何よりもまず機能リリースです」と書いています。このリリースのコードネームは「Cinnamon Teal」で、カモの一種であるSpatula cyanopteraにちなんでいます。GitHubのリリースでは「Cyanoptera」という名前が使われています。

機能内容
QuackサーバーモードDuckDBを、他のクライアントが接続するサーバーとして動かします
トリガーCREATE TRIGGERは、テーブルへの変更の前または後に、SQLを自動的に実行します
VARIANT型JSONなどの半構造化データを保存し、共通の構造を切り出して、圧縮率と速度を高めます
非同期I/Oクエリの実行中にParquetやCSVのファイルを読み込み、複数のリクエストを同時に処理します。主な目的は、Amazon S3などのクラウドストレージの高速化です
新しいSQLパーサーPEGベースのパーサーがデフォルトになりました。拡張機能は独自のSQL構文を追加でき、エラーは問題の場所を示します
タイムゾーンのネイティブ対応タイムゾーン、カレンダー、照合順序(collation)に、ICUライブラリが不要になりました

トリガーは、データベースに保存されるルールです。行が変更されたら、このSQLも実行する、というものです。DuckDB 2.0は、行レベルまたはステートメントレベルでBEFOREトリガーとAFTERトリガーをサポートします。UPDATEに対するBEFORE ... FOR EACH ROWトリガーなど、一部の組み合わせはまだサポートされていません。

QuackでDuckDBがサーバーになる

これまでDuckDBは、一度に1つのプログラムにしか対応していませんでした。Quackでは、CALL quack_serve(...)でサーバーを起動し、クライアントはATTACH 'quack:...'で接続します。新しいCONNECT文は、セッション全体をリモートのデータベースに切り替えます。コマンドラインツールにも、対応する-serveと-connectのフラグが加わります。

サーバーは、デフォルトではローカルマシン上でのみ接続を待ち受けます。リモートアクセスについて、DuckDBチームは、TLS暗号化を処理するリバースプロキシの背後に置くことを推奨しています。InfoWorldが8月に報じたところによると、Quackによって、PostgreSQLやMySQLのデータベースにリモートからクエリを実行することも容易になります。

アップグレード前に確認すべき破壊的変更

リリース記事とGitHubのリリースノートによると、次の変更は既存のコードやビルドを壊す可能性があります。

  • ファイルは一方通行です。 DuckDB 2.0は、既存のデータベースファイルを読み書きできます。チームは「DuckDB 2.0より前のバージョンは、DuckDB 2.0で作成されたデータベースファイルを読み込めません」と警告しています。
  • 新しいパーサーがデフォルトです。 SET enable_legacy_parser = true;で古いパーサーに戻せます。
  • 単一矢印のラムダは無効です。 x -> x + 1のような構文は無効化されました。SET lambda_syntax = 'enable_single_arrow';で、バージョン2.1で削除されるまでは再び有効にできます。
  • 整数のゼロ除算は、NULLを返さずにエラーを出すようになりました。
  • ビルドにはC++17が必要です。 以前はC++11でした。また、リリースビルドではClangコンパイラーを使うようになりました。アマルガメーション(amalgamation)ビルドは非推奨になりました。
  • Intel Macは段階的にサポート対象から外れます。 x86_64のmacOS向けには、コミュニティ拡張機能がビルドされなくなりました。DuckDB 2.1では、サポートが打ち切られます。

情報源の間で、1点だけ食い違いがあります。InfoWorldのプレビュー記事は、拡張機能向けの安定したC APIについて説明していました。リリース記事は、刷新されたC API v2について「まだ安定版とはされていない」としています。チームがまず実際の現場で試したいためです。

サポート期間

バージョンサポート期限
DuckDB 2.0(LTS)少なくとも2027年10月まで
DuckDB 1.52027年3月まで(延長)
DuckDB 1.42026年11月下旬まで

開発者にとっての意味

今回は、いつものバージョンアップではなく、計画的な移行として扱ってください。

  • 最初に開く前に、データベースファイルをコピーしてください。 DuckDB 2.0が一度ファイルに書き込むと、1.5を使う古いツールやチームメンバーは、そのファイルを読めなくなります。共有ファイルを読み込むものは、すべて一緒にアップグレードしてください。
  • 本番環境のコピーでテストしてください。 DuckDBチームは、まずシャドーシステムで試すことを推奨しています。ミッションクリティカルな用途では、11月に予定されている最初のパッチリリースを待つよう勧めています。
  • クライアントを確認してください。 コマンドラインツールとPythonクライアントは、すでに対応済みです。Go、R、Javaのクライアントと一部の拡張機能は「数日かかる場合があります」とチームは述べています。
  • SQLで2つのパターンを検索してください。 単一矢印のラムダと、ゼロで割る可能性がある整数除算を探してください。どちらも、動作が変わりました。
  • Quackサーバーを直接公開しないでください。 チームの助言どおり、localhostにとどめるか、前段にTLSリバースプロキシを置いてください。
  • 1.4を使っているチームは、最初に動くべきです。 1.4のサポートは2026年11月下旬に終わります。2.0にアップグレードするか、より小さな一歩として1.5に移行してください。

出典

  1. Announcing DuckDB 2.0.0 - DuckDB
  2. DuckDB v2.0.0 release notes - GitHub
  3. DuckDB 2.0 coming this fall with client-server mode - InfoWorld

関連記事

日の当たる木製デスクに置かれた銀色のApple Mac Studio。隣のモニターにはぼやけたコードが表示され、キーボード、マウス、観葉植物が近くにあります。
開発ツール

PyTorch 2.15、MacでのMoEデコードを最大6.5倍高速化

PyTorch(パイトーチ)2.15は、AppleのGPUでFP8テンソルに対応し、新しいMetalカーネルを追加します。M3 UltraでのQwen3.6-35B-A3Bのデコードは、毎秒9.4トークンから61.3トークンに跳ね上がります。