The releases on this page are testing releases, not supported or intended for production environments. The new features and bug fixes noted on this page may not yet be documented across CockroachDB’s documentation.
- CockroachDB self-hosted: All v26.1 testing binaries and Docker images are available for download.
- CockroachDB Advanced: v26.1 testing releases are not yet available.
- CockroachDB Standard and Basic: v26.1 testing releases are not available.
When v26.1 becomes Generally Available (GA), a new v26.1.0 section on this page will describe key features and additional upgrade considerations.
CockroachDB v26.1 is in active development, and the following testing releases are intended for testing and experimentation only, and are not qualified for production environments or eligible for support or uptime SLA commitments. When CockroachDB v26.1 is Generally Available (GA), production releases will also be announced on this page.
- For details about release types, naming, and licensing, refer to the Releases page.
- Be sure to also review the Release Support Policy.
- After downloading a supported CockroachDB binary, learn how to install CockroachDB or upgrade your cluster.
Get future release notes emailed to you:
v26.1.0-alpha.2
Release Date: December 11, 2025
Downloads
CockroachDB v26.1.0-alpha.2 is a testing release. Testing releases are intended for testing and experimentation only, and are not qualified for production environments and not eligible for support or uptime SLA commitments.
Experimental downloads are not qualified for production use and not eligible for support or uptime SLA commitments, whether they are for testing releases or production releases.
| Operating System | Architecture | Full executable | SQL-only executable |
|---|---|---|---|
| Linux | Intel | cockroach-v26.1.0-alpha.2.linux-amd64.tgz (SHA256) |
cockroach-sql-v26.1.0-alpha.2.linux-amd64.tgz (SHA256) |
| ARM | cockroach-v26.1.0-alpha.2.linux-arm64.tgz (SHA256) |
cockroach-sql-v26.1.0-alpha.2.linux-arm64.tgz (SHA256) |
|
| Mac (Experimental) |
Intel | cockroach-v26.1.0-alpha.2.darwin-10.9-amd64.tgz (SHA256) |
cockroach-sql-v26.1.0-alpha.2.darwin-10.9-amd64.tgz (SHA256) |
| ARM | cockroach-v26.1.0-alpha.2.darwin-11.0-arm64.tgz (SHA256) |
cockroach-sql-v26.1.0-alpha.2.darwin-11.0-arm64.tgz (SHA256) |
|
| Windows (Experimental) |
Intel | cockroach-v26.1.0-alpha.2.windows-6.2-amd64.zip (SHA256) |
cockroach-sql-v26.1.0-alpha.2.windows-6.2-amd64.zip (SHA256) |
Docker image
Multi-platform images include support for both Intel and ARM. Multi-platform images do not take up additional space on your Docker host.
Within the multi-platform image, both Intel and ARM images are generally available for production use.
To download the Docker image:
docker pull cockroachdb/cockroach-unstable:v26.1.0-alpha.2
Source tag
To view or download the source code for CockroachDB v26.1.0-alpha.2 on Github, visit v26.1.0-alpha.2 source tag.
Changelog
View a detailed changelog on GitHub: v26.1.0-alpha.1...v26.1.0-alpha.2
SQL language changes
- Added a new session variable,
use_swap_mutations, which controls whether the new update swap and delete swap operators are enabled for use byUPDATEandDELETEstatements. #145019 - Fixed a bug where the results of
ALTER SEQUENCE's increment andSELECT nextval()operations were not as expected. The value of a sequence after anALTER SEQUENCEstatement has executed on it is now consistent with a sequence created with those values. #154489 - SQL statements executed in stored procedures and user-defined functions now record SQL statistics, including latencies and execution metrics. These statistics appear on the SQL Activity and Insights pages of the DB Console. Limitation: SQL statements within a stored procedure or user-defined function are not collected for active statement diagnostics requests. Statement diagnostics remain available for top-level statement executions. #156905
- The
ALTER COLUMN ...sequence identity commands are run by the declarative schema changer. #157030 - The
cumulative time spent waiting in admission controlis now displayed inEXPLAIN ANALYZEoutput when it is non-zero. This helps identify delays caused by admission control during query execution. #158055 - Restarting a sequence with an updated increment has the expected initial value. #158065
- The
cumulative time spent waiting in admission controlreported inEXPLAIN ANALYZEnow includes the time spent in quorum replication flow control. This update enhances the precision of wait time analysis, offering a more accurate depiction of query execution time by considering additional wait durations within the quorum replication processes. #158076 - Added a new "hint injection" ability that allows operators to dynamically inject inline hints into statements, without modifying the text of those statements. Hints can be injected using the built-in function
crdb_internal.inject_hintwith the target statement fingerprint to rewrite. For example, to add an index hint to the statementSELECT * FROM my_table WHERE col = 3, use:
SELECT crdb_internal.inject_hint(
'SELECT * FROM my_table WHERE col = _',
'SELECT * FROM my_table@my_table_col_idx WHERE col = _'
);
Whenever a statement is executed matching statement fingerprint SELECT * FROM my_table WHERE col = _, it will first be rewritten to include the injected index hint. #158096
- ALTER TABLE ... SET SCHEMA is supported by the declarative schema changer. #158141
- kv cpu time is now displayed in EXPLAIN ANALYZE, providing insights into the CPU resources used by KV operations during query execution. #158499
- CockroachDB now negotiates the pgwire protocol version with PostgreSQL 18+ clients that request protocol version 3.2. Previously, connections from these clients would fail with an "unknown protocol version" error. The server now sends a NegotiateProtocolVersion message to indicate it supports version 3.0, allowing the connection to proceed normally. #158636
Operational changes
- All queries to system and crdb_internal by default will begin failing, notifying users that they must override the access gate if they wish to use those namespaces.
The allow_unsafe_internals setting now defaults to false, restricting access to the system and crdb_internal namespaces. Queries to these namespaces will now fail unless access is manually enabled. Usage is also audited. #158085
- Jobs that are paused due to a specific reason, including jobs which pause themselves when encountering errors such as running out of disk space, now record that reason in their displayed status field of SHOW JOBS. #158350
- The following metrics are now marked as essential to support end-user troubleshooting of authentication latency issues:
- auth.jwt.conn.latency
- auth.cert.conn.latency
- auth.password.conn.latency
- auth.ldap.conn.latency
- auth.gss.conn.latency
- auth.scram.conn.latency
- auth.ldap.conn.latency.internal #158424
DB Console changes
- The log of messages and events recorded by a job is now shown to non-admin users on the DB Console Jobs page. #152853
- The DB Console now accurately displays vCPU counts on the Overview page instead of operating system CPU counts. This update uses cgroups to provide a correct vCPU measurement, reflecting reserved compute resources in Kubernetes and other virtualized environments. #158219
- Jobs which are paused for a specific reason now show that reason, and are highlighted in the UI. #158364
- The
kvCPUTimeNanosis now recorded incrdb_internal.statement_statisticsandcrdb_internal.transaction_statistics. In the DB Console, a KV CPU Time column is now displayed in the SQL Activity > Statements and Transactions pages, allowing you to monitor and analyze the CPU time consumed by KV operations during query execution. #158398 - The
admissionWaitTimeis now recorded incrdb_internal.statement_statisticsandcrdb_internal.transaction_statistics. In the DB Console, an Admission Wait Time column is now displayed in the SQL Activity > Statements and Transactions pages. #158500
Bug fixes
- Fixed a bug that could cause an internal error in some cases for PL/pgSQL routines that perform database reads within an exception block. #156902
- Fixed a bug where a SQL statement with side effects (e.g.,
INSERT) inside a PL/pgSQL routine could be dropped if it used anINTOclause and none of the target variables were referenced. This bug had been present since v23.2. #156966 - Fixed a bug where renaming a column that participated in multiple hash-sharded indexes would fail. #158045
- Fixed a bug where
ORDER BYclauses in user-defined set-returning SQL functions withOUTparameters were ignored when the function was called directly in aSELECTlist (e.g.,SELECT f()). The ordering is now properly preserved and enforced. #158162 - The pgwire server now exits promptly on context cancellation. #158269
- Fixed a bounded memory leak that could occur during table statistics collection on tables that contain both very wide (10 KiB or more) and small (under 400B)
BYTES-like values within the same row, along with virtual computed columns. This bug had been present since stats collection on virtual computed columns was introduced in v24.1. #158370 - Temporary schema cleanup no longer retries after poisoned transaction errors, reducing log noise. #158396
- When changing the time interval on the Metrics page, the DB Console previously sent duplicate requests for metrics data. This has been fixed, and the UI now issues a single, efficient request when updating the time interval. #158595
Performance improvements
Added new
update swapanddelete swapoperators that allow someUPDATEandDELETEstatements to execute in 1 roundtrip instead of 2 roundtrips. These operators can be used when:- All columns in the primary index are constrained to a single exact value
by the
WHEREclause; - Only a single row is modified;
- There are no foreign-key checks or cascades;
- There are no uniqueness checks;
- There are no check constraints;
- There are no vector indexes modified;
- There are no passthrough columns to
RETURNING; - There are no triggers;
- The table only uses a single column family;
- There are no mutation columns or mutation indexes (i.e., the table is
not undergoing an
ALTER); - There are no columns using composite encoding (e.g.,
DECIMAL,FLOAT,JSON, etc.). #145019
- All columns in the primary index are constrained to a single exact value
by the
The optimizer now collapses repeated
%wildcard characters inLIKEpatterns. This may improve performance of queries using such patterns. #158025More of the CPU usage of LDR jobs is subject to background job admission control limits. #158361
v26.1.0-alpha.1
Release Date: December 4, 2025
Downloads
CockroachDB v26.1.0-alpha.1 is a testing release. Testing releases are intended for testing and experimentation only, and are not qualified for production environments and not eligible for support or uptime SLA commitments.
Experimental downloads are not qualified for production use and not eligible for support or uptime SLA commitments, whether they are for testing releases or production releases.
| Operating System | Architecture | Full executable | SQL-only executable |
|---|---|---|---|
| Linux | Intel | cockroach-v26.1.0-alpha.1.linux-amd64.tgz (SHA256) |
cockroach-sql-v26.1.0-alpha.1.linux-amd64.tgz (SHA256) |
| ARM | cockroach-v26.1.0-alpha.1.linux-arm64.tgz (SHA256) |
cockroach-sql-v26.1.0-alpha.1.linux-arm64.tgz (SHA256) |
|
| Mac (Experimental) |
Intel | cockroach-v26.1.0-alpha.1.darwin-10.9-amd64.tgz (SHA256) |
cockroach-sql-v26.1.0-alpha.1.darwin-10.9-amd64.tgz (SHA256) |
| ARM | cockroach-v26.1.0-alpha.1.darwin-11.0-arm64.tgz (SHA256) |
cockroach-sql-v26.1.0-alpha.1.darwin-11.0-arm64.tgz (SHA256) |
|
| Windows (Experimental) |
Intel | cockroach-v26.1.0-alpha.1.windows-6.2-amd64.zip (SHA256) |
cockroach-sql-v26.1.0-alpha.1.windows-6.2-amd64.zip (SHA256) |
Docker image
Multi-platform images include support for both Intel and ARM. Multi-platform images do not take up additional space on your Docker host.
Within the multi-platform image, both Intel and ARM images are generally available for production use.
To download the Docker image:
docker pull cockroachdb/cockroach-unstable:v26.1.0-alpha.1
Source tag
To view or download the source code for CockroachDB v26.1.0-alpha.1 on Github, visit v26.1.0-alpha.1 source tag.
General changes
- Docker images now use UBI 10 as the base image. #153990
- The changefeed bulk delivery setting was made optional. #154870
SQL language changes
Index acceleration is now supported for a subset of
jsonb_path_existsfilters used in theWHEREclause.Given
jsonb_path_exists(json_obj, json_path_expression), inverted indexes are supported only when thejson_path_expressionmatches one of the following patterns:The
json_path_expressionmust not be in STRICT mode.Keychain mode:
$. [key|wildcard].[key|wildcard].... In this mode, a prefix span is generated for the inverted expression.Filter with end value mode, using an equality check:
$. [key|wildcard]? (@.[key|wildcard].[key|wildcard]... == [string|number|null|boolean]). In this mode, since the end value is fixed, a single-value span is generated.The following cases are not supported:
$$[*]$.a.b.c == 12,$.a.b.c > 12, or$.a.b.c < 12(operation expressions)$.a.b ? (@.a > 10)(filter with an inequality check)
SHOW CHANGEFEED JOBSnow includes adatabase_namefield that displays the database name for database-level changefeeds. For table-level changefeeds, this field isnull. For database-level changefeeds, thefull_table_namesfield now returns an empty list by default and displays only the total count of watched tables.To view the full list of watched tables (as in previous versions), use the new
WITH WATCHED_TABLESoption:SHOW CHANGEFEED JOBS WITH WATCHED_TABLES;This change improves performance when displaying database-level changefeeds that may track many tables.
Added a clamp for the estimated selectivity of inequality predicates that are unbounded on one or both sides (e.g.,
x > 5). This reduces the risk of a catastrophic underestimate that causes the optimizer to choose a poorly-constrained scan. The feature is disabled by default and can be enabled with the session settingoptimizer_clamp_inequality_selectivity. #153067Added a clamp on row-count estimates for very large tables to ensure the optimizer assumes at least one distinct value will be scanned. This reduces the risk of a catastrophic underestimate. The feature is off by default and controlled by the
optimizer_clamp_low_histogram_selectivitysession setting. #153067The optimizer can now use table statistics that merge the latest full statistic with all newer partial statistics, including those over arbitrary constraints over a single span. #153419
Added the
sql.catalog.allow_leased_descriptors.enabledcluster setting, which is false by default. When set to true, queries that access thepg_catalogorinformation_schemacan use cached leased descriptors to populate the data in those tables, with the tradeoff that some of the data could be stale. #154051Added a default-off cluster setting (
sql.log.scan_row_count_misestimate.enabled) that enables logging a warning on the gateway node when optimizer estimates for scans are inaccurate. The log message includes the table and index being scanned, the estimated and actual row counts, the time since the last table stats collection, and the table's estimated staleness. #154370Fixed a bug where the results of
ALTER SEQUENCE's increment andSELECT nextval()operations were not as expected. The value of a sequence after anALTER SEQUENCEstatement has executed on it is now consistent with a sequence created with those values. #154489Added changefeed setting
range_distribution_strategywith values'default'or'balanced_simple'. This new per-changefeed setting overrides the cluster settingchangefeed.default_range_distribution_strategywhere both exist.Example:
CREATE CHANGEFEED FOR x into 'null://' WITH range_distribution_strategy='balanced_simple';Added the
INSPECTcommand, which runs consistency validation check jobs against tables or databases and specified indexes. #154873Added support for collecting partial statistics when the given
WHEREclause implies the predicate of a partial index with the requested column as the first key column. For example:CREATE TABLE t (a INT, INDEX idx_partial (a) WHERE a > 5); CREATE STATISTICS pstat ON a FROM t WHERE a > 7;The
row_securitysession variable now behaves as it does in PostgreSQL, allowing users to detect when RLS is applied. #155110Added the
bulkio.index_backfill.vector_merge_batch_sizecluster setting to control how many vectors to merge into a vector index per transaction during create operations. The setting defaults to3. #155284Updated the scan misestimate logging, which is controlled by the
sql.log.scan_row_count_misestimate.enabledcluster setting, to use structured logging. The logs now include the scanned table and index, the estimated and actual row counts, the time since the last table statistics collection, and the table's estimated staleness. #155454The
EXPERIMENTAL SCRUBcommand is deprecated. Use theINSPECTcommand for data consistency validation. #155485INSPECTsupports aDETACHEDoption to run the operation without waiting for it. #155774ALTER TABLE ... DROP STOREDstatements are now executed internally by the declarative schema changer. #155778Added a
sql.statements.rows_read.countmetric that counts the number of index rows read by SQL statements. #155820Added the
EXPLAIN (FINGERPRINT)statement, which returns normalized statement fingerprints with constants replaced by underscores. For example,EXPLAIN (FINGERPRINT) SELECT * FROM t WHERE a = 123returnsSELECT * FROM t WHERE a = _. #156152Introduced two new settings to control the use of canary statistics in query planning:
- Cluster setting
sql.stats.canary_fraction(float, range [0, 1], default: 0): Controls what fraction of queries use "canary statistics" (newly collected stats within their canary window) versus "stable statistics" (previously proven stats). For example, a value of0.2means 20% of queries will use canary stats while 80% use stable stats. The selection is atomic per query: if a query is chosen for canary evaluation, it uses canary statistics for all tables it references (where available). A query never uses a mix of canary and stable statistics. - Session variable
canary_stats_mode(enum: {auto, off, on}, default: auto):on: All queries in the session use canary stats for planning.off: All queries in the session use stable stats for planning.auto: The system decides based onsql.stats.canary_fractionfor each query execution. #156307
- Cluster setting
Introduced a new table storage parameter,
sql_stats_canary_window, to enable gradual rollout of newly collected table statistics. It takes a duration string as the value. When set with a positive duration, the new statistics remain in a "canary" state for the specified duration before being promoted to stable. This allows for controlled exposure and intervention opportunities before statistics are fully deployed across all queries. #156307Introduced
SHOW FINGERPRINTS FOR TABLE, which produces an FNV hash for each index in a table. FNV is used for performance reasons and is sensitive to changes in the underlying data, includingNULLs. #156600The
optimizer_clamp_low_histogram_selectivityandoptimizer_clamp_inequality_selectivitysettings are now on by default. This causes the optimizer to assume that at least one distinct value "passes" each filter in a query, and that open-ended inequality filters select at least 1/10000 rows from the table. This reduces the chances of a catastrophic row count underestimate when stats are inaccurate. #156610The
ALTER TABLE ... SET/ADD GENERATED AS IDENTITYstatement is supported by the declarative schema changer in v26.1 and later. #157144EXPLAINandEXPLAIN ANALYZEwill now display the number of hints fromsystem.statement_hintsapplied to the executed statement. #157160The Plan Details in the Statement Activity page of the DB Console now show whether any hints from
system.statement_hintswere applied to the statement execution. #157160
Operational changes
- The metrics
sql.select.started.count,sql.insert.started.count,sql.update.started.count, andsql.delete.started.countare now emitted with labels under the common metric namesql.started.count, using aquery_typelabel to distinguish each operation. #151946 - Added the cluster setting
storage.unhealthy_write_duration(defaults to 20s), which is used to indicate to the allocator that a store's disk is unhealthy. The cluster settingkv.allocator.disk_unhealthy_io_overload_scorecontrols the overload score assigned to a store with an unhealthy disk, where a higher score results in preventing lease or replica transfers to the store, or shedding of leases by the store. The default value of that setting is 0, so the allocator behavior is unaffected. #153364 - Added two new changefeed metrics for tracking the max skew between a changefeed's slowest and fastest span/table. The metrics are gauge metrics with the names
changefeed.progress_skew.{span}andchangefeed.progress_skew.{table}. #153975 - Added the cluster setting
storage.snapshot.recreate_iter_duration(default 20s), which controls how frequently a long-lived storage engine iterator, backed by an engine snapshot, will be closed and recreated. Currently, it is only used for iterators used in rangefeed catchup scans. #154412 - Added cluster setting
sql.schema.approx_max_object_count(default: 20,000) to prevent creation of new schema objects when the limit is exceeded. The check uses cached table statistics for performance and is approximate - it may not be immediately accurate until table statistics are updated by the background statistics refreshing job. Clusters that have been running stably with a larger object count should raise the limit or disable the limit by setting the value to 0. In future releases, the default value for this setting will be raised as more CockroachDB features support larger object counts. #154495 - Cleaned up redundant and misleading metrics. #154545
- Fixed the
changefeed.parallel_io_pending_rowsmetric's y-axis label to match the metric's definition. #154552 - Added a metric called
changefeed.parallel_io_workersto track the number of workers in ParallelIO. #154552 - Events related to changefeed operations are now routed to the
CHANGEFEEDchannel, while sampled queries and transactions, along with certain SQL performance events, are logged toSQL_EXEC. To continue using the previous logging channels, setlog.channel_compatibility_mode.enabledtotrue. #154670 - Successfully completed automatic SQL stats collecton jobs are now automatically purged rather than being retained for the full default job retention period. #155848
- The cluster setting
storage.snapshot.recreate_iter_duration(default20s) controls how frequently a long-lived engine iterator, backed by an engine snapshot, will be closed and recreated. Currently, it is only used for iterators used in rangefeed catchup scans. #156303 - Add support for
CREATE LOGICAL REPLICATION STREAMin situations where the source table has a column with a sequence expression. #156975
Command-line changes
cockroach workload <name> runcommands now offer a--with-changefeedflag to additionally run a changefeed that watches for writes to the workload's tables. #155516
DB Console changes
- The SQL dashboard has been enhanced with additional insights.
- The Transaction Restarts dashboard now displays
txn.restarts.txnpushandtxn.restarts.unknownmetrics. - A new Failed SQL Connections graph shows failed SQL connection attempts. A new SQL Queries Within Routines Per Second dashboard reports onSELECT,UPDATE,INSERT, andDELETEoperations executed within routines. - A new Table Statistics Collections dashboard provides information on auto, auto partial, and manual statistics collections.
- The Transaction Restarts dashboard now displays
- The background (elastic) store graphs for exhausted duration, and the wait duration histogram, have been separated from the foreground (regular) graphs. #156801
Bug fixes
- Previously, CockroachDB would omit execution statistics in
EXPLAIN ANALYZEoutput for mutation nodes when aRETURNINGclause was used. The bug was present since before v21.1 and is now fixed. #145934 - Fixed a bug where CockroachDB could encounter a
vector encoder doesn't support ForcePut yeterror when executingCOPYcommands concurrently with certain schema changes. The bug had existed since before v23.2. #148549 - Fixed a bug causing a
READ COMMITTEDorSNAPSHOTisolation transaction to be committed despite returning a non-ambiguous error. #152010 - Fixed a bug in type-checking placeholders with
UNKNOWNtypes. It could cause incorrect results in some cases. #152882 - Fixed a bug where
EXPORT CSVandEXPORT PARQUETcould cause a node crash when their result rows were used as input to a mutation, such as anINSERT, within the same SQL statement. This bug had been present since before v22.1. #153951 - Idle latency on the Transaction Details page in the DB Console is now reported more accurately. Previously, transactions that used prepared statements (e.g., with placeholders) overcounted idle time, while those that included observer statements (common in the SQL CLI) undercounted it. #154028
- Fixed a bug that caused panics when executing
COPYinto a table with hidden columns and expression indexes. The panic only occurred when the session settingexpect_and_ignore_not_visible_columns_in_copywas enabled. This bug was introduced withexpect_and_ignore_not_visible_columns_in_copyin v22.1.0. #154162 - Vector index backfill jobs now correctly report progress in the
SHOW JOBSoutput. #154209 - Fixed a bug where
RESTOREof a database with aSECONDARY REGIONdid not apply the lease preferences for that region. #154522 - Fixed a bug where a changefeed could perform many unnecessary job progress saves during an initial scan. #154598
- Fixed a bug where CockroachDB would not log events for
TxnRowsReadandTxnRowsWrittenguardrails for internal queries into theSQL_INTERNAL_PERFlogging channel. The bug was present since v21.2. #154670 - Fixed a bug that caused internal errors for
INSERT .. ON CONFLICT .. DO UPDATEstatements when the target table had both a computed column and aBEFOREtrigger. This bug was present since triggers were introduced in v24.3.0. #154789 - Fixed a bug where a changefeed targeting only a subset of a table's column families could become stuck. #154802
- Fixed a bug where CockroachDB would hit an internal error when performing an inverted join using an inverted index in which the first prefix column had
DESCdirection. The bug was present since v21.1. #154914 - Fixed a bug where the
kvflowcontrol.send_queue.scheduled.force_flushmetric was missing a decrement, resulting in a value of greater than0even when there was no ongoing force flush. #154960 - Fixed a bug that would cause
WITH READ VIRTUAL CLUSTERto be ignored if any other options were passed when runningCREATE VIRTUAL CLUSTER FROM REPLICATION. #154963 - Internal assertions that verify
NumRange = 0in the first histogram bucket, used to catch malformed statistics, now run only in test builds to avoid crashing production queries. #155035 - Fixed a bug in which range counts in table statistics histograms were not handled correctly after a user-defined
ENUMtype was modified. #155035 - Fixed a bug in the
cockroach node draincommand where draining a node using virtual clusters (such as clusters running Physical Cluster Replication (PCR)) could return before the drain was complete, possibly resulting in shutting down the node while it still had active SQL clients and range leases. #155063 - Fixed a bug where a race condition in range splits could result in a regressed Raft state on a post-split range. This condition was extremely rare, and only observed during internal testing. #155143
- Corrected a potential deadlock during vector index creation. #155192
- Fixed a bug that would result in a node crash if a
PCR or LDR URI used
sslinline=truewithsslmode=disable. #155232 - Fixed a bug where CockroachDB could corrupt the first bucket of table statistic histograms in certain cases, causing underestimates for range counts near the lower end of the domain. #155242
- Added proper dependency handling when adding a constraint with
NOT VALIDthat references a user-defined function (UDF). #155404 - Fixed a bug that prevented the optimizer from recognizing correlated filters when one of the filtered columns had a single distinct value across all rows. This could lead to suboptimal query plans in some cases. #155407
- The username remapping functionality specified by the
server.identity_map.configurationcluster setting now matches identities and usernames with a case-insensitive comparison. #155531 - Previously, the forecasted statistics shown in
SHOW STATISTICS ... WITH FORECASTcould be inconsistent with those in the stats cache, depending on whetherWITH MERGEwas specified. Forecasted statistics are now displayed consistently, regardless of theWITH MERGEclause. #155615 - Fixed a bug where CockroachDB could crash when executing
EXPLAIN ANALYZEstatements using the pausable portal model. This would occur when the query was executed via the extended PGWire protocol (Parse,Bind,Execute) with themultiple_active_portals_enabledsession variable set. The bug was present since v23.2. #155655 INSPECTcan now be run on tables with indexes that storeREFCURSOR-typed columns. #155772- Fixes a bug where
DROP SCHEMA CASCADEcould run into an error with complex references from triggers. #155777 - Fixed a bug where the job responsible for compacting stats for the SQL activity state could enter an unschedulable state. Fixes: #155165 #155809
- Fixed a bug where reads and writes performed by routines (user-defined functions and stored procedures) and apply joins were not included in
bytes read,rows read, androws writtenstatement execution statistics. This bug had been present since before v23.2. #155824 INSPECTnow correctly checks index consistency at the historical timestamp when usingAS OF SYSTEM TIME, even for spans with no current data. #155837- The
INSPECTstatement now detects dangling secondary index entries even when the primary index spans contain no data. #155844 - Fixed an internal error that could occur when replacing a user-defined function or stored procedure using
CREATE OR REPLACE, if the existing signature included multipleDEFAULTexpressions. This bug was introduced in v24.2, when support forDEFAULTexpressions was added. #155867 INSPECTno longer fails when checking index consistency on indexes with virtual key columns. Such indexes will now be skipped. #155956- Fixed a bug where DML statements on regional by row tables with unique indexes that do not reference the region could sometimes fail under
READ COMMITTEDisolation. #156105 - Fixed a bug where Zone Config Extensions incorrectly prevented users from removing non-voting read replicas from multi-region databases. Users can now set
num_replicasequal tonum_votersto remove read replicas while maintaining the required number of voting replicas for their database's survival goal. This allows reducing storage costs without compromising availability guarantees. #156228 - Fixed a bug in the
ltree2textbuilt-in function where the returnedTEXTvalue was incorrectly wrapped in single quotes. This bug had been present since theltree2textfunction was introduced in v25.4.0. #156485 - Fixed a bug that caused incorrect results for queries that filter indexed
LTREEcolumns with the<@(contained-by) operator. This bug was present since v25.4.0. #156573 - Fixed a bug where the "atomic"
COPYcommand (controlled via thecopy_from_atomic_enabledsession setting,trueby default) could encounterRETRY_COMMIT_DEADLINE_EXCEEDEDtransaction errors if the whole command took 1 minute or more. This bug occurred only when the vectorized engine was used forCOPY. #156584 - Fixed a bug that caused transactions to fail with the error message:
failed indeterminate commit recovery: programming error: timestamp change by implicitly committed transaction. #156722 - Fixed a bug in JSONPath index acceleration where queries using
jsonb_path_existswith a root key (e.g.,$.b) incorrectly returned no results when the queried JSON was an array. This fix enables unwrapping a single array layer at the root, allowing the path to be evaluated against each element. Only v25.4 releases were affected. #156828 - Fixed a bug that prevents large
TRUNCATEoperations from completing due tocommand is too largeerrors. #156867 - Fixed a bug that caused incorrect
gossip.callbacks.pending_durationmetric values to be recorded. #156939 - Fixed a bug where transactions running concurrently with a
GRANTorREVOKEon virtual tables or via external connections could observe modifications incorrectly. #156949 - Fixed a bug where CockroachDB could encounter an internal error when evaluating a
COPY FROMcommand in a transaction after it was rolled back to a savepoint. The bug was present since before v23.2. #156959 - Fixed a bug that could cause internal errors for queries using generic query plans with
NULLplaceholder values. #156962 - Fixed a bug that could cause a schema change to be stuck in the reverting state if the
infer_rbr_region_col_using_constraintstorage parameter was being set at the same time as adding a constraint that had a foreign key violation. #157834
Performance improvements
- The cost of generic query plans is now calculated based on worst-case selectivities for placeholder equalities (e.g.,
x = $1). This reduces the chance of suboptimal generic query plans being chosen whenplan_cache_mode=auto. #151409 - TTL jobs now checkpoint their progress, allowing them to resume without reprocessing already completed spans after a restart. #152618
- Queries with filters in the form
a LIKE b ESCAPE '\'are now index-accelerated in certain cases where they were not before. #155064 - The optimizer will no longer choose a generic query plan with unbounded cardinality over a custom query plan with bounded cardinality, regardless of
optimizer_prefer_bounded_cardinality, better optimizing such queries. #155163 - Optimized validation queries during
ALTER PRIMARY KEYto avoid counting the primary key multiple times. #156889 - The optimizer now splits disjunctions on the same column into unions when there are multiple partial indexes with different predicates referencing that column. #157083
Build changes
- Upgraded to Go version 1.25.3 #156000
Miscellaneous
- Added initial and catchup scan metrics to Physical Cluster Replication (PCR) under
physical_replication.scanning_rangesandphysical_replication.catchup_ranges. #153893 - Added a retry policy for Azure Blob Storage with a default of 60 seconds to mitigate occasional stuck operations. The retry policy is configurable with the
cloudstorage.azure.try.timeoutsetting. #154149 - Logical Data Replication (LDR) now updates the
logical_replication.scanning_rangesandlogical_replication.catchup_rangesmetrics during fast initial scan. #155274 - Added the
jobs.registry.max_adoptions_per_loopcluster setting to configure the maximum number of jobs a node can adopt per adoption loop. #155385 - Fixed a bug that prevented admin users from having full access to external connections created by other users. #155657
- LDR no longer requires the database name to be specified in the external connection URI when setting up a bidirectional stream. #155729
- Span config reconciliation jobs no longer fail on the destination after failover from a PCR stream of a system virtual cluster. #156003
- Added support of partial indexes to Logical Data Replication, tolerant of mismatched column IDs in the source and destination tables. #156935
- Display whether build is FIPS-enabled in
cockroach version#157223
Please select a star rating above.
Tell us about your experience
Please attach a screenshot of the area where you encountered the problem.
Thank you for your feedback!
Your input helps us improve our documentation.