diff --git a/src/current/_data/releases.yml b/src/current/_data/releases.yml index c48aad5a241..87889b14e6a 100644 --- a/src/current/_data/releases.yml +++ b/src/current/_data/releases.yml @@ -10011,3 +10011,31 @@ docker_arm_limited_access: false source: true previous_release: v25.4.0 + + +- release_name: v26.1.0-alpha.2 + major_version: v26.1 + release_date: '2025-12-11' + release_type: Testing + go_version: go1.25.3 + sha: 7991c17b6f2957e381666bf13d6405c8037f46c1 + has_sql_only: true + has_sha256sum: true + mac: + mac_arm: true + mac_arm_experimental: true + mac_arm_limited_access: false + windows: true + linux: + linux_arm: true + linux_arm_experimental: false + linux_arm_limited_access: false + linux_intel_fips: true + linux_arm_fips: false + docker: + docker_image: cockroachdb/cockroach-unstable + docker_arm: true + docker_arm_experimental: false + docker_arm_limited_access: false + source: true + previous_release: v26.1.0-alpha.1 diff --git a/src/current/_data/versions.csv b/src/current/_data/versions.csv index ae340872cdd..37300512475 100644 --- a/src/current/_data/versions.csv +++ b/src/current/_data/versions.csv @@ -20,4 +20,4 @@ v25.1,2025-02-18,2025-08-18,N/A,N/A,N/A,N/A,N/A,N/A,v24.3,release-25.1,2029-02-1 v25.2,2025-05-09,2026-05-12,2026-11-12,N/A,N/A,N/A,N/A,N/A,v25.1,release-25.2,2029-05-09 v25.3,2025-08-04,2026-02-04,N/A,N/A,N/A,N/A,N/A,N/A,v25.2,release-25.3,2029-08-04 v25.4,2025-11-03,2026-11-03,2027-05-03,N/A,N/A,N/A,N/A,N/A,v25.3,release-25.4,2029-11-03 -v26.1,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,v25.4,release-25.4,N/A +v26.1,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,v25.4,release-26.1,N/A diff --git a/src/current/_includes/releases/v26.1/v26.1.0-alpha.2.md b/src/current/_includes/releases/v26.1/v26.1.0-alpha.2.md new file mode 100644 index 00000000000..e71ae3e67b3 --- /dev/null +++ b/src/current/_includes/releases/v26.1/v26.1.0-alpha.2.md @@ -0,0 +1,118 @@ +## v26.1.0-alpha.2 + +Release Date: December 11, 2025 + +{% include releases/new-release-downloads-docker-image.md release=include.release %} + +

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 by `UPDATE` and `DELETE` statements. [#145019][#145019] +- 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] +- 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] +- The `ALTER COLUMN ...` sequence identity + commands are run by the declarative schema changer. [#157030][#157030] +- 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] +- Restarting a sequence with an updated increment has the expected initial value. [#158065][#158065] +- 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] +- 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: + + ~~~ + 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][#158096] +- `ALTER TABLE ... SET SCHEMA` is supported by the declarative schema changer. [#158141][#158141] +- `kv cpu time` is now displayed in `EXPLAIN ANALYZE`, providing insights into the CPU resources used by KV operations during query execution. [#158499][#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][#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][#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][#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][#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][#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][#158219] +- Jobs which are paused for a specific reason now show that reason, and are highlighted in the UI. [#158364][#158364] +- 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] +- 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] + +

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][#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 an `INTO` clause and none of the target variables were referenced. This bug had been present since v23.2. [#156966][#156966] +- Fixed a bug where renaming a column that participated in multiple hash-sharded indexes would fail. [#158045][#158045] +- 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] +- The pgwire server now exits promptly on context cancellation. [#158269][#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][#158370] +- Temporary schema cleanup no longer retries after poisoned transaction errors, reducing log noise. [#158396][#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][#158595] + +

Performance improvements

+ +- 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: + + - All columns in the primary index are constrained to a single exact value + by the `WHERE` clause; + - 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][#145019] +- The optimizer now collapses repeated `%` wildcard characters in `LIKE` patterns. This may improve performance of queries using such patterns. [#158025][#158025] +- More of the CPU usage of LDR jobs is subject to background job admission control limits. [#158361][#158361] + + +[#158424]: https://github.com/cockroachdb/cockroach/pull/158424 +[#156966]: https://github.com/cockroachdb/cockroach/pull/156966 +[#158269]: https://github.com/cockroachdb/cockroach/pull/158269 +[#145019]: https://github.com/cockroachdb/cockroach/pull/145019 +[#158350]: https://github.com/cockroachdb/cockroach/pull/158350 +[#157030]: https://github.com/cockroachdb/cockroach/pull/157030 +[#158396]: https://github.com/cockroachdb/cockroach/pull/158396 +[#158085]: https://github.com/cockroachdb/cockroach/pull/158085 +[#152853]: https://github.com/cockroachdb/cockroach/pull/152853 +[#158219]: https://github.com/cockroachdb/cockroach/pull/158219 +[#158500]: https://github.com/cockroachdb/cockroach/pull/158500 +[#156902]: https://github.com/cockroachdb/cockroach/pull/156902 +[#154489]: https://github.com/cockroachdb/cockroach/pull/154489 +[#158636]: https://github.com/cockroachdb/cockroach/pull/158636 +[#158398]: https://github.com/cockroachdb/cockroach/pull/158398 +[#158595]: https://github.com/cockroachdb/cockroach/pull/158595 +[#155216]: https://github.com/cockroachdb/cockroach/pull/155216 +[#158364]: https://github.com/cockroachdb/cockroach/pull/158364 +[#158045]: https://github.com/cockroachdb/cockroach/pull/158045 +[#158162]: https://github.com/cockroachdb/cockroach/pull/158162 +[#158076]: https://github.com/cockroachdb/cockroach/pull/158076 +[#158025]: https://github.com/cockroachdb/cockroach/pull/158025 +[#156905]: https://github.com/cockroachdb/cockroach/pull/156905 +[#158055]: https://github.com/cockroachdb/cockroach/pull/158055 +[#158141]: https://github.com/cockroachdb/cockroach/pull/158141 +[#158499]: https://github.com/cockroachdb/cockroach/pull/158499 +[#158370]: https://github.com/cockroachdb/cockroach/pull/158370 +[#158361]: https://github.com/cockroachdb/cockroach/pull/158361 +[#158065]: https://github.com/cockroachdb/cockroach/pull/158065 +[#158096]: https://github.com/cockroachdb/cockroach/pull/158096