Skip to content
Discord Get Started

Extensions

DB9 ships all extensions compiled into the server binary. There is no runtime dynamic loading — every extension is available immediately, and CREATE EXTENSION records install metadata per database.

ExtensionWhat it doesDocs
fs9Query, read, and write the database filesystem from SQLfs9 reference
parquetRead Parquet files from the filesystem or HTTP URLs into SQL tablesParquet import
ExtensionWhat it doesDocs
vectorpgvector-compatible similarity search with HNSW indexingVector Search
embeddingServer-side text embedding via EMBEDDING() and EMBED_TEXT() — no external API neededVector Search
Full-Text SearchPostgreSQL-compatible full-text search with language tokenizersFull-Text Search
zhparserChinese full-text search tokenizer (jieba-rs, always available)Full-Text Search
ExtensionWhat it doesDocs
httpMake HTTP requests from SQL (GET, POST, PUT, DELETE as table functions)HTTP client
pg_cronSchedule SQL statements to run on a cron expressionpg_cron
ExtensionWhat it doesDocs
uuid-osspUUID generation functions (uuid_generate_v4(), etc.)uuid-ossp
hstorePostgreSQL-compatible key-value store typehstore

Most extensions require CREATE EXTENSION before use. A few are pre-enabled or always available.

Pre-enabled (available on every new database)

Section titled “Pre-enabled (available on every new database)”

These extensions are installed automatically when a database is created:

SQL
-- Already enabled — no CREATE EXTENSION needed
SELECT http_get('https://httpbin.org/get');
SELECT count(*) FROM cron.job;
  • http — HTTP client functions available immediately
  • pg_cron — Extension pre-installed; catalog and management functions (cron.job, cron.unschedule, etc.) are available immediately, but job scheduling/execution is unavailable in the current release

These extensions must be explicitly enabled before their functions are available:

SQL
CREATE EXTENSION IF NOT EXISTS fs9;
CREATE EXTENSION IF NOT EXISTS embedding;
CREATE EXTENSION IF NOT EXISTS parquet;

Metadata shims (built-in, CREATE EXTENSION optional)

Section titled “Metadata shims (built-in, CREATE EXTENSION optional)”

These capabilities work without CREATE EXTENSION, but running it records metadata in pg_extension for ORM and tool compatibility:

  • vector — The vector type and operators (<->, <#>, <=>) work as built-ins. HNSW indexes can be created and the planner uses them for similarity search when the probe is an inlined literal and the query has a LIMIT and no WHERE clause — see Vector Search. CREATE EXTENSION vector is recommended so ORMs that check pg_extension see it as installed.
  • uuid-ossp — UUID functions (uuid_generate_v4(), etc.) are built-in. CREATE EXTENSION "uuid-ossp" records metadata for pg_dump/pg_restore compatibility.
  • hstore — Extension metadata is recorded for client compatibility. DB9 does not currently implement full hstore semantics.
  • pgcrypto — Metadata only, so Supabase and ORM bootstrap scripts that run CREATE EXTENSION pgcrypto succeed unchanged. It registers no functions of its own: gen_random_uuid() and digest() are DB9 built-ins that work with or without it. The rest of pgcrypto is not implemented — see the caution below.
  • plpgsql — PL/pgSQL is compiled in. CREATE EXTENSION plpgsql records metadata so restored dumps (which almost always contain it) do not fail.
  • zhparser — The Chinese full-text tokenizer is compiled in and always active. CREATE EXTENSION zhparser is accepted but has no effect.

Extensions install their functions into specific schemas:

ExtensionDefault schemaAccess pattern
httpextensionshttp_get(...) for the scalar JSONB form; SELECT * FROM extensions.http_get(...) for the table form. The qualifier is not interchangeable — see http
fs9extensionsfs9_read(...) or extensions.fs9_read(...) — both resolve on the default search_path
embeddingextensionsembedding(...) — the bare name; extensions.embedding(...) does not resolve
parquetextensionsSELECT * FROM extensions.read_parquet(...) — table-valued, FROM position only
pg_croncroncron.schedule(...), cron.unschedule(...)
vectorpublicOperators and type available directly
uuid-ossppublicuuid_generate_v4() available directly
hstorepublicType available directly
pgcryptoextensionsMetadata only — registers no functions (gen_random_uuid(), digest() are built-ins)
plpgsqlpublicMetadata only — PL/pgSQL is compiled in
I want to…Use
Store and search vector embeddingsvector + embedding
Build a RAG pipeline without external APIsembedding + fs9
Call an external API from SQLhttp
Query files on the database filesystemfs9
Watch filesystem changes in real timefs9 events + CLI watch
Import Parquet dataparquet
Schedule a recurring cleanup or reportpg_cron
Search text contentFull-Text Search
Generate UUIDsuuid-ossp