Impact Score: 5/10
DuckDB: 0.3.3 Preview Release "Sansaniensis"
Source available โ automated, not human-reviewed
Component: duckdb ยท Channel: stable. Automated analysis, not a compatibility certification. How this works.
Analysis updated: 2026-11-01.
โก Executive Summary (TL;DR)
DuckDB v0.3.3. Source highlight: This preview release of DuckDB is named "Sansaniensis" after the (regrettably extinct) Chenoanas sansaniensis.
Who Does This Impact? (Role-Based Analysis)
๐ป Software Engineers & Devs
Check the source notes against the package and APIs you use before upgrading.
๐ Product & Engineering Leads
Use the documented changes to assess relevance to your product; release frequency alone is not a quality measure.
โ๏ธ DevOps & Security
Verify the target version, runtime requirements and rollback procedure in the official documentation.
โจ New Features & Capabilities (6)
- #2926: DuckDB SQL backend for dbplyr
- #2970: JSON extension
- #2998: Support explicit aggregate state export, re-combination and finalisation
- #3069: S3 writes and #3225: S3 file glob
- #3092: Basic UDF support for Node API
- #3109: Storage dictionary compression
๐ง Bug Fixes & Patches (6)
- #2954: JDBC enable usage of LocalDateTime via get/setObject
- #2985: Issue #2590: Add overwrite flag to CSV copy, overwrite only if query completes
- #3006: JDBC BigDecimal support
- #3007: Feature: Add support for Excel text format (Update #2996)
- #3010: R: Arrow timestamps in seconds, milliseconds and nanoseconds
- #3027: Allow literal option for regex
๐ View Raw Release Notes (Original Developer Log)
This preview release of DuckDB is named "Sansaniensis" after the (regrettably extinct) [Chenoanas sansaniensis](https://books.google.nl/books?hl=en&lr=&id=jcEyAQAAMAAJ&oi=fnd&pg=PA1&ots=Yo7uqiwWjB&sig=jeAB2gFbhShF5AWmK1obw8FfYZk&redir_esc=y#v=onepage&q&f=false).
Binary builds are listed below. Feedback is very welcome.
Note: Again, this release introduces a backwards-incompatible change to the on-disk storage format. We suggest you use the `EXPORT DATABASE` command with the old version followed by `IMPORT DATABASE` with the new version to migrate your data. See the [documentation](https://duckdb.org/docs/sql/statements/export) for details.
Below a list of changes in this release
## Major Changes & Features
- #2926: DuckDB SQL backend for dbplyr
- #2970: JSON extension
- #2998: Support explicit aggregate state export, re-combination and finalisation
- #3069: S3 writes and #3225: S3 file glob
- #3092: Basic UDF support for Node API
- #3109: Storage dictionary compression
- #3111: Simple filtered aggregates
- #3165: Add support for a `DESCRIBE` statement that gives a summary of all tables
- #3178: 1-based indexing for lists and strings
- #3195: Add support for `FOREIGN KEY`
- #3253: Julia Client & C API Extensions
- #3292: Support NaN and Infinity in floating point columns
## Minor Changes & Bug Fixes
- #2954: JDBC enable usage of LocalDateTime via get/setObject
- #2985: Issue #2590: Add overwrite flag to CSV copy, overwrite only if query completes
- #3006: JDBC BigDecimal support
- #3007: Feature: Add support for Excel text format (Update #2996)
- #3010: R: Arrow timestamps in seconds, milliseconds and nanoseconds
- #3027: Allow literal option for regex
- #3030: Macros for floored division and modulo
- #3034: Substrait Installable Extension
- #3038: Issue #3037: DATE + TIME
- #3045: fix for STRING_AGG(...) failing (vector type mismatch) assertion when used with DISTINCT and ORDER BY inside STRING_AGG.
- #3050: R-pkg: cpp11-ify
- #3051: Enable printing of EXPLAIN query trees in the R client
- #3060: Issue #3056: Null list scatter
- #3065: Implementation of list_contains
- #3066: Report dlopen/dlsym errors in extension load
- #3067: ODBC: Many changes
- #3071: c-api: support decimal and prevent invalid type throws
- #3072: Add CMake setting to disable linking of extensions
- #3077: Issue 2498: Consistent NULL hashing
- #3084: Hmb1 select macro feature mr
- #3085: First batch of aggregation functions for python rapi
- #3087: Fix incorrect link for testing docs
- #3088: Add LIST_EXTRACT support for several missing types (including booleans)
- #3090: Fix for Arrow Timezone CI Fail
- #3093: Test/add parser error on missing newline
- #3097: Fix remaining winsock error
- #3098: Round-trippable Expression ToString()
- #3101: Issue #3100: MAKE_DATE struct variant
- #3102: Add flatten function for nested list
- #3107: Allow multiple statements in the R-client
- #3112: Issue #1423: PiecewiseMergeJoin multiple predicates
- #3115: ODBC: SQLGetDescRec and SQLSetDescRec
- #3116: NodeJS Windows CI Fix Attempt
- #3120: Fix #3119: correctly perform case insensitive comparisons in default function/view/schema creation
- #3121: Fix #3108: support ILIKE ESCAPE
- #3123: Issue #3020: Unify column names of DESCRIBE and SUMMARIZE
- #3124: Add Alias to projected columns
- #3125: Adds support for the REPLACE keyword in CREATE TABLE AS ... SELECT (CTAS) statements
- #3126: BLOB support for aggregate state combine
- #3139: More Python Relational API Functions
- #3142: Fix type hints for query_df
- #3147: Python: Relation dependency on Connection
- #3148: Alter Type of column from varchar to enum
- #3151: Support trailing commas in many lists in the parser
- #3154: JDBC - Bugfix - Negative timestamp fix
- #3156: JDBC - Add timestamp with timezone support
- #3158: Enable DISABLE_VPTR_SANITIZER by default on M1
- #3161: Implementation of unnest(null), list_position, rewrites
- #3162: Add support for list parameters in the Python API
- #3163: ODBC: Diagnostic Feature
- #3166: Move test_group_by_parallel out of the coverage tests
- #3171: Fix #3169: verify that WAL exists in PRAGMA database_size
- #3173: Adding chunk size parameter to functions that return arrow objects.
- #3174: Correctly zero-initialize pg_parser allocation heap to prevent potential corruption in clean up of parser state of SQL strings
- #3179: Change pipe so it doesnt print on terminal
- #3180: Fix for build error of R package on Windows
- #3190: Fix Python clean.sh: avoid deleting all locally installed libraries and instead only remove installed DuckDB libraries
- #3191: Returning feature for INSERT
- #3192: Tear down connections
- #3196: linking fixes for extensions
- #3197: Fix convert uuid to arrow str error
- #3199: Dbplyr-backend SQL translation of is.na() must use only IS NULL
- #3201: Enable universal builds for OSX
- #3208: numeric md5 functions
- #3209: JDBC - Fix missing metadata
- #3213: Making the deliminator more flexible and Q 02/17/20 of TPC-H for Substrait
- #3214: Extension linking fix
- #3218: Fixed empty list aggregates
- #3219: Issue #1423: IEJoin Implementation
- #3220: Fix for #3200
- #3221: FIX for parquet reader on diff files
- #3224: feat: expose from_substrait in python package
- #3226: ODBC: Windows setup
- #3230: Fix for #3215
- #3231: CodeCov apparently does not like target anymore, + validate codecov configuration in CI
- #3232: Fix #3223: Prune trees with LIMIT 0
- #3233: Fix #3205: implement skip for struct and list column readers
- #3234: Fix #3222: avoid int overflow in RleBpDecoder
- #3235: Removing std::binary_function because its deprecated in cpp11
- #3238: Parquet globbing: Better support for schema evolution
- #3239: Properly send mapped function on RAPI
- #3244: Returning feature for update and delete statements
- #3245: test: prevent master ci from being canceled
- #3251: Improving CI performance
- #3255: Adding check_same_thread option to py connector
- #3256: ci: restructure to run format/tidy/codecov for python
- #3263: JDBC - Enable useage of ENUM type
- #3264: Allow the use of native replacement scan of parquet/csv files with the dbplyr-backend
- #3266: Fix #3260: if a schema name is provided, pass along the schema name and table name to the replacement scan
- #3268: Add python module constants from PEP249
- #3270: python extension loading tests
- #3274: Implementation of the list aggregate function
- #3276: Properly resizing DuckDB batches that reference arrow batches
- #3281: ODBC: LibreOffice on Linux
- #3287: Several Julia API enhancements
- #3289: ODBC: windows installer has to copy and pass program parameters
- #3293: Issue #3262: Nested comparison fixes
- #3295: Allow strftime arguments to be specified in both orders
- #3299: [Arrow] Read Record Batch Reader and Scanners
- #3301: Use FieldWriter/FieldReader in Checkpoint Manager
- #3303: Add benchmark_runner based regression test, and remove random engine from cycle counter
- #3305: Fix #3304: correctly trigger old result-set materialization prior in duckdb_value_is_null
- #3307: Fix #3271: correctly check for negative limit and offset
- #3308: Cleanup some unused include
- #3311: Fix #3272: avoid incorrectly moving LIMIT to before the ORDER clause in certain cases
- #3312: Issue #3290: Histogram Temporal Bindings
- #3313: Issue #3275: Global Operator State
- #3314: Issue #3262: Dead Code Removal
- #3318: R bug-fixes: Pipes in tests and silence R NOTE
- #3323: Fix #3291: delete root entries after a catalog entry is deleted and no more transactions can reference it
- #3328: Fix #3294: initialize validity mask to correct size in placeholder code
- #3329: Fix use after free bug in local storage
- #3331: Add automatic issue labeler
- #3335: #3324 Throw error instead of crashing when misusing prepared statements
- #3338: Issue #3298: Nested Unflat MinMax
- #3339: Add a create_value for strings to the Julia API
- #3342: Issue #1423: IEJoin Performance Improvements
- #3343: Issue #3118: Non-string Formats
- #3355: Fix #3349: correctly handle empty table case in grouping set
- #3356: Fix #3350: correctly update statistics after a SINGLE join, since SINGLE joins may introduce NULL values
- #3357: Fix #3351: avoid double-binding functions in subqueries after an initial binding error
- #3358: Fix #3352: fix several bugs with index selection for verifying foreign key constraints
- #3359: Fix #3353: check if any results are returned in sqlite api wrapper before looking at the chunk
- #3360: Fix #3354: add missing recursive CTE node traversal in correlated subquery flattening
- #3362: ODBC: unixodbc_setup.sh
- #3363: Fix #3361: correctly handle overflows in sequences with cycles
- #3369: Fix #3367: correctly detect overflow in statistics propagation for ORDER BY
- #3370: Fix #3366: check for invalid double values in progress bar
- #3372: Fix #3365: correctly handle overflows in left-shifts
- #3376: Fix Python Windows CI
- #3378: Correctly handle rowid scans in Julia DataFrame scan (for COUNT(*))
- #3380: ArgMinMax: correctly manage memory of strings in both values and arguments
- #3381: Python extension loading
- #3383: ODBC: unixodbc_setup.sh usage message
- #3399: removed -k param for gzip
- #3406: Install AWS CLI in CentOS Extension