|
| 1 | +## v26.1.0-alpha.2 |
| 2 | + |
| 3 | +Release Date: December 11, 2025 |
| 4 | + |
| 5 | +{% include releases/new-release-downloads-docker-image.md release=include.release %} |
| 6 | + |
| 7 | +<h3 id="v26-1-0-alpha-2-sql-language-changes">SQL language changes</h3> |
| 8 | + |
| 9 | +- Added a new session variable, `use_swap_mutations`, which controls whether the new update swap and delete swap operators are enabled for use by `UPDATE` and `DELETE` statements. [#145019][#145019] |
| 10 | +- Fixed a bug where the results of `ALTER SEQUENCE`'s increment and `SELECT nextval()` operations were not as expected. The value of a sequence after an `ALTER SEQUENCE` statement has executed on it is now consistent with a sequence created with those values. [#154489][#154489] |
| 11 | +- 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][#156905] |
| 12 | +- The `ALTER COLUMN ...` sequence identity |
| 13 | + commands are run by the declarative schema changer. [#157030][#157030] |
| 14 | +- The `cumulative time spent waiting in admission control` is now displayed in `EXPLAIN ANALYZE` output when it is non-zero. This helps identify delays caused by admission control during query execution. [#158055][#158055] |
| 15 | +- Restarting a sequence with an updated increment has the expected initial value. [#158065][#158065] |
| 16 | +- The `cumulative time spent waiting in admission control` reported in `EXPLAIN ANALYZE` now 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][#158076] |
| 17 | +- 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_hint` with the target statement fingerprint to rewrite. For example, to add an index hint to the statement `SELECT * FROM my_table WHERE col = 3`, use: |
| 18 | + |
| 19 | + ~~~ |
| 20 | + SELECT crdb_internal.inject_hint( |
| 21 | + 'SELECT * FROM my_table WHERE col = _', |
| 22 | + 'SELECT * FROM my_table@my_table_col_idx WHERE col = _' |
| 23 | + ); |
| 24 | + ~~~ |
| 25 | + |
| 26 | + 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][#158096] |
| 27 | +- `ALTER TABLE ... SET SCHEMA` is supported by the declarative schema changer. [#158141][#158141] |
| 28 | +- `kv cpu time` is now displayed in `EXPLAIN ANALYZE`, providing insights into the CPU resources used by KV operations during query execution. [#158499][#158499] |
| 29 | +- 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][#158636] |
| 30 | + |
| 31 | +<h3 id="v26-1-0-alpha-2-operational-changes">Operational changes</h3> |
| 32 | + |
| 33 | +- All queries to system and crdb_internal by |
| 34 | + default will begin failing, notifying users that they must override the |
| 35 | + access gate if they wish to use those namespaces. |
| 36 | + |
| 37 | +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][#158085] |
| 38 | +- 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][#158350] |
| 39 | +- The following metrics are now marked as essential to support end-user troubleshooting of authentication latency issues: |
| 40 | +- `auth.jwt.conn.latency` |
| 41 | +- `auth.cert.conn.latency` |
| 42 | +- `auth.password.conn.latency` |
| 43 | +- `auth.ldap.conn.latency` |
| 44 | +- `auth.gss.conn.latency` |
| 45 | +- `auth.scram.conn.latency` |
| 46 | +- `auth.ldap.conn.latency.internal` [#158424][#158424] |
| 47 | + |
| 48 | +<h3 id="v26-1-0-alpha-2-db-console-changes">DB Console changes</h3> |
| 49 | + |
| 50 | +- The log of messages and events recorded by a job is now shown to non-admin users on the DB Console Jobs page. [#152853][#152853] |
| 51 | +- 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][#158219] |
| 52 | +- Jobs which are paused for a specific reason now show that reason, and are highlighted in the UI. [#158364][#158364] |
| 53 | +- The `kvCPUTimeNanos` is now recorded in `crdb_internal.statement_statistics` and `crdb_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][#158398] |
| 54 | +- The `admissionWaitTime` is now recorded in `crdb_internal.statement_statistics` and `crdb_internal.transaction_statistics`. In the DB Console, an **Admission Wait Time** column is now displayed in the **SQL Activity** > **Statements** and **Transactions** pages. [#158500][#158500] |
| 55 | + |
| 56 | +<h3 id="v26-1-0-alpha-2-bug-fixes">Bug fixes</h3> |
| 57 | + |
| 58 | +- 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][#156902] |
| 59 | +- Fixed a bug where a SQL statement with side effects (e.g., `INSERT`) inside a PL/pgSQL routine could be dropped if it used an `INTO` clause and none of the target variables were referenced. This bug had been present since v23.2. [#156966][#156966] |
| 60 | +- Fixed a bug where renaming a column that participated in multiple hash-sharded indexes would fail. [#158045][#158045] |
| 61 | +- Fixed a bug where `ORDER BY` clauses in user-defined set-returning SQL functions with `OUT` parameters were ignored when the function was called directly in a `SELECT` list (e.g., `SELECT f()`). The ordering is now properly preserved and enforced. [#158162][#158162] |
| 62 | +- The pgwire server now exits promptly on context cancellation. [#158269][#158269] |
| 63 | +- 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][#158370] |
| 64 | +- Temporary schema cleanup no longer retries after poisoned transaction errors, reducing log noise. [#158396][#158396] |
| 65 | +- 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][#158595] |
| 66 | + |
| 67 | +<h3 id="v26-1-0-alpha-2-performance-improvements">Performance improvements</h3> |
| 68 | + |
| 69 | +- Added new `update swap` and `delete swap` operators that allow some `UPDATE` and `DELETE` statements to execute in 1 roundtrip instead of 2 roundtrips. These operators can be used when: |
| 70 | + |
| 71 | + - All columns in the primary index are constrained to a single exact value |
| 72 | + by the `WHERE` clause; |
| 73 | + - Only a single row is modified; |
| 74 | + - There are no foreign-key checks or cascades; |
| 75 | + - There are no uniqueness checks; |
| 76 | + - There are no check constraints; |
| 77 | + - There are no vector indexes modified; |
| 78 | + - There are no passthrough columns to `RETURNING`; |
| 79 | + - There are no triggers; |
| 80 | + - The table only uses a single column family; |
| 81 | + - There are no mutation columns or mutation indexes (i.e., the table is |
| 82 | + not undergoing an `ALTER`); |
| 83 | + - There are no columns using composite encoding (e.g., `DECIMAL`, `FLOAT`, |
| 84 | + `JSON`, etc.). [#145019][#145019] |
| 85 | +- The optimizer now collapses repeated `%` wildcard characters in `LIKE` patterns. This may improve performance of queries using such patterns. [#158025][#158025] |
| 86 | +- More of the CPU usage of LDR jobs is subject to background job admission control limits. [#158361][#158361] |
| 87 | + |
| 88 | + |
| 89 | +[#158424]: https://github.com/cockroachdb/cockroach/pull/158424 |
| 90 | +[#156966]: https://github.com/cockroachdb/cockroach/pull/156966 |
| 91 | +[#158269]: https://github.com/cockroachdb/cockroach/pull/158269 |
| 92 | +[#145019]: https://github.com/cockroachdb/cockroach/pull/145019 |
| 93 | +[#158350]: https://github.com/cockroachdb/cockroach/pull/158350 |
| 94 | +[#157030]: https://github.com/cockroachdb/cockroach/pull/157030 |
| 95 | +[#158396]: https://github.com/cockroachdb/cockroach/pull/158396 |
| 96 | +[#158085]: https://github.com/cockroachdb/cockroach/pull/158085 |
| 97 | +[#152853]: https://github.com/cockroachdb/cockroach/pull/152853 |
| 98 | +[#158219]: https://github.com/cockroachdb/cockroach/pull/158219 |
| 99 | +[#158500]: https://github.com/cockroachdb/cockroach/pull/158500 |
| 100 | +[#156902]: https://github.com/cockroachdb/cockroach/pull/156902 |
| 101 | +[#154489]: https://github.com/cockroachdb/cockroach/pull/154489 |
| 102 | +[#158636]: https://github.com/cockroachdb/cockroach/pull/158636 |
| 103 | +[#158398]: https://github.com/cockroachdb/cockroach/pull/158398 |
| 104 | +[#158595]: https://github.com/cockroachdb/cockroach/pull/158595 |
| 105 | +[#155216]: https://github.com/cockroachdb/cockroach/pull/155216 |
| 106 | +[#158364]: https://github.com/cockroachdb/cockroach/pull/158364 |
| 107 | +[#158045]: https://github.com/cockroachdb/cockroach/pull/158045 |
| 108 | +[#158162]: https://github.com/cockroachdb/cockroach/pull/158162 |
| 109 | +[#158076]: https://github.com/cockroachdb/cockroach/pull/158076 |
| 110 | +[#158025]: https://github.com/cockroachdb/cockroach/pull/158025 |
| 111 | +[#156905]: https://github.com/cockroachdb/cockroach/pull/156905 |
| 112 | +[#158055]: https://github.com/cockroachdb/cockroach/pull/158055 |
| 113 | +[#158141]: https://github.com/cockroachdb/cockroach/pull/158141 |
| 114 | +[#158499]: https://github.com/cockroachdb/cockroach/pull/158499 |
| 115 | +[#158370]: https://github.com/cockroachdb/cockroach/pull/158370 |
| 116 | +[#158361]: https://github.com/cockroachdb/cockroach/pull/158361 |
| 117 | +[#158065]: https://github.com/cockroachdb/cockroach/pull/158065 |
| 118 | +[#158096]: https://github.com/cockroachdb/cockroach/pull/158096 |
0 commit comments