Release date: 2026-07-22
| Release type | Recommended for |
|---|---|
| Feature release | Users of federated query, window functions, stream processing, or virtual tables |
1. Highlights
- Federated query: External data sources can be queried through virtual tables, and a stream task can run a federated query. MySQL, PostgreSQL, and InfluxDB v3 are supported. The feature is off by default.
- Query: Window functions and the
OVERclause, aggregateDISTINCT, windows aligned to calendar time units, multi-column state windows, andTEXT/FILEinline data sources are added. - Timezone: A connection-level timezone is added, with IANA timezones and daylight saving time.
- Virtual tables: A virtual super table can inherit another. Ordinary columns and tag columns of a virtual child table can reference other tables.
- Stream processing:
ROLLUP BYsummarizes by tag hierarchy.true_forof an event window can set the start condition and the end condition separately. - Connections and security: The C, Go, Python, and Node.js WebSocket connectors support taosAdapter high availability. Several memory-safety issues that could crash taosd are fixed.
2. Features
2.1 Federated query and virtual tables
- Federated query based on virtual tables is supported. External data sources are MySQL, PostgreSQL, and InfluxDB v3. Both the client and the server
federatedQueryEnablemust be on before use. The default is off. See Federated Query. - A stream task can run a federated query.
- A virtual super table can inherit another virtual super table. See Virtual Supertable Inheritance.
- An ordinary column of a virtual child table can reference another virtual child table.
- A tag column of a virtual child table can reference a physical child table and another virtual child table.
2.2 SQL and query
- Window functions and the
OVERclause are supported. See Window Functions. - Aggregate functions support
DISTINCT, for exampleCOUNT(DISTINCT col). TEXTandFILEinline data sources are added. Row values or a CSV file can be used directly inFROMwithout creating a table, and they can take part inSELECT,JOIN,UNION, andINSERT INTO SELECT. See TEXT Inline Data Source and FILE CSV Data Source.- Windows split by calendar time units are added. A window aligns to a local calendar boundary: calendar day, week, month, quarter, or year. The quarter unit
qis added. See INTERVAL Queries. - A connection-level timezone is added, with IANA timezone names and daylight saving time. See Timezone.
- A state window supports several state columns. See State Window.
- An external window supports
FILL. See External Window. - A window query can use original columns, tag columns, scalar functions, and variable-row functions.
- A window query can use
CSUM,DIFF,DERIVATIVE,MAVG,STATECOUNT,STATEDURATION,LAG,LEAD, andFILL_FORWARD, together withINTERVAL+FILL(NULL/NONE/VALUE/NULL_F/VALUE_F). REGEXP_EXTRACTis added. See REGEXP_EXTRACT.SLEEPis added to simulate a timeout in tests.GREATEST/LEASTcan skip NULL throughignoreNullInGreatest. The default does not skip NULL.DIFF,CSUM,MAVG,STATECOUNT,LAG,LEAD,FILL_FORWARD, andUNIQUEcan run when there is no time column.
2.3 Stream processing
- A stream trigger adds
ROLLUP BY tag_name, which summarizes by tag hierarchy. See Trigger Grouping. true_forof an event window can set the start condition and the end condition separately.SHOW STREAMScan name a database and match stream names withLIKE.
2.4 Metadata and cluster operations
- Metadata updates of super tables, child tables, and virtual tables support transactions.
- CPU affinity binding is supported and is off by default. See CPU Affinity.
- A specified vnode can be turned off temporarily at runtime.
taosd -radds--vnodeto name the vnode to repair.- The data-repair tool adds a copy-repair mode.
snapshotRateLimitis added. It limits the snapshot-send bandwidth of each dnode. The default is0, which means no limit.retryOnOverloadBaseIntervalandretryOnOverloadTimeoutcontrol client retry when the server is overloaded. The defaults are1000milliseconds and60000milliseconds.
2.5 Connectors
- The C, Go, Python, and Node.js WebSocket connectors support taosAdapter high availability. The client parameter is
adapterHa, defaultfalse.
2.6 taosX
- Data can be exported as Parquet files.
- DataOut can export data to Kafka.
- An OPC UA data source can collect alarms and events (Alarm & Events).
- Specified tables can be backed up and restored.
2.7 Platform support
- Windows supports MQTT subscription.
- Windows supports UDF.
2.8 Tools
- taosdump can export the statement that created a stream.
3. Enhancements
3.1 Query
INTERPinterpolation queries are faster.- A subquery ordered by the primary-key column runs more efficiently.
- While scanning a subquery, the intersection of the subquery time range and the outer query time range is used, so less data is scanned.
- A subquery,
UNION ALL, and a multi-level nested query automatically choose aTIMESTAMPcolumn in the result set as the timeline column. - Metadata fetch and parse of a federated query are improved.
3.2 Stream processing
COUNT_WINDOW(N, 1)supports historical recalculation.- Stream processing supports cross-table references and tag references on virtual tables.
- Aggregate queries on a virtual super table run more efficiently.
- Stream startup is faster when the group count is between 500,000 and 1,000,000.
3.3 Storage and cluster
- A multi-replica snapshot transfers files on demand, so recovery is faster.
- After
serverPortchanges, the internal port used by data subscription is updated automatically. - The error is clearer when creating a TSMA fails because there is no snode.
- RPC transport options on Windows are adjusted for higher performance.
3.4 Tools
- taosdump backup speed, restore speed, and backup-file compression ratio are higher. An old backup file can be restored by the new version.
- The prompt is clearer when the password entered with taosdump
-pis wrong. - taosExplorer handles batch CSV upload and database import better.
- taosExplorer shows database objects in a tree more clearly.
3.5 taosX
- While ingesting pspace, a long point name can be split on
/into child tags. The original long-name tag is kept, and anamevariable is provided. - Synchronizing InfluxDB data is faster in a high-cardinality scenario.
4. Fixes
4.1 Severe issues
The following issues made the service unavailable or returned wrong data.
- Scanning
information_schema.ins_tagsand resolving a virtual-table tag reference deadlocked taosd. Affected versions:v3.4.2.0andv3.4.2.1. - A query entered an infinite loop when the start time of
INTERVAL AUTOwasINT_MAX. Affected versions:v3.3.5.0throughv3.4.1.17. The syntax was introduced inv3.3.5.0. It is fixed fromv3.4.1.18and fromv3.4.2.0. - taosd crashed when stream processing failed to initialize the table list. Affected versions:
v3.3.7.0throughv3.4.1.17. - Compressing or decompressing a single row crashed the process. Affected versions:
v3.4.1.16and earlier. - Binding and executing again after an asynchronous STMT write reported an error crashed the process. Affected versions:
v3.3.3.0throughv3.4.1.16. Thev3.3.6patches fromv3.3.6.53onward are fixed. - On Windows, concurrent queries that used temporary files collided on file names, read the wrong data, and crashed. Affected versions:
v3.4.1.17and earlier. - A scheduled incremental backup in taosX occasionally missed data. Affected versions: all versions. The
v3.3.6patches fromv3.3.6.52onward, thev3.4.1patches fromv3.4.1.15onward, and versions fromv3.4.2.0onward are fixed. - While taosX consumed Kafka for historical backfill, data earlier than the keep1 window was dropped. Affected versions: all versions. The
v3.3.6patches fromv3.3.6.54onward, thev3.4.1patches fromv3.4.1.19onward, and versions fromv3.4.2.1onward are fixed. - After a taosX worker thread exited, resources were not released, and the XNode eventually became unavailable. Affected versions: from
v3.4.0.0until the fix in this release. - User tokens were not synchronized in time among a three-replica mnode. A newly created XNode failed authentication and stayed offline. Affected versions:
v3.3.6.49and later versions in that series, all ofv3.4.0,v3.4.1.0throughv3.4.1.18, andv3.4.2.0andv3.4.2.1.v3.3.7has no user token. - After the IP allowlist was turned on at runtime, the dnode's own FQDN was not on the list, so cluster nodes could not log in. Affected versions:
v3.1.1.46throughv3.4.1.14. Thev3.3.6patches fromv3.3.6.52onward are fixed.
4.2 Query
- After the underlying super-table schema changed, a virtual table reported a column-order mismatch.
- With BI mode on,
LAST(),FIRST(), andLAST_ROW(*)on a virtual super table did not return thetbnamecolumn. LEFT ASOF JOINtogether withDIFFfailed when the intermediate result exceeded 65535 rows.- Using
TIMETRUNCATEin aJOINconverted timezones of the left and right tables inconsistently, so the result was wrong. - Querying
information_schema.ins_tables, the group key such asstable_namewas empty whenCOUNTwas used withPARTITION BYorGROUP BY.
4.3 Stream processing
- An event notification failed to send when
INTOwas not used. - When one trigger produced several windows, a scalar subquery used with a window pseudo column produced no output.
- The
WHEREfilter of a notification was judged incorrectly, so the pushed result did not match expectations. - After a
fill_historythreshold was configured, writing data earlier than the threshold into an empty table still triggered historical backfill.
4.4 Writes and connectors
- A parameter-bound STMT execution of a
SELECTwithINTERVALblocked. - A schemaless write reported
Invalid schema version. - An ODBC write failure returned no error message.
- An illegal NCHAR written through TMQ or a raw block was not checked, and a later column filter on an ordinary table failed.
4.5 Data subscription
- After a child-table tag was changed or a child table was dropped, the subscription filter result was wrong. Historical writes of a dropped child table in the WAL can be parsed normally.
4.6 taosX
- A dual-active task stopped abnormally when it met an empty connection.
- Backup to S3 or restore from S3 failed.
- A failed backup task could not be deleted.
- After a backup task was configured successfully, it did not appear in taosExplorer.
- During data migration, a different tag order between the source database and the target database caused a write error.
- When a Kafka data source configured several transform rules, a wrong sequence number left some fields empty.
- The Dataset Filter configuration of PI Connector was abnormal.
- The CSV downloaded by PI Connector was wrong when points were filtered by element.
- PI Connector treated Int16 as Int32.
4.7 taosExplorer
- An ordinary table could not be displayed.
- User grants still used the old privilege syntax, so a grant statement reported an error.
- The scrollbar on a table page could not be dragged.
5. Security
5.1 Vulnerability fixes
See the security advisories.
- GHSA-vxcq-cqrc-f8j3: a double-free during SQL parsing can crash taosd. Affected versions:
v3.2.3.8throughv3.4.1.14. - GHSA-v8cj-fw82-9jjf: a use-after-free or double-free during subquery processing can crash taosd. Affected versions:
v3.4.1.0throughv3.4.1.14. - GHSA-f8pf-77fh-53wv: a double-free during projection can crash taosd. Affected versions:
v3.0.0.0throughv3.4.1.14. - CVE-2025-58050: the PCRE2 dependency has a security vulnerability and has been upgraded to 10.47. Affected versions:
v3.4.1.17and earlier. The PCRE2 bundled with those versions is 10.45 or lower. - Privilege checks failed during automatic table creation, so a user could create a child table without privilege. Affected versions:
v3.4.1.14and earlier. Thev3.3.6patches fromv3.3.6.52onward are fixed. - A crafted RPC message could cause a denial of service. Message-length checks are stronger. Affected versions:
v3.4.1.14and earlier. - A key update took effect only on the mnode leader. Other nodes still used the old key. Affected versions:
v3.4.1.16and earlier.
5.2 Hardening
- RPC communication adds authentication so the content is not sent in clear text.
- After a password change, connections established with the old password are closed.
- Temporary files spilled by a query are stored encrypted.
- UDF file-path checks are stronger.
- String-terminator checks are stronger.
6. Upgrade notes
6.1 Upgrade path
- Source versions that support a direct upgrade:
v3.3.7and later - Rolling upgrade: supported, from
v3.4.2.0throughv3.4.2.2 - Downgrade or rollback: supported, from
v3.4.2.0throughv3.4.2.2 - Minimum matching client and connector version:
v3.4.2.0
6.2 Behavior changes
- RPC communication adds authentication so the content is not sent in clear text. A client and a server from an earlier version cannot communicate.
- After a password change, connections established with the old password are closed, and later requests return an authentication failure. An application that uses a connection pool must update the configuration after the password change and rebuild the pool.
- When an ordinary user writes a table that does not exist and has no wildcard privilege, the error changes from
Permission denied or the target object does not existtoTable does not exist. An application that branches on the error text or error code needs to be adjusted. - A connection-level timezone is added. The precedence is SQL parameter, connection, then global configuration. When no connection-level setting is made, server-side calculation still falls back to the server global timezone. From this release, reading an ordinary column uses the connection timezone.
- Temporary files spilled by a query are stored encrypted. Queries with a large result have a slight performance impact.
- The output of
USEon macOS changes toDatabase changed., matching Linux. A script that parsestaosshell output needs to follow the new output. ignoreNullInGreatestcontrols whetherGREATEST/LEASTskips NULL. The default is0: if any argument is NULL, the result is NULL, so existing query results do not change. Set it to1to skip NULL.
6.3 Configuration changes
6.3.1 License
| Parameter | Purpose |
|---|---|
clsEnabled
| Whether the cluster license service is enabled. Default 0, off
|
clsUrl
| License service address. Default empty string |
clsLicenseId
| License ID. Default empty string |
clsQuotaSlotId
| Quota slot ID. Default empty string |
clsRefreshInterval
| License refresh interval. Default 3600 seconds
|
6.3.2 CPU affinity
| Parameter | Purpose |
|---|---|
enableCpuAffinity
| Master switch. Default 0. 0: off; 1: bind CPUs for management, read, and write
|
managementCpuCores
| CPU cores used by management threads. Default 1
|
readCpuCores
| CPU cores used by read threads. Default is half of the remaining cores |
otherCpuCores
| CPU cores used by write threads. Default is the other half of the remaining cores |
6.3.3 Federated query
| Parameter | Purpose |
|---|---|
federatedQueryEnable
| Whether federated query is enabled. Default false
|
federatedQueryConnectTimeoutMs
| Timeout, in milliseconds, for connecting to an external data source. Default 5000
|
federatedQueryQueryTimeoutMs
| Timeout, in milliseconds, for running an external query. Default 1000000000. When it equals the maximum, there is no time limit
|
federatedQueryMaxPoolSizePerSource
| Maximum connection pool of one data source. Default 64
|
federatedQueryIdleConnTtlSec
| Idle connection lifetime, in seconds. Default 600
|
federatedQueryProbeTimeoutMs
| Probe timeout, in milliseconds. Default 5000. Not implemented yet
|
6.3.4 Authentication and security
| Parameter | Purpose |
|---|---|
authMech
| Client authentication method: auto, scram, or legacy. Default legacy
|
forceScram
| Force SCRAM and disable the legacy fallback. Off by default |
6.3.5 Overload retry
| Parameter | Purpose |
|---|---|
retryOnOverloadBaseInterval
| Initial client retry interval, in milliseconds, when the server is overloaded. Later retries use exponential backoff. Default 1000
|
retryOnOverloadTimeout
| Maximum total client retry time, in milliseconds, when the server is overloaded. Default 60000
|
6.3.6 Synchronization
| Parameter | Purpose |
|---|---|
snapshotRateLimit
| Upper limit, in MB/s, of snapshot-send bandwidth per dnode. Default 0, which means no limit
|
syncNegotiationWin
| Synchronization negotiation window size. Default 512
|
syncAssignedCheckAppliedGap
| Under two replicas, the apply-gap threshold checked before an assigned leader steps down. Default 20. 0 means no check
|
snapSendPullupInterval
| Snapshot-send pullup interval, in seconds. Default 10
|
6.3.7 Other
| Parameter | Purpose |
|---|---|
firstDayOfWeek
| First day of the week. Encoding 0 is Sunday through 6 is Saturday. When unset, the operating-system setting is read. If that read fails, the value is 4
|
ignoreNullInGreatest
| Whether GREATEST / LEAST skips NULL. Default 0. 0: if any argument is NULL, return NULL; 1: skip NULL
|
txnTimeout
| mnode transaction timeout, in seconds. Default 300
|
walCorruptionBackupDir
| Backup directory used when the WAL is damaged. Default empty string, which means a timestamped subdirectory is created under the WAL path |
6.3.8 Removals and changes
| Previous parameter | Description |
|---|---|
cacheLazyLoadThreshold
| Removed. |
queryBufferSize
| Removed. The replacement is queryBufferPoolSize.
|
encryptPassAlgorithm
| Renamed to encryptAlgorithm. The old name no longer takes effect. Configuration must use the new name
|
6.4 Keyword changes
This section lists 39 keywords. When one of these words is used as a database, table, super table, child table, column, or tag name, quote it with backticks ` regardless of case, for example `BEGIN`.
6.4.1 Window-frame clause
OVER, CURRENT, ROW, ROWS, PRECEDING, FOLLOWING, UNBOUNDED, used by window-frame syntax.
6.4.2 State-window extensions
EXTEND, ZEROTH_STATE, NO_ZEROTH, used by state-window extension and the initial-state definition.
6.4.3 Window mode
SCALAR, AGG, for a scalar window and an aggregate window.
6.4.4 Federated-query DDL
EXTERNAL, SOURCE, SOURCES, REFRESH, OPTIONS, SCHEMA, TYPE, PASSWORD.
6.4.5 Transaction control
BEGIN, COMMIT, ROLLBACK, used by explicit transaction statements.
6.4.6 Manual vnode switch
OPEN, CLOSE, used by OPEN VNODE and CLOSE VNODE.
6.4.7 Virtual-table BASE ON and SERIES
BASE, REMOVE, SERIES, used by virtual-table BASE ON and InfluxDB Series migration.
6.4.8 Security policy
SECURITY_LEVEL, SECURITY_POLICIES.
6.4.9 SHOW extensions
CPU_ALLOCATION, ORPHANS, INHERITS.
6.4.10 Other
FIRST_DAY_OF_WEEK, TEXT (inline text table), PARALLEL (ALTER DATABASE parallelism), API_TOKEN, SMALLDATA_SCAN_SORT (hint), _TROLLUP_TBCOUNT (pseudo column).
6.5 System table changes
Ten tables are added. No table is removed. Five existing tables add columns.
6.5.1 New tables
ins_cpu_allocation: CPU allocation of threads on each dnodeins_ext_sources: registered external data sources (federated query)ins_security_policies: security-policy definitionsins_snap_send_vnodes: snapshot-replication progress by vnodeins_snap_send_filesets: snapshot-replication detail by filesetins_table_fixed_distributed: table data-block distribution statistics, replacingins_table_distributed, which has been unavailable for a long timeins_transactions: transaction informationins_transaction_logs: historical logs of finished transactionsins_transaction_orphans: orphan-transaction detectionins_vstable_inherits: virtual-super-table inheritance
6.5.2 New columns on existing tables
ins_databases: addssec_level, the database security levelins_stables: addssec_level, the super-table security levelins_usersandins_users_full: addsec_levels, the security levels a user can accessins_virtual_child_columns: addscol_type, the type code of a virtual child-table column
6.5.3 Removed tables
None.
6.6 Dependency changes
| Component | Dependency | v3.4.1.13 | v3.4.2.2 |
|---|---|---|---|
| Server | PCRE2 | 10.45 | 10.47 |
| taosX | quinn-proto | 0.11.14 | 0.11.15 |
| Python WebSocket connector | rustls-webpki | 0.103.12 | 0.103.13 |
| JDBC connector | taos-jdbcdriver | 3.8.3 | 3.9.0 |
| JDBC connector | jackson | 2.21.1 | 2.22.0 |
| JDBC connector | netty | 4.2.13.Final | 4.2.15.Final |
6.7 Before you upgrade
Stream processing was redesigned after v3.3.6.0. Before upgrading from v3.3.6 or earlier to this release, the old stream objects must be removed and then rebuilt on the new version. If these steps are skipped, taosd fails to start.
Do the following in order before the upgrade:
- Drop every stream task.
DROP STREAMdrops the task and does not drop result data already written. UseSHOW STREAMSfirst to list the tasks. - Drop every TSMA:
DROP TSMA [db_name.]tsma_name. The TSMA result super table is dropped with the TSMA. - Drop every snode:
DROP SNODE ON DNODE dnode_id. The snode and its replicas must be online, or the drop fails. - Delete the snode directories:
- the snode directory under
dataDir, by default/var/lib/taos/snode - the directory named by
checkpointBackupDir, by default/var/lib/taos/backup/checkpoint/
- the snode directory under
- Drop every stream result table (optional).
After the upgrade, deploy the new snodes, then recreate the streams with the new syntax.
7. Known issues
None.
8. Downloads
The package is available from the TDengine download center. Choose the platform and components for this version.
The package includes an SBOM and SHA256 checksums. They can be used to verify the package and to see which components it contains.