Documentation changelog
This page tracks significant updates to the QuestDB documentation.
October 2026
Releases
- 10.1.0 - Released October 22, 2026
QuestDB Enterprise Releases
- 4.1.0 - Released October 22, 2026
New
- Browser client - New page for
@questdb/browser-client, which writes rows and streams SQL query results over QWP WebSockets directly from web applications. Covers same-origin deployment behind a reverse proxy, applications on their own origin listed inqwp.browser.allowed.origins, session-cookie and per-connection credential authentication with refreshed OIDC tokens, in-memory replay, failover, and the differences from the Node.js client - Token providers - The Java client 1.3.11 requests and renews bearer tokens itself, with
token_provider=azurefor Microsoft Entra ID or aRefreshingTokenProviderfor other identity providers. Covers thequestdb-client-azureartifact, credential selection, failure classification, and how senders, queries, and orphan drainers handle token failures - Connection health - The Java client reports whether each sender and query client reaches the server, since when it has not, and its last failure
- Managed identities and service principals - Authenticate Azure services to QuestDB Enterprise with Entra ID app-only tokens: app roles, v2.0 tokens, claim lists, group mappings, and the Java client
- User and group claims - Fallback claim lists for
acl.oidc.sub.claimandacl.oidc.groups.claimin QuestDB Enterprise 4.1.0, how QuestDB picks a claim, and the startup checks - Token validation - What QuestDB checks in a token, and how it finds the expected issuer
- Sessions and token expiry - HTTP sessions end when QuestDB rejects their token, and how the Web Console renews its tokens and handles failed renewals
- Troubleshooting OIDC - Log lines of rejected logins and tokens, and the errors of the Web Console login page
- HTTP sessions in the REST API - Open and close a session with the
qdb_sessioncookie, and how QuestDB 10.1.0 and QuestDB Enterprise 4.1.0 end a session whose credential they reject - HTTP sessions in RBAC - Sessions of QuestDB Enterprise 4.1.0 end with their credential, how to end the Web Console logins of a user, and what replicas keep
- Merge-append partitions - Reduce copying for backdated ingestion, monitor partition pieces and dead rows, and safely disable the layout before downgrading or converting to non-WAL
- Persisted metrics - New section on the
sys.metricstable, where QuestDB keeps a history of its own metrics, with example queries - Databento connector - New page for the QuestDB Enterprise Databento connector, which streams Live feeds and runs Historical backfills into QuestDB. Covers installation, TOML configuration, table mappings, storage policies, candles from a materialized view, a session VWAP live view, live dashboards in a Web Console notebook or Grafana, checkpointed recovery, and Prometheus metrics
- ALTER LIVE VIEW RESUME WAL - New reference page for resuming a live view whose own WAL was suspended after an error, and how to find suspended live views through
wal_tables() - Audited views - QuestDB Enterprise views created
WITH AUDITkeep a best-effort audit trail of their reads insys.view_audit: who read the view, when, and with whichAUDITEDparameter values, plus theview.audit.*settings - Declared value lists -
DECLARE @symbols := ('BTC-USDT', 'ETH-USDT')names the values of anINfilter once, including lists of bind variables and list parameters in views - Object visibility - QuestDB Enterprise 4.1.0 hides tables, views, materialized views, and live views from principals that hold no permission on them. Covers the visibility rules, protected and public tables, the metadata any permission discloses, the missing-object errors that replace
Access denied, and the paths that still reveal a hidden object or its columns - Catalogue functions in materialized views - Lists the functions and
SHOWstatements that count as catalogue functions, why a materialized view can no longer read them through a regular view, and theSYSTEM ADMINrequirement for calling them in its own query on Enterprise. The live view pages link to the same rules - Access control functions - New reference page for the QuestDB Enterprise ACL table functions.
active_permissions()andactive_grants(), new in Enterprise 4.1.0, list the effective permissions and the direct grants of every user, group, and service account, with examples for auditing who can read a table. The page also coversall_permissions()andpermissions() - Ruby client - New page for the QuestDB Ruby client
0.1.x, a thin layer over the C client that ingests and queries over QWP through oneQuestDB::Client. Covers row, columnar, and Arrow ingestion, SQL queries, authentication and TLS, the connection pool, delivery and durability, concurrency and sizing, failover and errors, the standalone sender, and a production example with TLS, a token, and multiple hosts - Data governance and auditing - New overview that maps QuestDB features to governance questions: who can connect and what they can read, entitlement reviews with the access control functions and
SHOW CREATE DATABASE, audited views and query tracing, lineage through view definitions, retention with storage policies and sealed cold partitions, and backup and recovery. Ends with the coverage limits to check before mapping QuestDB to a compliance control
Reference
- Added the
qwp.browser.allowed.originsandqwp.browser.tls.termination.enabledsettings, which control the browser origins allowed to open QWP WebSockets and same-origin checks behind a TLS-terminating proxy acl.oidc.issuerandacl.oidc.issuer.validation.enabled- New settings for the expected issuer of a tokenacl.oidc.sub.claimandacl.oidc.groups.claim- Documented claim lists and their startup validation, and corrected thatacl.oidc.groups.claimhas no default and is requiredacl.oidc.cache.ttl- Documented that0disables the cache, and how long an HTTP session reuses a password checkhttp.session.timeout- Documented how long an idle HTTP session stays valid, and that a value without a unit suffix is read as microseconds- Token providers - The
token_providerandazure_*connect-string keys of the Java client - Added merge-append and partition compaction settings and the
deadRows,lastWriteTimestampandpieceCountcolumns inSHOW PARTITIONSandtable_partitions() - Added
metrics.enabledand themetrics.persist.*settings forsys.metrics - Added the dedicated live view refresh worker pool settings
live.view.refresh.worker.count,.affinity,.haltOnError,.nap.threshold,.sleep.threshold,.sleep.timeout, and.yield.threshold, pluscairo.live.view.checkpoint.purge.interval. Live views run on their own refresh pool, not the materialized view pool as previously documented - Added the
checkpoint_seal_failurescolumn tolive_views()and corrected thelag_seqtxn,last_processed_seqtxn,lag_micros, andwriter_stall_microsdescriptions - Corrected the defaults of
mat.view.refresh.worker.countandwal.apply.worker.count, and documented thatmat.view.refresh.worker.count=0disables materialized view refresh - Added the parallel GROUP BY over hash joins settings:
cairo.sql.parallel.hash.join.groupby.enabled,.build.parallel.min.rows,.build.rows.per.partition,.payload.copy.max.size,.payload.copy.min.probe.ratio, and.payload.copy.parallel.min.probe.ratio. Documented the queries that qualify and which input each join type builds in JOIN, and theAsync Hash Join Group Byplan node in EXPLAIN - Added the HORIZON JOIN settings
cairo.sql.horizon.join.max.offsetsandcairo.sql.parallel.horizon.join.enabled - Corrected the default of
cairo.sql.parallel.groupby.sharding.thresholdto10000, and documented thatcairo.sql.parallel.groupby.enabledneeds at least one query worker, not four - Added the
WITH AUDITclause of CREATE VIEW, theAUDITEDmodifier of DECLARE, and theAUDIT VIEWpermission - Added the
percentile_cont()andpercentile_disc()aggregate functions, with theirquantile_cont()andquantile_disc()aliases, for exact continuous and discrete percentiles. Both accept an array of percentiles to compute several in one pass. Their window function forms attach the percentile of a whole partition to every row - Added the adaptive WAL apply block settings
cairo.wal.apply.block.size,cairo.wal.apply.block.memory.percent, andcairo.wal.apply.block.max.rows. WAL apply blocks grow within a memory budget to reduce out-of-order merges, andcairo.wal.squash.uncommitted.rows.multipliernow sizes blocks only when adaptive blocks are disabled - LATEST ON - Corrected the supported
PARTITION BYcolumn types: any type exceptBINARY,ARRAY, andDECIMAL. Documented that the timestamp can beTIMESTAMP_NS, thatNULLkeys form their own group, and when a query stops early or scans the whole table - Kubernetes Operator pod labels and annotations -
spec.podMetadataadds labels and annotations to every instance Pod, for example for a metrics agent to scrape
Guides
- Rotate a node pool - Replace the nodes of a replicated Operator-managed cluster without losing replica capacity: cordon the retiring nodes, add a surge replica, hand off the primary with a planned promotion, drain one node at a time, and return to the original instance count
Updated
- Audited views - From QuestDB Enterprise 4.1.1, only the built-in admin can remove rows from
sys.view_audit, or set its storage policy or TTL.TRUNCATE TABLE, partition drops and detaches,SET TTL,SET PARAM,SET STORAGE POLICY, andENABLE STORAGE POLICYon the trail are refused to every other principal, whatever it holds. Documented how to keep the trail pruned with the built-in admin disabled, and the upgrade steps - Node.js client - Rewritten for client 5.0.0, which speaks QWP: ingestion through
Senderwithws::connect strings, the pooledconnectQwpNodeClient()handle, compiled object-row writers, every QWP column type, streaming SQL queries with bind parameters, store-and-forward, failover, error payloads, and a migration guide from ILP. The connect string reference now lists the Node.js defaults and differences - Upgrade QuestDB - Authentication changes to check before upgrading to QuestDB Enterprise 4.1.0
- QWP client behaviour - Authentication failures by phase, and the retry with a new token after a
401. The QWP ingress and egress, client failover, and connect string pages now describe how the Java client retries authentication failures - Java client - Corrected the error categories and policies, that the
QuestDBbuilder accepts an error handler, and theAUTH_FAILEDconnection event - Microsoft Entra ID - The configuration takes the principal from
preferred_usernameinstead of the display name - Partition splitting - Documented WAL split retention and background merging of idle splits and reclamation of Parquet dead space, including when merge-append is disabled
- HORIZON JOIN - Breaking change in QuestDB 10.1.0: a HORIZON JOIN without aggregate functions now returns one row per left-hand row and offset instead of grouping by the selected columns. Documented the row order, the designated timestamp of the result, how
SELECT DISTINCTor an explicitGROUP BYrestores the previous result, the upgrade steps for queries, outer aggregation, views,INSERT INTO ... SELECT, andCREATE TABLE AS SELECT, and the new execution plan names - HORIZON JOIN - Breaking change in QuestDB 10.1.0: documented right-hand filters, written in the
ONclause, as a(table WHERE ...)subquery, or as aSELECTof the table's columns, which apply before the ASOF match. Earlier versions ignoredONpredicates other than the join keys. Added a grammar for the right-hand side, including CTEs, and documented theORDER BYlimitation - Aggregated slippage, ECN scorecard, and Implementation shortfall recipes - The pivoted HORIZON JOIN queries now aggregate in the HORIZON JOIN, which runs in parallel, and use
PIVOTwithfirst()only to reshape the offsets into columns. They return the same results, faster. The daily P&L attribution now groups by day instead of by millisecond - Metadata functions in views - On Enterprise, table-name functions, such as
table_columns(), and theSHOWstatements that name an object resolve the objects a view's definition names with the view's authority, while objects substituted throughOVERRIDABLEvariables resolve as the reader. Since QuestDB 10.1.0, dropping a table named by a table-name function invalidates the view - Meta functions - On Enterprise,
reader_pool(),writer_pool(), andhydrate_table_metadata()requireSYSTEM ADMIN,wal_tables()shows the protected access control tables to administrators, andstorage_policiesandtable_cold_partitions()follow object visibility. Documented the single-column grant that lets a principal querystorage_policies - GRANT and REVOKE - Documented the errors for hidden and missing tables. GRANT and RBAC now state that only the built-in admin can grant on a table that does not exist yet, and RBAC that
WITH VERIFICATIONchecks the grantee, not the table - Upgrade QuestDB - Added the QuestDB Enterprise 4.1.0 checklist for object visibility, split into what to check before upgrading and what to run after, with a query that finds the affected views, materialized views, and live views, and the fix for a materialized view the upgrade invalidates
- Monitoring and alerting and RBAC - On Enterprise,
tables()andwal_tables()list only the objects a monitoring account can see, so a hidden suspended table raises no alert. Added a monitoring account scenario with the grants it needs, whatSYSTEM ADMINalso authorizes, and a narrower alternative - Kubernetes operator database operations - On QuestDB Enterprise 4.1.0, the
wal_tables()observations behindWriteHealthy, replica lag, andcaughtUpNowdo not cover your tables - SWITCH COLD STORAGE ROLE and RBAC - Corrected that
REBASE WALand the cold storage role switch require the grantableSYSTEM ADMINpermission - SHOW, Views, Row-level security, Copy a schema to another instance, and the DROP TABLE, ALTER VIEW, COMPILE VIEW, DROP VIEW, DROP MATERIALIZED VIEW, and DROP LIVE VIEW references - Updated examples and error tables for objects hidden from the caller
- Databento with Python - Updated the QuestDB Open Source guide to ingest an
EQUS.MINIsubscription over QWP with the QuestDB Python client, withts_recvas the designated timestamp as in the connector. Added an example query, a materialized view, and charts on a live Web Console notebook dashboard, with Grafana as an alternative - C and C++ and Rust clients - Documented the 7.1.0 canonical RFC 4122 UUID byte order at the API boundary, UUID and LONG256 claims for binary Arrow columns through field metadata or per-column overrides, and the silent behavior change for code written against 7.0.0.
- C and C++ and Rust clients - Documented for 7.2.0 the frame cap a QWP/WebSocket buffer flush must fit, that the buffer size reported by
line_sender_buffer_sizeandBuffer::len()is at least the encoded frame size, and thebatch_too_largeerror an oversized buffer or unsplittable chunk frame returns. The C and C++ FetchContent example now pins the 7.2.0 tag - Rust client - Clarified DataFrame-wide
in_doubtstatus versus individual flushes and the risk of duplicating committed rows on retry - Store-and-forward - Corrected replay guidance: connection-local sequence numbers do not deduplicate writes; table-level deduplication with stable row identity is required to suppress duplicates
- Live views - Corrected the supported window functions to match QuestDB 10.0.1: the statistical functions, EMA, and VWEMA run only in anchored windows,
ksumdoes not supportRANGEframes,lagneeds a bounded frame or an anchor, andVARCHAR,UUID,LONG256,DECIMAL,BINARY, and array partition keys are rejected. Added a rolling standard deviation recipe for Bollinger bands, rewrote Freshness to reflect that interval-filtered reads, aggregates, andASOF JOINsee unflushed rows whileLATEST ONdoes not, and added theUPDATEandREBASE WALinvalidation triggers, base WAL retention, and replica freshness. Documented that an out-of-order base row rewrites view rows already emitted, thatview_statusstaysactivewhile the view's own WAL is suspended, and what to change inSHOW CREATE LIVE VIEWoutput before replaying it - CREATE LIVE VIEW - Fixed the
OWNED BYexample, which requires a parenthesized query, documented the designated-timestamp projection requirement and the remaining anchored-window rules, and expanded the error reference with verified messages. Added a grammar for anchored windows and examples of aRANGEframe with aWHEREfilter and an anchored session window - Live view configuration - Corrected the descriptions of the in-memory buffer growth budget, partition compaction threshold, flush retry budgets, and refresh memory limit
- Shared workers - The write pool no longer lists WAL apply and materialized view refresh, which run on dedicated pools together with live view refresh
- EMA and VWEMA - Corrected the frame behavior: both reject a frame clause instead of ignoring it
- ALTER TABLE RESUME WAL, Monitoring and alerting, and Write-ahead log - Suspended materialized views and live views now point to their own
RESUME WALcommands, sinceALTER TABLEfails on them;wal_tables()now lists live views - ALTER MATERIALIZED VIEW RESUME WAL - Corrected the Enterprise permission to
RESUME WAL - Materialized views and live views - Documented that the Enterprise administrative functions, such as
permissions(),backups(), andreload_tls(), are rejected in materialized and live view queries, and the error they return - RBAC - Documented how a read-only replica reloads replicated access lists, and the error a statement fails with when a reload does not finish within 30 seconds
- Enterprise quick start - Corrected the guidance for listing granted permissions:
all_permissions()lists the available permissions, andactive_grants()lists the grants - Kubernetes Operator - Updated for Operator 0.3.1, with upgrade notes on the removed convenience ClusterRoles and on applying the new CRDs first when
crd.enable=false, the synced API reference, and QuestDB Enterprise 4.0.1 as the tested image - Kubernetes Operator permissions - Documented the cluster-wide RBAC the Operator is granted, which Secrets it reads and creates, why it never deletes a Secret, and that it has no object store or cloud permissions
- Kubernetes Operator backups left by departed instances - On Operator-managed clusters, backup prefixes of demoted or scaled-down instances are never pruned automatically. Covers when they are still needed as a seed or restore point, how to identify the safe ones to delete, and why age-based bucket lifecycle rules are risky
- Kubernetes Operator - Updated for Operator 0.4.0. A one-instance cluster no longer gets a PodDisruptionBudget by default, so a node drain restarts the database instead of blocking. The known limitations and node maintenance pages describe the new behavior and recommend turning on node auto-repair
- Compression - Parquet partitions are now the recommended way to compress data, converted automatically by a storage policy on Enterprise or with
ALTER TABLE CONVERT PARTITIONon open source, instead of ZFS. The AWS, Azure, and GCP deployment guides recommendext4orxfsand tiering to object storage, and the Enterprise quick start combines compression and storage policies into one step - Schema design - Partition interval advice now matches the partitions page: target 30 to 80 million rows per partition, with updated rows per day for each interval
- Query times histogram - The recipe now computes exact bucket thresholds with
percentile_disc()instead ofapprox_percentile() - Python client - Documented that a pooled sender lease leaves its buffered rows unpublished when an exception exits the
withblock - OWNED BY - Clarified that QuestDB Enterprise stores no owner for tables, views, materialized views, live views, or columns.
OWNED BYonly decides who receives the creator's permissions at creation time, and those become ordinary grants. The CREATE TABLE, CREATE VIEW, CREATE MATERIALIZED VIEW, CREATE LIVE VIEW, and ALTER TABLE ADD COLUMN pages no longer describe it as assigning an owner. TheOWNED BYclause in SHOW CREATE output and inSHOW CREATE DATABASEdumps names the principal running the statement, replaying it gives that principal all permissions on the object, andactive_grants()is the way to see who holds permissions - SHOW CREATE DATABASE - Corrected that filtering the dump with
WHEREworks: wrap the statement in parentheses and match theddlcolumn with a leading wildcard, as in(SHOW CREATE DATABASE) WHERE ddl ILIKE '%fx_%', then check that the filtered dump includes every object it depends on before replaying it - Connect to QuestDB - The overview lists Ruby among the client libraries and no longer labels the .NET and Go clients as beta
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, andram.usage.limit.percentkeys - RBAC memory limits - Per-user, per-group, and per-service-account query memory limits in QuestDB Enterprise:
SET MEMORY LIMITonALTER USER,ALTER GROUP, andALTER SERVICE ACCOUNT, how limits resolve, theSET MEMORY LIMITpermission, and the upgrade migration - Resource groups - Isolate competing query workloads inside one QuestDB Enterprise instance. Covers who a policy applies to, which statements are managed, and what admission, weighted CPU and memory limits each actually guarantee, including why CPU control is cooperative and what happens while a replica's catalog is behind
- Configure and use resource groups - Requirements, choosing limits, and six worked scenarios: an instance that stops answering while CPU looks idle, keeping dashboards responsive, throttling a background job, bounding a workload's memory, governing a service account, and sharing one instance between teams, plus inspection, monitoring, client errors and troubleshooting
- Resource groups configuration - The
resource.groups.enabledmaster switch andresource.groups.process.memory.limit.bytesprocess ceiling, neither reloadable - CREATE RESOURCE GROUP, ALTER RESOURCE GROUP and DROP RESOURCE GROUP - New reference pages for the policy statements, with the parameter table, the effect of an online change on running queries, and what happens to queries still using a dropped group
ALTER USER,ALTER GROUPandALTER SERVICE ACCOUNTare now one page per statement form, matchingALTER TABLE. Twenty-three pages coveringENABLE,DISABLE,WITH PASSWORD,WITH NO PASSWORD,CREATE TOKEN,DROP TOKEN, SET MEMORY LIMIT, SET RESOURCE GROUP, UNSET RESOURCE GROUP, WITH EXTERNAL ALIAS andDROP EXTERNAL ALIAS- 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.sqlfile, withINCLUDE (SCHEMA)andINCLUDE (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:
lttbfor line charts, with a gap-preserving mode,minmaxandm4for per-time-bucket envelopes,uniformandcadencefor position-based selection, andsdt(Swinging Door Trending) for error-bounded compression with a2 * compdevreconstruction bound and an animated walkthrough. Also covers where the clause goes in a query, output order,NULLhandling, and which query shapes each method accepts - SUBSAMPLE window functions - New category with
cadence(),lttb(),m4(),minmax(),sdt(), anduniform(), which return a Boolean keep flag per row instead of the reduced row set. Covers the outer-query filter pattern, the ordering, framing, andNULLrules of each function,PARTITION BYandIGNORE NULLSsupport onsdt(), and when to use each form
Reference
- Added
cairo.sql.subsample.max.rows, the input row limit for thelttb,m4,minmax,uniform, andcadencemethods ofSUBSAMPLE. It does not apply tosdt
Reference
- Added
resource_groups(), which returns each group's policy alongside its live admission, CPU and memory counters, andcurrent_resource_group(), which reports the group a session's queries run in.current_resource_group()returnsDEFAULTfor an unmapped principal andnullonly when a query was never admitted to a group - Added the
RESOURCE GROUP ADMINpermission, which gates creating, altering and dropping resource groups, mapping principals to them, and readingresource_groups().SQL ENGINE ADMINkeeps its existing scope of listing and cancelling queries - Added the resource group metrics: nine Prometheus series per group labelled with
resource_group, plus five instance-wide series for activation, catalog health, managed dispatch and scheduler degradation - Added the Fiber mode properties that resource groups depend on:
http.worker.fiber.enabled,pg.worker.fiber.enabled,shared.network.worker.fiber.enabled,shared.query.worker.fiber.enabledandmat.view.refresh.worker.fiber.enabled, all defaulting totrueand none reloadable
Updated
- Python client - Documented 5.1.0 QWP-only row types, UUID/LONG256 binary column overrides and byte-order migration, and pandas type-preserving round trips including DATE and read-only type metadata
- Python client - Noted that
dataframe()is not atomic, so retrying a failed call can duplicate rows it already committed - query.timeout - The clock includes time spent queued for resource group admission, so a query can time out before it starts. Over PGWire each
Executemessage restarts it - Replication and SWITCH ROLE - Resource group policies replicate through the WAL pipeline while enforcement stays local, so a lagging replica applies the policy it has, and a replica that has not received the catalog cannot be promoted
- query_activity() - Documented the
is_wal,memory_used, andmemory_limitcolumns, and added aresource_groupcolumn showing which group each running query was admitted to.memory_limitis now capped by the group budget as well, so a principal with no limit of its own still reports one when its group sets a ceiling - wal_tables() - Documented the
errorTag,errorMessage, andmemoryPressurecolumns;errorTagreadsOUT OF MEMORYafter a WAL apply memory limit breach - SHOW -
SHOW USERS,SHOW GROUPS, andSHOW SERVICE ACCOUNTS, including their filtered forms, gain a trailingmemory_limitcolumn. Clients that read these results by position need updating. The unfiltered forms also gainresource_group, andSHOW GROUPSadditionallyresource_group_priority - CREATE GROUP - Documented the
WITH EXTERNAL ALIASform 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_uuidtakes(lo, hi)wherehiis the most significant half, matchingjava.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.timestamppoint-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.coldStorageblock, 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
- Azure - Documented buying QuestDB Enterprise through Azure Marketplace with a private offer, billed on the existing Azure invoice and still deployed in your own subscription
- HORIZON JOIN - Corrected the claim that aggregate functions are required. Without them, the result has one row per distinct combination of the selected columns, so select the left table's timestamp to get one row per event and offset. The WINDOW JOIN summary in the SQL extensions overview now states that it always aggregates, returning one row per left row. The JOIN reference and each time-series join page now link to a guide to choosing between them
August 2026
Releases
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 theSWITCH ROLEpermission - Failover and role switch - Operator guide for planned switchovers and promotions without a restart: prerequisites, the timeout budget, refusals and the
UNKNOWNstate, what each client protocol sees during a demote, the restart hazard, and theGET /lifecycleandPOST /lifecycle/switchendpoints - 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, theFORCEbreak-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-bridgelocal 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
NATIVEandPARQUET - 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 WALrequires, and the trap that writes to a suspended table succeed while staying invisible to queries untilRESUME WAL
Reference
- Added the
node_role()function, which reports the replication role of the instance to any authenticated session - RBAC - Added the
SWITCH ROLEpermission 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 /lifecyclecomponent snapshot and thehttp.health.check.authentication.requiredsetting - Replication metrics - Added
questdb_replication_pending_upload_txnandquestdb_backup_active_at_last_demote - Replication configuration - Documented that
replication.roleis the boot role, theprimary-catchup-uploadsvalue, and the restart hazard after an in-place switch - Storage Policy - The
TO REMOTEandDROP REMOTEstages are now enforced. Documented what each does, the requirement for a WAL table with cold storage enabled, and the warning thatDROP LOCALmakes 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 walkspending,live,sealed, anddeleting - SHOW PARTITIONS - Two trailing columns,
seqTxnandisRemotelyServed, 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.parquetbytes, 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.intervalconfiguration 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
Authorizationheader by hand) and Enterprise token auth - SHOW CREATE LIVE VIEW - Documented retrieving a live view's
CREATEstatement, alongside theCREATE LIVE VIEWandDROP LIVE VIEWpermissions - Added the
live_views()catalogue function and theLtable_typediscriminator to the meta functions page - Added the
is_end_of_month()date-time function, which is leap-year aware and returnsfalsefornull - Documented the
query.timeoutduration key (120s,1m,500ms) alongside the now-deprecatedquery.timeout.sec, and how the two relate - Added the
cairo.wal.apply.suspended.tablesandcairo.wal.apply.suspended.write.deniedconfiguration properties - SHOW CREATE MATERIALIZED VIEW - Documented retrieving a materialized view's
CREATEstatement, and alphabetized the SHOW reference page - SHOW CREATE DATABASE - Documented dumping the whole database schema as round-trippable DDL, with
INCLUDE/EXCLUDEcategory filtering - EXPLAIN - Added the
Encode sort/Encode sort lightplan node to the plan-node reference - LIMIT - Documented null
LIMITbounds (supplied via bind variables) and their two-bound semantics - Added the
cairo.sql.parquet.cache.memory.sizeconfiguration property (256 MB default), deprecating the slot-basedcairo.sql.parquet.frame.cache.capacity - Documented
cairo.rootabsolute-path behavior: theconf,import,export,tmp, and.checkpointdirectories 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 withINSERT INTO ... SELECTorCREATE TABLE AS - SAMPLE BY - Documented that the count is optional and defaults to
1, soSAMPLE BY his the same asSAMPLE BY 1h, and that it must be a positive integer written with no space before the unit - REST API - Documented
/executeand/validate, which compiles a query and returns its column metadata without running it./execis now marked deprecated in favour of/execute - HTTP server configuration - Flagged
circuit.breaker.buffer.sizeas unsupported since QuestDB 10.0.0; a config that still sets it logs an advisory, or fails to start underconfig.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, plussleep(),current_data_id()andsession_user() - UNION, EXCEPT, INTERSECT - Documented result column types: a column that is
SYMBOLon every branch staysSYMBOLinstead of widening, which also changes the type materialized byCREATE TABLE ASand reported in REST response metadata - HTTP server configuration - Documented that QuestDB Enterprise fails to start when
http.user,http.passwordorhttp.password.fileis set, since those Open Source settings were never enforced by Enterprise - markout_horizon hint - Documented the optimizer hint that stops a markout-curve
CROSS JOINfrom 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, andcairo.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 keepsys.acl_permissionsfrom growing until replica logins slow down - SQL extensions - Recorded that
pg_class.relkindandinformation_schema.tables.table_typedistinguish 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
tokensetting or the Open Sourcehttp_headersbasic-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 documentedALTER COLUMN TYPEon 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 ... TTLorALTER MATERIALIZED VIEW ... SET TTLand 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_ROOTshould 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-ingressandpolars-egresscrate features - Python client - Documented N-dimensional
float64numpy arrays landing in matching N-dimensional column types (other dtypes are rejected), and clarified Polars consumption: preferto_polars(), withpolars.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 nowquestdb/mcp-server-questdb, also reflected in AI coding agents - .NET client - Documented the optional
net-questdb-client-zstdpackage forQueryClientegress compression: the fail-fastConfigErrorraised whencompression=zstdis requested without it,compression=autodegrading silently to raw, and the trimmed and Native AOT reflection caveat. The beta notice now refers to 4.0.0 - systemd deployment -
ExecStartnow depends on which archive you extracted rather than on CPU architecture, because only thert-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
WALkeyword fromCREATE TABLEexamples 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
Updated
- Storage policy - Clarified stage enforcement:
TO REMOTEis now accepted and stored but not yet enforced,DROP REMOTEis rejected at parse time, and the policy check interval is 5 minutes - systemd deployment - Added the
jdk.internal.vmmodule export to the service example
June 2026
Releases
QuestDB Enterprise Releases
New
- Row-level security - New cookbook recipe for restricting row visibility per user
Reference
- Documented the column wildcard with optional
EXCLUDElist for column-levelGRANTandREVOKE—GRANT SELECT ON trades(*) TO usergrants every current column, andEXCLUDEomits specific ones - Documented custom root CA support for the replication object store: the
ca_cert_fileandca_builtin_rootsconnection-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 BYwith 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(), andskewness_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
DECLAREvariables
Reference
- Documented gzip request compression for ILP/HTTP and updated Telegraf guidance for QuestDB 9.1.0+
- Added
ntile(),cume_dist(), andnth_value()window functions - Added
regr_r2()coefficient of determination aggregate - Fixed
timestamp_nsvalid range documentation - Added precise microsecond-grained timestamp examples for PHP clients
- Fixed PIVOT syntax: removed redundant
FORfrom 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 NATIVEstage;TO PARQUETnow 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
TTLfor 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
- Storage policy - Documentation for configuring storage policies
- UNNEST - SQL reference for unnesting arrays into rows
- LATERAL JOIN - SQL reference for lateral subqueries
- Sparkline and bar visualization functions - Text-based chart functions for terminal and console output
- StructArrayExplode transform - Kafka SMT for exploding struct arrays
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
/expendpoint - Documented timeout parameter, removed outdated warning
March 2026
Releases
- 9.3.4 - Released March 26, 2026
QuestDB Enterprise Releases
New
- Log returns and gamma scalping signal cookbook recipes
Reference
- Added
array_sort()andarray_reverse()functions - Added TLS certificate expiration metrics to Prometheus monitoring docs
- Removed obsolete
cairo.sql.backup.*configuration keys - Fixed RLE encoding supported type documentation
Updated
- SAMPLE BY - Refreshed page with improved structure and examples
- HORIZON JOIN - Improved examples
- Cookbook - Refreshed recipes with lookback patterns, named windows, and updated schema references
- Per-column Parquet encoding and compression - Comprehensive documentation for column-level settings
- Database replication - GCP NFS transport and tuning updates
- Ingestion benchmarks - Updated benchmark image to Q1 2026
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
- Named windows - Support for reusable
WINDOWclause definitions - Parquet export - Fixed compression defaults, restructured page, updated
read_parquettypes - Backup - Documented
backup.schedule.cronformat, improved scheduler visibility - Date/time functions - Page updates and corrections
- Window functions - Added limitation documentation
- Database replication - Added workload identity options, OrderBookToArray SMT documentation
- Kubernetes secrets - Documented secrets-from-files for container deployments
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
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
- Added
percent_rank()window function - Added
arg_min()andarg_max()aggregation functions - Added
length_bytes()function for byte-length of strings - Added
rnd_symbol_zipf()and weighted random generators - Added Euclidean and geographic geo functions
- Extended date arithmetic with sub-day units
Updated
- Window functions - Restructured into dedicated section with improved navigation, added EMA, VWEMA, and ksum() functions
- Views and materialized views - Comprehensive documentation overhaul with improved examples and clearer explanations
- Designated timestamp - Consolidated timestamp documentation with TICK syntax examples
- Enterprise backup - Improved documentation with clearer instructions
December 2025
Releases
QuestDB Enterprise Releases
New
- Builtin profiler - Documentation for QuestDB's built-in query profiler
- WINDOW JOIN - SQL reference for window joins with time-based lookups
Reference
- Added
weighted_avg(),weighted_stddev_rel(),weighted_stddev_freq()functions - Documented compact period syntax in SAMPLE BY
Updated
- Materialized views - Added
REFRESH PERIOD (SAMPLE BY INTERVAL)compact syntax documentation - Time-series optimizations - Improved explanations
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
New
- Hetzner deployment - Step-by-step guide for deploying QuestDB on Hetzner Cloud
- DECIMAL datatype - Documentation for precise decimal arithmetic
- PGWire OIDC integration - Authentication via OpenID Connect
Reference
- Added
first()andlast()support for additional datatypes - Added
first_not_null()andlast_not_null()array support
Updated
- Parquet export - Complete documentation for exporting data to Parquet format
- Shared pool configuration - Updated with network, query, and write shared pool options
- SQL hints - Rewritten section on temporal join hints
October 2025
Releases
- 9.1.0 - Released October 3, 2025
QuestDB Enterprise Releases
- 3.0.4 - Released October 27, 2025
New
- PGWire for C/C++ - Guide for C/C++ applications using PostgreSQL wire protocol
- Table and column naming rules - Guidelines for valid identifiers
Reference
- Added
w(week) unit to SAMPLE BY reference
Updated
- Architecture guide - Refreshed with current implementation details
- Nanoseconds - Added nanosecond timestamp precision documentation
TRUNCATE TABLE- AddedIF EXISTSclause
September 2025
QuestDB Enterprise Releases
- 3.0.3 - Released September 15, 2025
Updated
- Partitioning - Improved formatting and explanations
- Go client examples - Updated to v4 API
August 2025
Releases
QuestDB Enterprise Releases
New
- Array functions - Documentation for array manipulation functions
Updated
to_timestamp()- Improved documentation with more examples- Web Console - Updated documentation for latest console features
July 2025
Releases
QuestDB Enterprise Releases
- 3.0.0 - Released July 23, 2025
New
- N-dimensional arrays - Comprehensive guide to multi-dimensional arrays
- Order book analytics - Guide for processing order book data
- Period materialized views - Time-based refresh for materialized views
- ASOF JOIN TOLERANCE - Limit lookback window in temporal joins
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.