DuckDB has a number of extensions available for use. Not all of them are included by default in every distribution, but DuckDB has a mechanism that allows for remote installation.
If a given extensions is not available with your distribution, you can do the following to make it available.
INSTALL 'fts'; LOAD 'fts';
If you are using the Python API client, you can install and load them with the
load_extension(name: str) and
install_extension(name: str) methods.
All verified extensions are signed, if you wish to load your own extensions or extensions from untrusted third-parties you’ll need to enable the
To load unsigned extensions using the CLI, you’ll need to pass the
-unsigned flag to it on startup.
You can check the list of core and installed extensions with the following query:
select * from duckdb_extensions();
All available extensions
|fts||Adds support for Full-Text Search Indexes|
|httpfs||Adds support for reading and writing files over a HTTP(S) connection||http, https, s3|
|icu||Adds support for time zones and collations using the ICU library|
|inet||Adds support for IP-related data types and functions|
|jemalloc||Overwrites system allocator with JEMalloc|
|json||Adds support for JSON operations|
|parquet||Adds support for reading and writing parquet files|
|postgres_scanner||Adds support for reading from a Postgres database||postgres|
|sqlite_scanner||Adds support for reading SQLite database files||sqlite, sqlite3|
|substrait||Adds support for the Substrait integration|
|tpcds||Adds TPC-DS data generation and query support|
|tpch||Adds TPC-H data generation and query support|
Downloading extensions directly from S3
Downloading an extension directly could be helpful when building a lambda or container that uses DuckDB. DuckDB extensions are stored in public S3 buckets, but the directory structure of those buckets is not searchable. As a result, a direct URL to the file must be used. To directly download an extension file, use the following format:
The list of supported platforms may increase over time, but the current list of platforms includes:
See above for a list of extension names and how to pull the latest list of extensions.
Loading an extension from local storage
Extensions are stored in gzip format, so they must be unzipped prior to use. There are many methods to decompress gzip. Here is a Python example:
import gzip import shutil with gzip.open('httpfs.duckdb_extension.gz','rb') as f_in: with open('httpfs.duckdb_extension', 'wb') as f_out: shutil.copyfileobj(f_in, f_out)
After unzipping, the install and load commands can be used with the path to the .duckdb_extension file. For example, if the file was unzipped into the same directory as where DuckDB is being executed:
install 'httpfs.duckdb_extension'; load 'httpfs.duckdb_extension';