Ce qui se passe
DuckDB 2.0.0 LTS est sorti le 21 octobre (triggers, VARIANT, E/S asynchrones :
voir la fiche du 22 octobre). Le 26, l'équipe a détaillé les améliorations plus
petites qui n'avaient pas leur place dans l'annonce. Trois touchent le code du
quotidien.
L'appender du client Python
Insérer ligne par ligne est lent, et un gros INSERT est pénible à construire.
L'appender, déjà présent dans plusieurs clients (C/C++, Go, Java), manquait à
Python. Il accumule les lignes et les écrit en une seule opération ; le bloc
with les vide à sa sortie.
import duckdb
con = duckdb.connect()
con.execute("CREATE TABLE events (kind VARCHAR, n INTEGER)")
with con.appender("events") as appender:
appender.append_row("login", 1)
appender.append_rows([("logout", 2), ("login", 3)])Pour des données déjà dans un DataFrame ou une table Arrow, INSERT INTO ... SELECT reste plus rapide : l'appender sert aux lignes que votre code produit au
fil de l'eau.
CREATE SECURE VIEW
Une vue ordinaire peut trahir les lignes qu'elle filtre, par les statistiques
(fonction stats()) ou par le plan d'exécution. Une vue sécurisée n'expose ni
l'un ni l'autre : stats() ne rend que des statistiques sans information, et
EXPLAIN ANALYZE affiche un seul nœud Secure View au lieu du plan de la vue.
CREATE SECURE VIEW public_clients AS
SELECT name
FROM clients
WHERE tier = 'public';PARTITION_PATH et ORDER_BY pour COPY
PARTITION_BY écrit un sous-dossier colonne=valeur par partition, à la manière
de Hive. PARTITION_PATH donne la main sur le chemin, par une expression sur les
colonnes de partition :
COPY sales TO 'sales_out'
(FORMAT parquet,
PARTITION_BY (year),
PARTITION_PATH CASE
WHEN year < 2022 THEN 'cold/' || year
ELSE 'hot/' || year
END);L'expression est évaluée une fois par partition ; son résultat doit être un chemin
relatif sans segment .., et chaque partition doit aboutir à un chemin distinct.
L'option ORDER_BY trie les lignes avant l'écriture, à l'intérieur de chaque
partition quand elle accompagne PARTITION_BY.
Ce qui est déprécié, ce qui s'ajoute
SHOW <table>,SHOW <vue>ouSHOW <requête>pour décrire une table est déprécié en 2.0 et affiche un avertissement : utilisezDESCRIBE.SHOW threads;lit maintenant un réglage par son nom, à la PostgreSQL, quand ce nom n'est pas celui d'une table (le réglageshow_behaviortranche en cas de conflit :'auto'par défaut,'table'ou'setting').- Le CLI ajoute
.manual(signature, description et exemples d'une fonction),.historyet un.schemamis en forme par défaut (--no-indentpour l'ancienne forme sur une ligne). - Les séquences reçoivent
setval, utile après un chargement en masse.
Source : DuckDB, 26 octobre 2026. Source en anglais.