從進程內資料庫轉向客戶端-伺服器架構
DuckDB 自發布以來一直作為進程內(in-process)資料庫運作,但 2.0 版本透過完善 Quack 協定,正式支援傳統客戶端-伺服器設置。Quack 協定允許任何 DuckDB 程序提供其資料庫服務,並引入了新的 CONNECT 語句,讓使用者能透過單一命令附加並切換至遠端資料庫。
除了 Quack,CONNECT 語句也適用於其他支援該功能的遠端資料庫,包括 PostgreSQL 和 MySQL。對於這些外部資料庫,新版本內建的遠端下推優化器(remote pushdown optimizer)會將查詢直接發送給遠端伺服器執行,而非將整個表格資料拉取到本地處理。
命令列介面(CLI)新增了 -serve 和 -connect 參數,讓使用者能從命令列直接啟動 Quack 伺服器或連接至現有伺服器。預設情況下,伺服器僅監聽 localhost;若要接受其他機器的連線,建議將伺服器置於 TLS 終止反向代理之後,而非直接使用 allow_other_hostname 選項暴露給外部網路。
非同步 I/O 與 VARIANT 型別強化
DuckDB 2.0 引入了非同步 I/O 機制,用於讀取 Parquet 和 CSV 檔案。此功能讓 I/O 層能獨立於查詢處理層擴展,在背景發出讀取請求並保持多個請求進行中,從而大幅提升遠端讀取的平行度,並在 S3:// 等物件儲存環境中顯著加快查詢速度。
VARIANT 型別從實驗性功能轉為一等公民(first-class citizen),用於存儲半結構化、無架構的資料(如 JSON)。與純文字 JSON 不同,VARIANT 能保持列式執行的高效性。2.0 版本會自動偵測資料中的共同結構並進行「shredding」(拆解壓縮),使其在 Parquet 讀寫時具備更好的壓縮率與執行速度。
社群回饋指出,DuckDB 2.0 在高核心數的雲端環境(如 AWS EC2)中表現更佳。有開發者表示,新版本能更有效地利用 CPU 資源至約 192 vCPU,而舊版本通常在 64 vCPU 時效能便已飽和,這使得記錄連結等計算密集型工作負載完成速度更快。
針對 AI 代理優化的 CLI Agent 模式
隨著 Claude Code、Codex 和 Cursor 等編程代理 increasingly 透過使用者驅動 DuckDB CLI,2.0 版本的 CLI 能自動偵測是否由代理執行,並切換至「Agent 模式」。在此模式下,輸出改為精簡的 Markdown 表格而非填充框線,明確標示結果是否被截斷,並提前停止失控查詢,錯誤訊息則以 JSON 格式回報。
對於長時間執行的 SQL 查詢,Agent 模式會在執行前報告預期成本,讓代理決定是否等待。根據 TPC-H 基準測試實驗,啟用 Agent 模式後,模型需要讀取的 DuckDB 輸出量減少了 59%。使用者可透過 -agent 參數手動開啟此模式進行測試,或使用 -no-agent 參數指示代理關閉該功能。
SQL 解析器重寫與擴充性改進
DuckDB 2.0 將預設 SQL 解析器從基於 PostgreSQL 的舊版切換為自研的 PEG(Parsing Expression Grammar)基礎解析器。PEG 語法避免了舊版 YACC/Bison 產生的 LALR(1) 衝突問題,使得新增語法不會破壞現有規則。新解析器支援擴充功能掛載到語法本身,並提供更精確的錯誤來源位置。
若遇到相容性問題,使用者可透過安裝 legacy_parser 擴充功能並執行 SET enable_legacy_parser = true; 來暫時切換回舊版解析器。此外,2.0 版本推出了更強大的 C API v2,允許開發者註冊並託管自己的可信擴充儲存庫(Extension Repositories),組織可自行簽署並分發擴充功能,其安裝與載入方式與內建擴充相同。
觸發器、SQL 語法新增與遷移注意事項
DuckDB 2.0 正式支援 CREATE TRIGGER 語句,包含 BEFORE 和 AFTER 觸發器,以及 FOR EACH ROW 和 FOR EACH STATEMENT 選項。這使得建立審計表(audit tables)或增量維護物化視圖成為可能。不過,部分組合如 BEFORE ... FOR EACH ROW 目前尚未支援。
SQL 方言新增了多項功能,包括 $x 變數簡寫、資料修改 CTEs(允許在管道步驟中使用 INSERT/UPDATE/DELETE)、NEAREST 連接(用於向量相似度搜尋)以及巢狀結構(nested schemas)。此外,JSON 突變函數如 json_set 和 json_remove 現已可用。
升級至 2.0 時需注意破壞性變更:DuckDB 2.0 之前的版本無法讀取由 2.0 建立的資料庫檔案。雖然 2.0 仍可讀寫舊版檔案,但建議先在影子系統測試後再切換生產環境。對於關鍵任務工作負載,官方建議等待預計於 11 月發布的第一個修補版本。
內部實作方面,DuckDB 2.0 移除了對 ICU 函式庫的依賴,改由 icu 擴充功能自行實現時區、日曆和排序規則,時區資料直接從 IANA 資料庫構建並壓縮至約 45 kB。編譯要求也提高至 C++17,且預設使用 Clang 進行 Linux/macOS 的發布建置。




