For AI agents: the complete documentation index is at llms.txt. Every page is also available as markdown by appending .md to its URL, or by sending an Accept: text/markdown request header.

Documentation changelog

This page tracks significant updates to the QuestDB documentation.

New​

  • Expiring rows (EXPIRE ROWS) and ALTER MATERIALIZED VIEW SET EXPIRE - Keep only some rows in a materialized view. Set it when you create the view (see CREATE MATERIALIZED VIEW) or add it later. Queries hide expired rows right away, and a background job frees their disk space for the policies where that is safe.

  • CREATE MATERIALIZED VIEW - You can no longer use LIMIT in the part of a materialized view's query that reads its base table (this includes a subquery on the base table). A LIMIT in a subquery over a different table is still allowed.

    Views created before this change keep refreshing. The restriction only matters when you recreate such a view — most often when you run SHOW CREATE MATERIALIZED VIEW and replay its output during an upgrade, migration, or restore. That statement is now rejected until you remove the LIMIT or rewrite the query without it.

    If the LIMIT was only there to return fewer rows to your application, remove it from the view definition and instead add ORDER BY ... LIMIT ... to the query you run against the view. This is not an exact swap: once the LIMIT is gone from the definition, the view stores all matching rows rather than a capped set.

September 2026​

QuestDB Enterprise Releases​

  • 4.0.1 - Released September 1, 2026

New​

  • Memory limits - New section covering the per-query, materialized view refresh, WAL apply, and live view refresh memory limits, what counts toward them, and what happens on a breach, plus the previously undocumented cairo.mat.view.max.refresh.retries, cairo.mat.view.refresh.busy.retry.limit, cairo.mat.view.refresh.busy.retry.timeout, cairo.write.back.off.timeout.on.mem.pressure, ram.usage.limit.bytes, and ram.usage.limit.percent keys
  • RBAC memory limits - Per-user, per-group, and per-service-account query memory limits in QuestDB Enterprise: SET MEMORY LIMIT on ALTER USER, ALTER GROUP, and ALTER SERVICE ACCOUNT, how limits resolve, the SET MEMORY LIMIT permission, and the upgrade migration
  • ALTER GROUP - New reference page covering SET MEMORY LIMIT and external alias mapping
  • Migrate QuestDB onto the Kubernetes Operator - Move an existing Enterprise deployment onto the Operator with a replica-first cutover: restore the source backup, consume replication WAL, then promote after a controlled source drain
  • Copy a schema to another instance - Recreate one instance's tables, views, and materialized views on another from SHOW CREATE DATABASE, either by replaying the statements over the REST API or by dumping them to a .sql file, with INCLUDE (SCHEMA) and INCLUDE (ACL) for separating structure from permissions on Enterprise, plus the Web Console schema explorer as a manual alternative and the ordering caveat that comes with it
  • SUBSAMPLE - New SQL keyword that reduces a query result to a subset of its existing rows, without interpolating values. Covers the six methods with a diagram each: lttb for line charts, with a gap-preserving mode, minmax and m4 for per-time-bucket envelopes, uniform and cadence for position-based selection, and sdt (Swinging Door Trending) for error-bounded compression with a 2 * compdev reconstruction bound and an animated walkthrough. Also covers where the clause goes in a query, output order, NULL handling, and which query shapes each method accepts
  • SUBSAMPLE window functions - New category with cadence(), lttb(), m4(), minmax(), sdt(), and uniform(), which return a Boolean keep flag per row instead of the reduced row set. Covers the outer-query filter pattern, the ordering, framing, and NULL rules of each function, PARTITION BY and IGNORE NULLS support on sdt(), and when to use each form

Reference​

  • Added cairo.sql.subsample.max.rows, the input row limit for the lttb, m4, minmax, uniform, and cadence methods of SUBSAMPLE. It does not apply to sdt

Updated​

  • query_activity() - Documented the is_wal, memory_used, and memory_limit columns
  • wal_tables() - Documented the errorTag, errorMessage, and memoryPressure columns; errorTag reads OUT OF MEMORY after a WAL apply memory limit breach
  • SHOW - SHOW USERS, SHOW GROUPS, and SHOW SERVICE ACCOUNTS, including their filtered forms, gain a trailing memory_limit column. Clients that read these results by position need updating
  • CREATE GROUP - Documented the WITH EXTERNAL ALIAS form that creates a group and its OIDC or LDAP mapping in one statement
  • Kafka connector - Updated for QWP with a quick start, guidance on preventing duplicates and recovering from outages, and migration steps for existing HTTP pipelines
  • Kubernetes Operator - Refreshed for Operator 0.2.1 across installation, configuration, high availability, backup and restore, known limitations, troubleshooting, and the generated API reference
  • Rust and C and C++ clients - Documented the UUID byte order, which was previously unstated. Buffer::column_uuid takes (lo, hi) where hi is the most significant half, matching java.util.UUID, and the chunk setter takes the 16 bytes in canonical RFC-4122 order
  • Backup and restore - The restore section no longer calls backup.restore.timestamp point-in-time recovery: it selects the most recent backup at or before the timestamp, and a new warning explains that a restored node with a non-empty replication object store catches up to the cluster's latest state after the restore
  • Point-in-time recovery - The procedure previously spread across the backup and replication setup pages consolidated into a dedicated page, with the commit-time semantics of the recovery target and the verification step spelled out
  • Kubernetes Operator - Documented native cold storage for Operator 0.3.0: the spec.coldStorage block, cold-manager placement during role switches, a manager-move runbook, and the synced v0.3.0 API reference
  • Disaster recovery - Failure scenarios and the primary migration procedures moved from the setup guide to a dedicated page in the replication section

August 2026​

Releases​

  • 10.0.1 - Released August 24, 2026
  • 10.0.0 - Released August 6, 2026

QuestDB Enterprise Releases​

  • 4.0.0 - Released August 25, 2026

New​

  • SWITCH ROLE - New reference page for switching a QuestDB Enterprise node between the primary and replica roles in place, with SWITCH STATUS, the timeout semantics, the statement errors, and the SWITCH ROLE permission
  • Failover and role switch - Operator guide for planned switchovers and promotions without a restart: prerequisites, the timeout budget, refusals and the UNKNOWN state, what each client protocol sees during a demote, the restart hazard, and the GET /lifecycle and POST /lifecycle/switch endpoints
  • Cold storage - Historical partitions move to S3, Google Cloud Storage, Azure Blob Storage, or a filesystem store as Parquet and stay queryable with normal SQL, covering the partition lifecycle, the range-read path, the immutability boundary at DROP LOCAL, and the manager and refresher roles
  • Operating cold storage - Setup guide and runbook: preparing the object store prefix, configuring the cluster, the two-step manager handoff, remote garbage collection, cold-read metrics, backup interaction, and a troubleshooting table
  • Cold storage configuration - Every cold.storage.* setting, covering the store connection, roles, upload, read path, garbage collection, and request timeouts
  • SWITCH COLD STORAGE ROLE - New reference page for moving the cold storage manager role between instances at runtime, with SWITCH COLD STORAGE STATUS, the FORCE break-glass path, and the timeout semantics
  • Connect - New top-level Connect section that gathers the native client libraries, the compatibility protocols (ILP, PGWire, REST), and the wire-protocol specifications under one home, with a decision table for picking a path and a per-language QWP support matrix
  • Connect string reference - Every configuration key for the native clients, with worked connect strings for common setups, a goal-to-keys recipe table, sender restart and replay semantics, and an alphabetical key index
  • Wire protocols - QWP specifications for client implementers, covering ingress over WebSocket, egress over WebSocket, and expected client behavior
  • Store-and-forward - New section on client-side disk buffering: choosing between memory mode and disk-backed offload, concepts, configuration, and operating and tuning
  • Client failover - How clients detect a failed primary and switch to a healthy peer using multi-host address lists, host-health classification, role filtering, and zone-aware selection, plus its configuration
  • Delivery semantics - At-least-once delivery, where duplicate rows arise, and how designated timestamps combine with deduplication for exactly-once outcomes
  • Agents - Which protocols AI agents use to drive QuestDB, the tooling available to them, and how to grant scoped access
  • Live views - Incrementally maintained window-function queries over a WAL table, queried like a regular table, with CREATE LIVE VIEW, DROP LIVE VIEW, and the cairo.live.view.* settings
  • Notebooks - Web Console notebooks that combine SQL, markdown, and charts in one tab, covering cells, charts, variables, live dashboards, and sharing
  • MCP connection - Connect AI coding agents to the Web Console through the @questdb/mcp-bridge local MCP server, with the pairing flow, the four permission levels, and the available agent tools
  • Register QuestDB Parquet as Apache Iceberg tables - Expose Parquet partitions as Iceberg tables and query them in place from Spark, Trino, DuckDB, or PyIceberg
  • ALTER TABLE REBASE WAL - New reference page for rebuilding a suspended WAL table under a fresh sequencer, with its requirements and permission
  • ALTER TABLE SET FORMAT - New reference page for switching a table's partition storage format between NATIVE and PARQUET
  • QWP configuration - Server-side settings for the QWP ingestion (/write/v4) and query (/read/v1) endpoints
  • Check timestamp order and Check column sort order - Two cookbook recipes that detect unsorted data with lag(): whether a table, CSV import or external Parquet file is ordered by its timestamp, and whether one column is sorted with respect to another
  • Kubernetes Operator - New manual for running QuestDB Enterprise clusters on Kubernetes, covering installation, getting started on AWS and Azure, configuration, day-to-day operations, high availability, known limitations, and the full API reference
  • ALTER TABLE SUSPEND WAL - New reference page for deliberately stopping the WAL apply job, covering the quiescent-table use case that REBASE WAL requires, and the trap that writes to a suspended table succeed while staying invisible to queries until RESUME WAL

Reference​

  • Added the node_role() function, which reports the replication role of the instance to any authenticated session
  • RBAC - Added the SWITCH ROLE permission to the permissions table, a failover operator scenario, and the built-in admin's break-glass role in a replicated cluster
  • Minimal HTTP server - Documented the GET /lifecycle component snapshot and the http.health.check.authentication.required setting
  • Replication metrics - Added questdb_replication_pending_upload_txn and questdb_backup_active_at_last_demote
  • Replication configuration - Documented that replication.role is the boot role, the primary-catchup-uploads value, and the restart hazard after an in-place switch
  • Storage Policy - The TO REMOTE and DROP REMOTE stages are now enforced. Documented what each does, the requirement for a WAL table with cold storage enabled, and the warning that DROP LOCAL makes a partition read-only for good
  • Added the table_cold_partitions() function, which returns the remote state of every partition in a table's manifest as it walks pending, live, sealed, and deleting
  • SHOW PARTITIONS - Two trailing columns, seqTxn and isRemotelyServed, are appended to the result set. Tools binding columns by position must be updated
  • Backup and restore - Documented that a backup of a database using cold storage does not contain the data.parquet bytes, so the backup and the object store prefix are one recovery set
  • Replication overview - Documented that the cold storage manager role is independent of the primary and replica roles, that partition bytes never traverse replication, and that replicas must be upgraded first
  • Cold storage read metrics - Added the fifteen questdb_cold_chunk_* Prometheus metrics
  • Added the storage.policy.recheck.drain.interval configuration property
  • CREATE TABLE - Added the FORMAT { NATIVE | PARQUET } clause to store partitions as Parquet by default on partitioned WAL tables
  • REST API - Merged the overlapping authentication sections into one, with basic auth (including building the Authorization header by hand) and Enterprise token auth
  • SHOW CREATE LIVE VIEW - Documented retrieving a live view's CREATE statement, alongside the CREATE LIVE VIEW and DROP LIVE VIEW permissions
  • Added the live_views() catalogue function and the L table_type discriminator to the meta functions page
  • Added the is_end_of_month() date-time function, which is leap-year aware and returns false for null
  • Documented the query.timeout duration key (120s, 1m, 500ms) alongside the now-deprecated query.timeout.sec, and how the two relate
  • Added the cairo.wal.apply.suspended.tables and cairo.wal.apply.suspended.write.denied configuration properties
  • SHOW CREATE MATERIALIZED VIEW - Documented retrieving a materialized view's CREATE statement, and alphabetized the SHOW reference page
  • SHOW CREATE DATABASE - Documented dumping the whole database schema as round-trippable DDL, with INCLUDE/EXCLUDE category filtering
  • EXPLAIN - Added the Encode sort / Encode sort light plan node to the plan-node reference
  • LIMIT - Documented null LIMIT bounds (supplied via bind variables) and their two-bound semantics
  • Added the cairo.sql.parquet.cache.memory.size configuration property (256 MB default), deprecating the slot-based cairo.sql.parquet.frame.cache.capacity
  • Documented cairo.root absolute-path behavior: the conf, import, export, tmp, and .checkpoint directories become siblings of the specified directory rather than children of the server root, so leave it at the default under Docker
  • read_parquet - Documented nominating a designated timestamp on a Parquet file with TIMESTAMP() (applied directly, on a sub-query, or on a CTE), and importing a file into a table with INSERT INTO ... SELECT or CREATE TABLE AS
  • SAMPLE BY - Documented that the count is optional and defaults to 1, so SAMPLE BY h is the same as SAMPLE BY 1h, and that it must be a positive integer written with no space before the unit
  • REST API - Documented /execute and /validate, which compiles a query and returns its column metadata without running it. /exec is now marked deprecated in favour of /execute
  • HTTP server configuration - Flagged circuit.breaker.buffer.size as unsupported since QuestDB 10.0.0; a config that still sets it logs an advisory, or fails to start under config.validation.strict
  • Meta functions - Documented wait_wal_table(), which blocks until a WAL table's pending writes have been applied so a following read sees them, plus sleep(), current_data_id() and session_user()
  • UNION, EXCEPT, INTERSECT - Documented result column types: a column that is SYMBOL on every branch stays SYMBOL instead of widening, which also changes the type materialized by CREATE TABLE AS and reported in REST response metadata
  • HTTP server configuration - Documented that QuestDB Enterprise fails to start when http.user, http.password or http.password.file is set, since those Open Source settings were never enforced by Enterprise
  • markout_horizon hint - Documented the optimizer hint that stops a markout-curve CROSS JOIN from materializing and sorting its whole output
  • Column alias configuration - Documented cairo.sql.column.alias.expression.enabled, the opt-out restoring pre-9.0.0 column naming, and cairo.sql.column.alias.generated.max.size
  • Replication configuration - Documented replication.disabled.tables, a reloadable list excluding tables from replication
  • IAM configuration - Documented the two acl.permissions.compaction.* settings that keep sys.acl_permissions from growing until replica logins slow down
  • SQL extensions - Recorded that pg_class.relkind and information_schema.tables.table_type distinguish tables, views and materialized views, so PostgreSQL client tools can categorise objects

Updated​

  • Replication setup guide - Planned primary migration now points at the in-place switch; the restart-based flow is kept for older versions and the emergency migration is marked as the lossy path
  • Error codes - ER005 now covers the refusal of an in-place promotion, and ER006 the restart of a demoted node with a stale replication.role
  • Client libraries rewritten for the QWP binary protocol, unifying ingestion and streaming SQL queries under one handle: Java, Python, Go, C & C++, Rust, and .NET
  • Web Console - Documented query sharing by link and tab import/export in the code editor, custom AI providers and per-provider permission levels in QuestDB AI, automatic column sizing in the result grid, and the storage policy section in table details
  • AI coding agents - Repositioned around the agent skill and the Web Console MCP bridge together
  • Telegraf - Documented authenticating from Telegraf with the Enterprise token setting or the Open Source http_headers basic-auth equivalent
  • Integrations overview - Synced with the sidebar: added the six missing pages, moved MindsDB into Other Tools, and added a Data Ingestion cross-reference
  • Parquet - Moved the Parquet page to Concepts and revamped it around creating tables as Parquet, in-place conversion (storage policies and ALTER TABLE), and export; also documented ALTER COLUMN TYPE on Parquet partitions and relaxed the in-place conversion constraints
  • Storage engine - Reworked the three-tier storage model: local native or Parquet storage, then remote object storage
  • systemd deployment - Reworked the systemd service guide to cover both QuestDB Open Source and Enterprise
  • Time to live (TTL) - Documented TTL on materialized views, set with CREATE MATERIALIZED VIEW ... TTL or ALTER MATERIALIZED VIEW ... SET TTL and managed independently of the base table's TTL
  • Result grid - Documented the Parquet and CSV download options in the web console result grid
  • Docker Compose configuration - Reworked the volume-permission guidance and explained why QDB_CAIRO_ROOT should not be set in Docker
  • QuestDB MCP server - Renamed from "MCP connection" and reworked around when an agent actually needs an MCP server, with AI coding agents gaining a four-option matrix covering the MCP server, the REST API, the agent skill, and the QuestDB AI Assistant
  • pandas and Polars - Rewritten around the native QWP clients, keeping the previous ILP and ConnectorX approaches as legacy; Polars now also covers the Rust polars-ingress and polars-egress crate features
  • Python client - Documented N-dimensional float64 numpy arrays landing in matching N-dimensional column types (other dtypes are rejected), and clarified Polars consumption: prefer to_polars(), with polars.DataFrame(result) reserved for pyarrow-free installs
  • Query overview - Added a client libraries section ahead of PostgreSQL, and removed the stale notice describing Parquet support as beta
  • QuestDB MCP server - Updated for the renamed MCP server: the npm package is now @questdb/mcp-server-questdb (previously @questdb/mcp-bridge) and the repository is now questdb/mcp-server-questdb, also reflected in AI coding agents
  • .NET client - Documented the optional net-questdb-client-zstd package for QueryClient egress compression: the fail-fast ConfigError raised when compression=zstd is requested without it, compression=auto degrading silently to raw, and the trimmed and Native AOT reflection caveat. The beta notice now refers to 4.0.0
  • systemd deployment - ExecStart now depends on which archive you extracted rather than on CPU architecture, because only the rt- archive bundles Java while the no-JRE archive runs on system Java and needs -p /opt/questdb/questdb.jar. A new Startup failures section maps both common boot errors to their cause and fix
  • CREATE TABLE - Dropped the redundant WAL keyword from CREATE TABLE examples across the documentation. Partitioned tables have been WAL-enabled by default for a long time, and SHOW CREATE TABLE no longer emits the keyword either, so the documented output now matches what the server returns

July 2026​

QuestDB Enterprise Releases​

  • 3.3.4 - Released July 31, 2026
  • 3.3.3 - Released July 1, 2026

Updated​

  • Storage policy - Clarified stage enforcement: TO REMOTE is now accepted and stored but not yet enforced, DROP REMOTE is rejected at parse time, and the policy check interval is 5 minutes
  • systemd deployment - Added the jdk.internal.vm module export to the service example

June 2026​

Releases​

  • 9.4.3 - Released June 15, 2026
  • 9.4.2 - Released June 9, 2026
  • 9.4.1 - Released June 3, 2026

QuestDB Enterprise Releases​

  • 3.3.2 - Released June 23, 2026
  • 3.3.1 - Released June 9, 2026
  • 3.3.0 - Released June 3, 2026

New​

Reference​

  • Documented the column wildcard with optional EXCLUDE list for column-level GRANT and REVOKE — GRANT SELECT ON trades(*) TO user grants every current column, and EXCLUDE omits specific ones
  • Documented custom root CA support for the replication object store: the ca_cert_file and ca_builtin_roots connection-string parameters trust a private, internal, or self-signed CA for S3, Azure Blob, and GCS stores
  • Added array_agg() aggregate function, covering scalar and array input forms, SAMPLE BY with FILL, and NULL handling
  • Documented the twap() designated-timestamp limitation: the timestamp argument must be the table's designated timestamp
  • Added kurtosis(), kurtosis_pop(), skewness(), and skewness_pop() aggregate functions for distribution shape

Updated​

  • systemd service example - Updated the Java requirement from 17 to 25 across deployment and quick-start prerequisites
  • GCP deployment - Reworked for VM install and aligned with the AWS and Azure guides
  • Capacity planning - Reworked the OS configuration guidance for open file limits and vm.max_map_count

May 2026​

Releases​

  • 9.4.0 - Released May 18, 2026

New​

  • Out-of-order data - New concept page covering O3 behavior per ingestion method, engine mechanics, write amplification (with the table_write_amp_* columns), tuning, and common scenarios
  • Posting index and covering index - New deep-dive on posting indexes, plus covering index documentation across CREATE TABLE, ALTER TABLE, SHOW, EXPLAIN, and schema design
  • Order Flow Imbalance (OFI) - Cookbook recipe using the Cont-Kukanov-Stoikov definition computed from L1 quote changes, with per-ECN and consolidated variants
  • Upgrade QuestDB - Guide for upgrading QuestDB versions
  • Table/column versioning - Added versioning info to root directory structure
  • DECLARE with Grafana time range - Pass Grafana dashboard time range into QuestDB DECLARE variables

Reference​

  • Documented gzip request compression for ILP/HTTP and updated Telegraf guidance for QuestDB 9.1.0+
  • Added ntile(), cume_dist(), and nth_value() window functions
  • Added regr_r2() coefficient of determination aggregate
  • Fixed timestamp_ns valid range documentation
  • Added precise microsecond-grained timestamp examples for PHP clients
  • Fixed PIVOT syntax: removed redundant FOR from multiple pivot statements
  • Updated Python client to use sender.new_buffer() for buffer initialization

Updated​

  • Go client - Rewrote for the QWP binary protocol: ingestion, the QwpQueryClient query API, store-and-forward, and failover
  • Storage policy - Removed the DROP NATIVE stage; TO PARQUET now removes native files and serves reads from the Parquet file
  • SQL extensions and compatibility - Rewritten as the canonical SQL dialect reference covering time-series clauses and joins, query syntax conveniences, storage extensions, PIVOT vs SQL Server/PostgreSQL, JSON and UNNEST, and a full inventory of standard SQL features not supported with QuestDB equivalents. Sidebar entry moved to the top of Query & SQL Reference
  • systemd service example - Corrected JVM argument ordering, switched to UseParallelGC, set -Dcontainerized=false, and added required setup paths
  • Materialized views - Removed storage policy support for materialized views; use TTL for retention instead
  • Aggregation functions - Added demo tags and updated examples with runnable queries
  • LATEST ON - Added demo tags to examples
  • JOIN - Updated examples to use demo data
  • GROUP BY - Replaced examples with fx_trades demo queries
  • DISTINCT - Replaced examples with fx_trades demo queries
  • CAST - Added demo tags to examples
  • PIVOT - Fixed examples to use demo server data
  • Array functions - Improved page with demo examples
  • TICK syntax - Documented imprecise date support
  • SAMPLE BY - Documented FILL(PREV(col)) fast-path syntax and updated FROM-TO limitations for keyed queries
  • Grafana integration - Restructured query macros section with full documentation of all five plugin macros
  • Configuration reference - Revamped into 17 dedicated per-subsystem pages with epigraph-style property listings

April 2026​

Releases​

  • 9.3.5 - Released April 13, 2026

QuestDB Enterprise Releases​

  • 3.2.5 - Released April 13, 2026

New​

Reference​

  • Added Parquet bloom filters syntax and configuration
  • Added covar_samp(), corr(), and other statistical window functions
  • Added array_elem_min(), array_elem_max(), array_elem_sum(), array_elem_avg() to array functions
  • Fixed alphabetical ordering and added missing functions across reference pages
  • Added Azure ReadWrite disk caching warning to deployment docs

Updated​

  • SQL reference pages - Replaced railroad diagrams with code-based syntax blocks across 65 SQL pages, with updated examples
  • SAMPLE BY - Updated timezone bucket alignment behavior
  • Parquet export - Added partitioning options for exports
  • WINDOW JOIN - Documented dynamic window boundaries
  • HORIZON JOIN - Documented multi-RHS table support
  • JOIN - Improved join documentation and reorganized page
  • Web Console - Added table details, updated screenshots
  • TTL - Fixed removal syntax and general improvements
  • REST API /exp endpoint - Documented timeout parameter, removed outdated warning

March 2026​

Releases​

  • 9.3.4 - Released March 26, 2026

QuestDB Enterprise Releases​

  • 3.2.4 - Released March 26, 2026
  • 3.2.3 - Released March 3, 2026

New​

Reference​

Updated​

February 2026​

Releases​

  • 9.3.3 - Released February 25, 2026

QuestDB Enterprise Releases​

  • 3.2.2 - Released February 4, 2026

New​

  • HORIZON JOIN - Full reference page for post-trade analysis joins
  • Post-trade analysis recipes: markout, slippage, implementation shortfall, ECN scorecard, last-look, and VPIN
  • Financial indicator recipes: RSI, MACD, Stochastic, Rate of Change, ATR, Donchian Channels, Keltner Channels, Realized Volatility, OBV, Maximum Drawdown, Bid-Ask Spread
  • TICK Exchange Calendars - Enterprise feature for market-hours-aware time intervals
  • AI Coding Agents - Renamed from LLM Coding Assistants, added QuestDB agent skill documentation

Reference​

  • Added twap() aggregate function
  • Added array_build() function
  • Documented count(distinct) syntax
  • Updated Java ILP client artifact
  • Added WAL cleaner documentation for replication

Updated​

January 2026​

Releases​

  • 9.3.2 - Released January 28, 2026
  • 9.3.1 - Released January 14, 2026
  • 9.3.0 - Released January 9, 2026

QuestDB Enterprise Releases​

  • 3.2.1 - Released January 29, 2026
  • 3.2.0 - Released January 19, 2026

New​

  • Cookbook - Collection of 40+ recipes for common SQL patterns, integrations, and operations
  • Capital markets recipes - Financial calculations including VWAP, Bollinger Bands, TICK/TRIN, volume analysis, and more
  • TICK syntax - New DSL for expressing time intervals with intuitive syntax like '$now - 1h..$now'
  • AI Assistant reference - Documentation for the QuestDB AI Assistant
  • PIVOT - SQL keyword for rotating rows into columns

Reference​

Updated​

December 2025​

Releases​

  • 9.2.3 - Released December 18, 2025
  • 9.2.2 - Released December 1, 2025

QuestDB Enterprise Releases​

  • 3.1.2 - Released December 18, 2025
  • 3.1.1 - Released December 1, 2025

New​

  • Builtin profiler - Documentation for QuestDB's built-in query profiler
  • WINDOW JOIN - SQL reference for window joins with time-based lookups

Reference​

Updated​

November 2025​

Releases​

  • 9.2.1 - Released November 25, 2025
  • 9.2.0 - Released November 13, 2025
  • 9.1.1 - Released November 3, 2025

QuestDB Enterprise Releases​

  • 3.1.0 - Released November 25, 2025
  • 3.0.5 - Released November 7, 2025

New​

Reference​

  • Added first() and last() support for additional datatypes
  • Added first_not_null() and last_not_null() array support

Updated​

October 2025​

Releases​

  • 9.1.0 - Released October 3, 2025

QuestDB Enterprise Releases​

  • 3.0.4 - Released October 27, 2025

New​

Reference​

Updated​

September 2025​

QuestDB Enterprise Releases​

  • 3.0.3 - Released September 15, 2025

Updated​

August 2025​

Releases​

  • 9.0.3 - Released August 29, 2025
  • 9.0.2 - Released August 15, 2025

QuestDB Enterprise Releases​

  • 3.0.2 - Released August 29, 2025
  • 3.0.1 - Released August 15, 2025

New​

Updated​

July 2025​

Releases​

  • 9.0.1 - Released July 23, 2025
  • 9.0.0 - Released July 11, 2025

QuestDB Enterprise Releases​

  • 3.0.0 - Released July 23, 2025

New​

Updated​

  • ILP clients - Array support added to Python, C++, Rust, Java, and .NET clients
  • WAL metrics - Added metrics for detecting WAL apply lag

Earlier updates​

For documentation changes before July 2025, see the git commit history.