Коротко: DuckDB v2.0 “Cyanoptera” — майбутня велика версія DuckDB, яка додає стабільний клієнт-серверний режим через Quack, оператор CONNECT, повноцінну підтримку VARIANT, тригери, асинхронний I/O, новий SQL-парсер і новий формат зберігання за замовчуванням. Станом на вересень 2026 року v2.0 ще не вийшла: доступні alpha-збірки, а стабільний реліз запланований на другу половину жовтня 2026 року.

Вступ

DuckDB з’явилася як in-process аналітична СУБД: рушій працює прямо всередині застосунку без окремого сервера. Саме ця простота зробила її популярною серед аналітиків, data engineers і розробників. DuckDB v2.0 розширює цю модель: embedded-режим нікуди не зникає, але поруч із ним з’являється зрілий клієнт-серверний сценарій через Quack.

Водночас важливо не поспішати називати v2.0 завершеним релізом. Команда DuckDB 2 вересня 2026 року відгалузила гілку v2.0-cyanoptera, оголосила feature freeze і перейшла до тестування та bug fixing. Фінальний реліз очікується у другій половині жовтня.

У цій статті розберемо, що саме готує DuckDB v2.0, як працюють Quack і CONNECT, чим VARIANT відрізняється від JSON, навіщо DuckDB тригери і де клієнт-серверний DuckDB може бути корисним поруч із PostgreSQL та іншими системами.

Чому DuckDB v2.0 — велика архітектурна зміна для проєкту?

DuckDB традиційно описують як «SQLite для аналітики»: embedded database без обов’язкового серверного процесу, мережевих портів і складного адміністрування. Але сама DuckDB від початку підтримувала транзакції, multiple connections у межах процесу, MVCC та ізоляцію транзакцій.

Версія 2.0 не відмовляється від embedded-підходу. Навпаки, вона додає ще один спосіб використання тієї самої СУБД — як довготривалого сервера, до якого можуть підключатися інші процеси по мережі.

Ключові зміни, які команда анонсувала для v2.0:

  • Quack як стабільний клієнт-серверний протокол;
  • новий оператор CONNECT для маршрутизації сесії на віддалену базу;
  • VARIANT як first-class тип для напівструктурованих даних;
  • BEFORE/AFTER triggers, row-level і statement-level triggers;
  • новий PEG-based SQL parser;
  • новий default storage format;
  • reworked C API;
  • асинхронний I/O по всьому рушію;
  • невеликий набір цілеспрямованих breaking changes.

Реліз побудований на більш ніж 10 000 комітах після DuckDB v1.5, що вийшла у березні 2026 року.

Чим embedded database відрізняється від клієнт-серверної архітектури?

Embedded database працює в тому самому процесі, що й застосунок. Наприклад, Python-код завантажує DuckDB як бібліотеку і виконує SQL без окремого серверного процесу.

Важливе уточнення: embedded не означає «тільки одне з’єднання». DuckDB давно підтримує кілька connections і транзакційну роботу. Головне обмеження embedded-моделі інше: база не виступає самостійним мережевим сервісом для клієнтів на інших процесах або машинах.

Клієнт-серверний режим вирішує саме це. DuckDB-процес можна підняти як сервер, а інші клієнти підключаються через Quack і працюють із віддаленою базою. Це відкриває multi-client і long-running deployment-сценарії, яких раніше не було в типовому DuckDB workflow.

Як працює DuckDB server: Quack та CONNECT

Quack — HTTP-based remote protocol, який дозволяє одному DuckDB-процесу обслуговувати інші DuckDB-процеси по мережі. Quack уже доступний у DuckDB v1.5.3 як core extension, але станом на вересень 2026 року все ще має beta/experimental status. У DuckDB v2.0 команда планує перевести його в stable.

Базовий приклад із preview v2.0 виглядає так:

CALL quack_serve(
    token = 'my_token'
);

На клієнтській стороні:

ATTACH 'quack:server.example.com'
    AS qk (TOKEN 'my_token');

CONNECT qk;

SELECT count(*) FROM events;

DISCONNECT;

Оператор CONNECT змінює контекст поточної сесії: запити всередині цього режиму виконуються на віддаленій базі, а результати повертаються клієнту. CONNECT не обмежується Quack. У preview DuckDB показала remote pushdown для PostgreSQL і MySQL:

CONNECT 'postgres://localhost/mydb';

SELECT count(*) FROM orders;

DISCONNECT;

Ідея полягає в тому, що SQL передається на віддалену систему, а не обов’язково завантажує цілі таблиці в локальний DuckDB для обробки. Проте оскільки v2.0 поки alpha, синтаксис, protocol details та implementation details до стабільного релізу ще можуть змінитися.

DuckDB server vs PostgreSQL: чи стає DuckDB заміною традиційній СУБД?

Клієнт-серверний режим робить порівняння з PostgreSQL природнішим, але ці системи все ще оптимізовані під різні пріоритети.


Критерій



DuckDB v2.0 / Quack



PostgreSQL


Основний фокус

OLAP, аналітичні запити

General-purpose / OLTP

Архітектура даних

Колонкова

Рядкова

Типовий сценарій

Аналітика, batch, local + server analytics

Транзакційні застосунки, API backends

Конкурентний запис

Покращений через Quack, але не головний OLTP-фокус

Зрілий high-concurrency OLTP

Серверна екосистема


Нова, Quack переходить із beta до stable


Багаторічна зріла екосистема

DuckDB може бути дуже конкурентною на аналітичних workload-ах і тепер отримує мережевий режим, але це не означає, що вона автоматично замінює PostgreSQL у системах із великою кількістю дрібних одночасних write-транзакцій.

Що таке VARIANT і чим він відрізняється від JSON?

VARIANT з’явився ще в DuckDB v1.5. Це тип для semi-structured data, який, на відміну від JSON, не зберігається як текст. Кожне значення має власну type information, а DuckDB може «shred» спільну структуру даних для кращого compression і швидшого виконання запитів.

У v2.0 VARIANT стає first-class citizen у повному pipeline: shredded execution зі storage, extraction pushdown у scans, читання і запис shredded VARIANT у Parquet та набір variant_* functions.

CREATE TABLE events (payload VARIANT);

INSERT INTO events
VALUES ('{"user": {"id": 42, "tags": ["a", "b"]}}'::JSON::VARIANT);

SELECT variant_type(payload), variant_keys(payload)
FROM events;

SELECT *
FROM events
WHERE variant_contains(
    payload,
    {'user': {'id': 42}}::VARIANT
);

Команда DuckDB також заявила про довгостроковий план зробити звичайний JSON поверх VARIANT, але це не обіцянка саме релізу v2.0 — у preview прямо зазначено, що це, ймовірно, станеться пізніше.

Навіщо DuckDB тригери?

DuckDB v2.0 додає повноцінну підтримку triggers: BEFORE і AFTER, FOR EACH ROW і FOR EACH STATEMENT, transition tables через REFERENCING OLD/NEW TABLE, кілька triggers на одну подію, RETURNING і DROP TRIGGER.

Офіційний приклад audit-table:

CREATE TABLE target (id INTEGER, val INTEGER);
CREATE TABLE audit (id INTEGER, old_val INTEGER, new_val INTEGER);

CREATE TRIGGER trg_audit AFTER UPDATE ON target
REFERENCING OLD TABLE AS o NEW TABLE AS n
FOR EACH STATEMENT
    INSERT INTO audit
    SELECT n.id, o.val, n.val
    FROM o
    JOIN n ON o.id = n.id;

INSERT INTO target VALUES (1, 10), (2, 20);
UPDATE target SET val = val * 10 WHERE id <= 2;

SELECT * FROM audit;

Тригери особливо логічні для long-running server workloads, де база живе довше за один notebook або ETL job і має реагувати на зміни даних усередині самої СУБД.

Які нові SQL-можливості з’являються у v2.0?

Preview DuckDB v2.0 містить багато SQL-level доповнень. Найпомітніші з них:

  • NEAREST joins для top-k similarity search:
SELECT q.user_id, t.product_id
FROM users q
INNER JOIN products t APPROX NEAREST 2
BY SIMILARITY array_cosine_similarity(
    q.embedding,
    t.embedding
);
  • DML усередині CTE:
WITH moved AS MATERIALIZED (
    DELETE FROM staging RETURNING *
)
INSERT INTO archive
SELECT * FROM moved;
  • nested schemas;
  • змінні через синтаксис $x;
  • json_set, json_insert, json_replace та json_remove;
  • recursive CTE з USING KEY aggregation;
  • SQL-standard FETCH FIRST … ROWS ONLY;
  • OVERLAY();
  • UNNEST у GROUP BY;
  • чіткіша семантика MERGE та UPDATE … FROM для multi-match cases.

Що змінюється під капотом?

DuckDB v2.0 вводить asynchronous I/O по всьому рушію. Особливо важливо це для object storage на кшталт S3: I/O layer може масштабуватися незалежно від query processing, що збільшує паралелізм під час remote reads.

Окремо DuckDB повністю замінює старий PostgreSQL-derived parser на PEG-based parser. Новий parser має бути простішим для розвитку і допускає runtime extensions.

Також з’являється новий default storage format, reworked C API та невеликий набір навмисних breaking changes. Сам факт major-version bump означає, що команди перед production-upgrade мають прогнати compatibility tests на власних workloads.

Де DuckDB v2.0 вписується в сучасний data stack?

Найцікавіше у v2.0 — не те, що DuckDB «перестає бути embedded». Вона не перестає. Натомість одна технологія тепер покриває ширший спектр сценаріїв: від локального ноутбука і Python-процесу до networked multi-client deployment.

Це може бути зручно для команд, яким потрібна проста аналітична база без переходу одразу до важчого кластерного стеку. Але server-mode DuckDB ще молодий, тому для критичних production-систем варто оцінювати зрілість tooling, HA/operations requirements, concurrency profile та security окремо.

Станом на вересень 2026 року найкращий спосіб познайомитися з v2.0 — тестувати alpha-збірки на некритичних workloads і перевіряти compatibility перед стабільним релізом.

FAQ: питання про DuckDB v2.0

Питання: Що таке DuckDB v2.0?

Відповідь: DuckDB v2.0 “Cyanoptera” — майбутній major release DuckDB із client-server режимом через Quack, triggers, first-class VARIANT, asynchronous I/O, новим parser і storage format. Станом на вересень 2026 року реліз ще перебуває на alpha-стадії.

Питання: Коли вийде DuckDB v2.0?

Відповідь: Команда DuckDB 2 вересня оголосила feature freeze і прогнозує стабільний реліз у другій половині жовтня 2026 року.

Питання: Як зараз протестувати client-server DuckDB?

Відповідь: Quack уже доступний у v1.5.3 як core extension у beta/experimental state. Для v2.0 також доступні alpha builds, де можна тестувати нові можливості до стабільного релізу.

Питання: Чи замінює DuckDB v2.0 PostgreSQL?

Відповідь: Ні. DuckDB розширюється в server-сценарії, але її основний фокус залишається аналітичним. PostgreSQL має значно зрілішу екосистему для high-concurrency OLTP.

Питання: Чи залишиться embedded mode?

Відповідь: Так. Client-server режим — додаткова можливість. Звичайний in-process DuckDB залишається базовим сценарієм використання.

Питання: Чи можна вже використовувати v2.0 у критичному production?

Відповідь: До стабільного релізу це alpha software. Для production краще залишатися на стабільній гілці або проводити v2.0 testing окремо, поки команда не випустить фінальний реліз.

Висновок

DuckDB v2.0 — це не відмова від embedded-філософії, а розширення її меж. Quack і CONNECT додають мережевий client-server сценарій, VARIANT робить semi-structured data повноцінною частиною рушія, triggers наближають DuckDB до звичних server DBMS workflow, а asynchronous I/O, новий parser і storage format перебудовують фундамент системи.