|
| 1 | +## v25.4.1 |
| 2 | + |
| 3 | +Release Date: December 3, 2025 |
| 4 | + |
| 5 | +{% include releases/new-release-downloads-docker-image.md release=include.release %} |
| 6 | + |
| 7 | +<h3 id="v25-4-1-sql-language-changes">SQL language changes</h3> |
| 8 | + |
| 9 | +- Added a `sql.statements.rows_read.count` metric that counts the number of index rows read by SQL statements. [#156459][#156459] |
| 10 | +- Added a `sql.statements.index_rows_written.count` metric that counts the number of primary and secondary index rows modified by SQL statements. [#156459][#156459] |
| 11 | +- Added a `sql.statements.index_bytes_written.count` metric that counts the number of primary and secondary index bytes modified by SQL statements. [#156459][#156459] |
| 12 | +- Added a `sql.statements.bytes_read.count` metric that counts the number of bytes scanned by SQL statements. [#156459][#156459] |
| 13 | +- CockroachDB now supports index accelerating `jsonb_path_exists` filters with JSONpath expressions that end with an AnyKey (`*`). [#156508][#156508] |
| 14 | + |
| 15 | +<h3 id="v25-4-1-bug-fixes">Bug fixes</h3> |
| 16 | + |
| 17 | +- 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 `DESC` direction. The bug was present since v21.1. [#154970][#154970] |
| 18 | +- Fixed a bug in the `cockroach node drain` command 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. [#155633][#155633] |
| 19 | +- 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 multiple `DEFAULT` expressions. This bug was introduced in v24.2, when support for `DEFAULT` expressions was added. [#155927][#155927] |
| 20 | +- Fixed a bug where the job responsible for compacting stats for the SQL activity state could enter an unschedulable state. [#155963][#155963] |
| 21 | +- 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 COMMITTED` isolation. [#156136][#156136] |
| 22 | +- 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. [#156286][#156286] |
| 23 | +- Fixed a bug where changefeeds using CDC queries could sometimes unexpectedly fail after a schema change with a descriptor retrieval error. [#156545][#156545] |
| 24 | +- Fixed a bug where `DROP SCHEMA CASCADE` with complex references from triggers could run into an error. [#156564][#156564] |
| 25 | +- Fixed a bug in the `ltree2text` built-in function where the returned `TEXT` value was incorrectly wrapped in single quotes. This bug had been present since the `ltree2text` function was introduced in v25.4.0. [#156667][#156667] |
| 26 | +- Fixed a bug where the "atomic" `COPY` command (controlled via the `copy_from_atomic_enabled` session setting, `true` by default) could encounter `RETRY_COMMIT_DEADLINE_EXCEEDED` transaction errors if the whole command took 1 minute or more. This bug occurred only when the vectorized engine was used for `COPY`. [#156695][#156695] |
| 27 | +- Fixed a bug that caused incorrect results for queries that filter indexed `LTREE` columns with the `<@` (contained-by) operator. This bug was present since v25.4.0. [#156779][#156779] |
| 28 | +- Fixed a bug that caused incorrect `gossip.callbacks.pending_duration` metric values to be recorded. [#156947][#156947] |
| 29 | +- Fixed a bug in JSONPath index acceleration where queries using `jsonb_path_exists` with 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. This bug was present since v25.4.0. [#156968][#156968] |
| 30 | +- Fixed a bug that could cause internal errors for queries using generic query plans with `NULL` placeholder values. [#156979][#156979] |
| 31 | +- Fixed a bug where CockroachDB could encounter an internal error when evaluating a `COPY FROM` command in a transaction after it was rolled back to a savepoint. The bug was present since before v23.2. [#157037][#157037] |
| 32 | + |
| 33 | +<h3 id="v25-4-1-performance-improvements">Performance improvements</h3> |
| 34 | + |
| 35 | +- 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. [#155460][#155460] |
| 36 | + |
| 37 | +<h3 id="v25-4-1-miscellaneous">Miscellaneous</h3> |
| 38 | + |
| 39 | +- Logical Data Replication (LDR) no longer requires the database name to be specified in the external connection URI when setting up a bidirectional stream. [#155737][#155737] |
| 40 | +- Span config reconciliation jobs no longer fail on the destination after failover from a Physical Cluster Replication (PCR) stream of a system virtual cluster. [#156812][#156812] |
| 41 | + |
| 42 | +[#156812]: https://github.com/cockroachdb/cockroach/pull/156812 |
| 43 | +[#155927]: https://github.com/cockroachdb/cockroach/pull/155927 |
| 44 | +[#157037]: https://github.com/cockroachdb/cockroach/pull/157037 |
| 45 | +[#155460]: https://github.com/cockroachdb/cockroach/pull/155460 |
| 46 | +[#156564]: https://github.com/cockroachdb/cockroach/pull/156564 |
| 47 | +[#156667]: https://github.com/cockroachdb/cockroach/pull/156667 |
| 48 | +[#156779]: https://github.com/cockroachdb/cockroach/pull/156779 |
| 49 | +[#155737]: https://github.com/cockroachdb/cockroach/pull/155737 |
| 50 | +[#155561]: https://github.com/cockroachdb/cockroach/pull/155561 |
| 51 | +[#156459]: https://github.com/cockroachdb/cockroach/pull/156459 |
| 52 | +[#156136]: https://github.com/cockroachdb/cockroach/pull/156136 |
| 53 | +[#155963]: https://github.com/cockroachdb/cockroach/pull/155963 |
| 54 | +[#156695]: https://github.com/cockroachdb/cockroach/pull/156695 |
| 55 | +[#156968]: https://github.com/cockroachdb/cockroach/pull/156968 |
| 56 | +[#156979]: https://github.com/cockroachdb/cockroach/pull/156979 |
| 57 | +[#156508]: https://github.com/cockroachdb/cockroach/pull/156508 |
| 58 | +[#154970]: https://github.com/cockroachdb/cockroach/pull/154970 |
| 59 | +[#155633]: https://github.com/cockroachdb/cockroach/pull/155633 |
| 60 | +[#156286]: https://github.com/cockroachdb/cockroach/pull/156286 |
| 61 | +[#156545]: https://github.com/cockroachdb/cockroach/pull/156545 |
| 62 | +[#156947]: https://github.com/cockroachdb/cockroach/pull/156947 |
0 commit comments