From 4eb2b7b91a08e2d63945033f650b7d2560ac0bcb Mon Sep 17 00:00:00 2001 From: Automated Release Bot Date: Fri, 13 Mar 2026 00:51:18 +0000 Subject: [PATCH 01/16] Update release notes for v26.2-v26.2.0-alpha.2 --- src/current/_data/versions.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/current/_data/versions.csv b/src/current/_data/versions.csv index fe8c0f13973..a8d4c57f513 100644 --- a/src/current/_data/versions.csv +++ b/src/current/_data/versions.csv @@ -21,4 +21,4 @@ v25.2,2025-05-09,2026-05-12,2026-11-12,25.2.9,25.2.10,2025-12-17,2026-12-17,2027 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,2026-02-02,2026-08-02,N/A,N/A,N/A,N/A,N/A,N/A,v25.4,release-26.1,2030-02-02 -v26.2,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,v26.1,release-26.1,N/A +v26.2,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,v26.1,master,N/A From fd3c3cda9d6cb26b510e35b874278d5271c56bf0 Mon Sep 17 00:00:00 2001 From: Automated Release Bot Date: Fri, 13 Mar 2026 00:51:19 +0000 Subject: [PATCH 02/16] Update release notes for v26.2-v26.2.0-alpha.2 --- src/current/_data/releases.yml | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/current/_data/releases.yml b/src/current/_data/releases.yml index 7cd3f2dabc0..6ecca436333 100644 --- a/src/current/_data/releases.yml +++ b/src/current/_data/releases.yml @@ -10893,4 +10893,31 @@ docker_arm: true docker_arm_experimental: false docker_arm_limited_access: false - source: true \ No newline at end of file + source: true + +- release_name: v26.2.0-alpha.2 + major_version: v26.2 + release_date: '2026-03-18' + release_type: Testing + go_version: go1.25.5 + sha: 0f6bde6aa163eaa56dc1dc42c671940d04dbced6 + 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.2.0-alpha.1 From 41f01af4d7a4ae2ad5ed16f6734d2a2cc12031b0 Mon Sep 17 00:00:00 2001 From: Automated Release Bot Date: Fri, 13 Mar 2026 00:51:20 +0000 Subject: [PATCH 03/16] Update release notes for v26.2-v26.2.0-alpha.2 --- .../releases/v26.2/v26.2.0-alpha.2.md | 261 ++++++++++++++++++ 1 file changed, 261 insertions(+) create mode 100644 src/current/_includes/releases/v26.2/v26.2.0-alpha.2.md diff --git a/src/current/_includes/releases/v26.2/v26.2.0-alpha.2.md b/src/current/_includes/releases/v26.2/v26.2.0-alpha.2.md new file mode 100644 index 00000000000..95cd3de3695 --- /dev/null +++ b/src/current/_includes/releases/v26.2/v26.2.0-alpha.2.md @@ -0,0 +1,261 @@ +## v26.2.0-alpha.2 + +Release Date: March 18, 2026 + +{% include releases/new-release-downloads-docker-image.md release=include.release %} + +

Backward-incompatible changes

+ +- Lowered the default value of the `sql.guardrails.max_row_size_log` cluster setting from `64 MiB` to `16 MiB`, and the default value of `sql.guardrails.max_row_size_err` from `512 MiB` to `80 MiB`. These settings control the maximum size of a row (or column family) that SQL can write before logging a warning or returning an error, respectively. The previous defaults were high enough that large rows would hit other limits first (such as the Raft command size limit or the backup SST size limit), producing confusing errors. The new defaults align with existing system limits to provide clearer diagnostics. If your workload legitimately writes rows larger than these new defaults, you can restore the previous behavior by increasing these settings. [#164468][#164468] +- When selecting from a view, + the view owner's privileges on the underlying tables are now checked. + Previously, no privilege checks were performed on the underlying tables, + so a view would continue to work even after the owner lost access to the + underlying tables. This also affects row-level security (RLS): the view + owner's RLS policies are now enforced instead of the invoker's. If this + causes issues, the previous behavior can be restored by setting the + cluster setting `sql.auth.skip_underlying_view_privilege_checks.enabled` + to true. [#164664][#164664] + +

Security updates

+ +- When the `security.provisioning.ldap.enabled` + cluster setting is enabled, LDAP-authenticated DB Console logins now update the + `estimated_last_login_time` column in the `system.users` table. [#163400][#163400] +- When the + `security.provisioning.oidc.enabled` cluster setting is enabled, + OIDC-authenticated DB Console logins now populate the + `estimated_last_login_time` column in `system.users`, allowing + administrators to track when OIDC users last accessed the DB Console. [#164129][#164129] + +

SQL language changes

+ +- Added the `ST_AsMVT` aggregate function to generate Mapbox Vector Tile (MVT) binary format from geospatial data, providing PostgreSQL/PostGIS compatibility for web mapping applications. [#150663][#150663] +- ALTER TABLE ... SET LOCALITY is now fully + executed using the declarative schema changer, improving reliability + and consistency with other schema change operations. [#161763][#161763] +- Added an index storage parameter + `skip_unique_checks` that can be used to disable unique constraint + checks for indexes with implicit partition columns, including indexes + in regional-by-row tables. This should only be used if the application + can guarantee uniqueness, for example, by using external UUID values + or relying on a unique_rowid() default value. Incorrectly applying this + setting when uniqueness is not guaranteed by the application could + result in logically duplicate keys in different partitions of a unique + index. [#163378][#163378] +- Introduced the `information_schema.crdb_delete_statement_hints` built-in function, which accepts 2 kinds of payload: `row_id` (int): the primary key of `system.statement_hints`; `fingerprint` (string). The function returns the number of rows deleted. [#163891][#163891] +- Added support for importing Parquet files + using the IMPORT statement. Parquet files can be imported from cloud + storage URLs (s3://, gs://, azure://) or HTTP servers that support + range requests (Accept-Ranges: bytes). This feature supports + column-level compression formats (Snappy, GZIP, ZSTD, Brotli, etc.) as + specified in the Parquet file format, but does not support additional + file-level compression (e.g., .parquet.gz files). Nested Parquet types + (lists, maps, structs) are not currently supported; only flat schemas + with primitive types are supported at this time. + + Epic: CRDB-23802 [#163991][#163991] +- We now include `information_schema.crdb_rewrite_inline_hints` + statements in the `schema.sql` file of a statement diagnostics bundle + for re-creating all the statement hints bound to the statement. The hints + recreation statement have been sorted in ascending order of the original + hints' creation time. [#164164][#164164] +- Views now support the PostgreSQL-compatible `security_invoker` option. When set via `CREATE VIEW ... WITH (security_invoker)` or `ALTER VIEW SET (security_invoker = true)`, privilege checks on the underlying tables are performed as the querying user rather than the view owner. The `security_invoker` option can be reset with `ALTER VIEW ... RESET (security_invoker)`. [#164184][#164184] +- CockroachDB now supports COMMIT AND CHAIN + and ROLLBACK AND CHAIN (as well as END AND CHAIN and ABORT AND CHAIN). + These finish the current transaction and immediately start a new + explicit transaction with the same isolation level, priority, and + read/write mode as the previous transaction. AND NO CHAIN is also + accepted for Postgres compatibility but behaves the same as a plain + COMMIT or ROLLBACK. + + Co-Authored-By: roachdev-claude [#164403][#164403] +- RESTORE TABLE/DATABASE now supports the WITH GRANTS + option, which restores grants on restore targets for users in the + restoring cluster. Note that using this option with `new_db_name` will + cause the new database to inherit the privileges in the backed up + database. [#164444][#164444] +- During an `INSPECT` run, a new check validates unique column values in `REGIONAL BY ROW` tables. [#164449][#164449] +- Added to_date(text, text) and + to_timestamp(text, text) SQL functions that parse dates and timestamps + from formatted strings using PostgreSQL-compatible format patterns. For + example, to_date('2023-03-15', 'YYYY-MM-DD') returns a date, and + to_timestamp('2023-03-15 14:30:45', 'YYYY-MM-DD HH24:MI:SS') returns a + timestamptz. + + Co-Authored-By: roachdev-claude [#164672][#164672] +- Added PostgreSQL-compatible numeric + formatting functions to_char(int, text), to_char(float, text), + to_char(numeric, text), and to_number(text, text). These functions + format numbers as strings and parse formatted strings back to numbers + using the PostgreSQL formatting syntax. + + Co-Authored-By: roachdev-claude [#164672][#164672] +- Added support for a new statement hint used to + change session variable values for the duration of a single statement + without application changes. The new hint type can be created using the + information_schema.crdb_set_session_variable_hint builtin. The override applies + only when executing a statement matching the given fingerprint and does not + persist on the session or surrounding transaction. [#164909][#164909] +- Active Session History tables are now + accessible via information_schema.crdb_node_active_session_history + and information_schema.crdb_cluster_active_session_history, in + addition to the existing crdb_internal tables. This improves + discoverability when browsing information_schema for available + metadata. + + Co-Authored-By: roachdev-claude [#164969][#164969] +- The `enable_super_regions` session variable and the `sql.defaults.super_regions.enabled` cluster setting are no longer required to use super regions. Super region DDL operations (`ADD`, `DROP`, and `ALTER SUPER REGION`) now work without any experimental flag. The session variable and cluster setting are deprecated, and existing scripts that set them will continue to work without error. [#165227][#165227] + +

Operational changes

+ +- The bulkio.index_backfill.elastic_control.enabled + cluster setting is now enabled by default, allowing index backfill operations + to integrate with elastic CPU control and automatically throttle based on + available resources. + + Epic: CRDB-48845. [#163866][#163866] +- Promoted 9 admission control metrics + to Essential status, making them more discoverable in monitoring + dashboards and troubleshooting workflows. These metrics track + admission control wait times, resource exhaustion (slots, I/O + tokens, CPU tokens), and replication flow control, providing + critical visibility into cluster health and performance throttling. [#164827][#164827] +- Added periodic ASH workload summary logging to the OPS channel. Two new cluster settings, `obs.ash.log_interval` (default 10m) and `obs.ash.log_top_n` (default 10), control how often and how many entries are emitted. Each summary reports the most frequently sampled workloads grouped by event type, event name, and workload ID, providing durable visibility into workload patterns that previously existed only in memory. [#165093][#165093] +- users cannot run AOST queries on the reader tenant, + unless they set bypass_pcr_reader_catalog_aost session variable. This session + variable should not be used by default in the reader workload. It should only + be used during investigation or for changing reader tenant specific cluster + settings. + + Co-Authored-By: roachdev-claude [#165382][#165382] + +

Bug fixes

+ +- Fixed an issue where ORDER BY expressions + containing subqueries with non-default NULLS ordering (e.g., NULLS LAST + for ASC, NULLS FIRST for DESC) could cause an error during query + planning. + + Co-Authored-By: Claude [#163230][#163230] +- Fixed a bug that caused + `ALTER INDEX ... PARTITION BY` statements to fail on a nonexistent index + even if `IF EXISTS` was used. [#163378][#163378] +- Fixed a bug where backups taken after a 25.4 + mixed version cluster downgrade could result in inconsistent backup + indexes. [#164301][#164301] +- A bug where adding a target without + an initial scan, dropping that same target, and then adding + it again with an initial scan would result in the target being + added without an initial scan has now been fixed. + + Release note (bug fix): A bug where adding a target without + an initial scan could cause events to be sent again for all + targets as of the original statement time has been fixed. + + Release note (ops change): Previously, altering a changefeed to add a table + with an initial scan during a schema change backfill or while the changefeed + had lagging ranges would sometimes be rejected. This is no longer the case. + + Release note (backward-incompatible change): Using `ALTER CHANGEFEED + ADD ...` for a table that is already watched will now return an error. [#164433][#164433] +- Altering a non-scan-only changefeed to add a + target with `initial_scan='only'` now returns an error instead of + not doing a scan and adding the target to the watched targets list. [#164433][#164433] +- Fixed a bug where creating a table with a user-defined type column failed +when the user had USAGE privilege on the base type but not on its implicit +array type. The array type now inherits privileges from the base type, +matching PostgreSQL behavior. [#164471][#164471] +- ALTER TABLE ... ALTER PRIMARY KEY USING COLUMNS + (col) USING HASH is now correctly treated as a no-op when the table + already has a matching hash-sharded primary key, instead of attempting + an unnecessary schema change. + + Co-Authored-By: roachdev-claude [#164557][#164557] +- Fixed a bug in appBatchStats.merge where + the numEmptyEntries field was not being properly accumulated when + merging statistics. This could result in incorrect statistics + tracking for empty raft log entries. + + Co-Authored-By: roachdev-claude [#164671][#164671] +- Fixed a bug where ALTER TABLE ... ALTER COLUMN + ... SET DATA TYPE from an unbounded string or bit type to a bounded type + with a length >= 64 (e.g., STRING to STRING(100)) would skip validating + existing data against the new length constraint. This could leave rows + in the table that violate the column's type, with values longer than the + specified limit. + + Co-Authored-By: roachdev-claude [#164739][#164739] +- Fixed a bug where `RESTORE` with `skip_missing_foreign_keys` could fail with an internal error if the restored table had an in-progress schema change that added a foreign key constraint whose referenced table was not included in the restore. [#164757][#164757] +- In a recent change that was included in 25.4+, + we inadvertently made it so that setting `min_checkpoint_frequency` to + 0 would cause the changefeed's highwater to not advance/not send + resolved timestamps. This bug has been fixed. Note however that setting + `min_checkpoint_frequency` to lower than `500ms` is not recommended as + it may cause degraded changefeed performance. [#164765][#164765] +- Lowered the default value of the `changefeed.max_retry_backoff` cluster setting from `10m` to `30s` to reduce changefeed lag during rolling restarts. [#164874][#164874] +- Previously, CockroachDB might not have promptly + responded to the statement timeout when performing a hash join with ON + filter that is mostly `false`. This is now fixed. [#164879][#164879] +- Fixed a bug where IMPORT error messages + could include unredacted cloud storage credentials from the source + URI. Credentials are now stripped from URIs before they appear in + error messages. + + Co-Authored-By: roachdev-claude [#164881][#164881] +- Changefeed retry backoff now resets when + the changefeed's resolved timestamp (highwater mark) advances between + retries, in addition to the existing time-based reset + (changefeed.retry_backoff_reset). This prevents transient rolling + restarts from causing changefeeds to fall behind because of + excessive backoff. [#164933][#164933] +- Fixed a rare race condition where `SHOW CREATE TABLE` could fail with a `"relation does not exist"` error if a table referenced by a foreign key was being concurrently dropped. [#164942][#164942] +- Fixes a bug that had previously allowed the + primary and secondary to be in separate super regions. [#164943][#164943] +- Fixed a bug that could cause row sampling for table statistics to crash a node due to a data race when processing a collated string column with values larger than 400 bytes. This bug has existed since before v23.1. [#165260][#165260] +- The information_schema.crdb_node_active_session_history + and information_schema.crdb_cluster_active_session_history views now include + the app_name column, matching the underlying crdb_internal tables. + + Co-Authored-By: roachdev-claude [#165367][#165367] + + +[#165260]: https://github.com/cockroachdb/cockroach/pull/165260 +[#165367]: https://github.com/cockroachdb/cockroach/pull/165367 +[#163400]: https://github.com/cockroachdb/cockroach/pull/163400 +[#164942]: https://github.com/cockroachdb/cockroach/pull/164942 +[#163866]: https://github.com/cockroachdb/cockroach/pull/163866 +[#164943]: https://github.com/cockroachdb/cockroach/pull/164943 +[#161763]: https://github.com/cockroachdb/cockroach/pull/161763 +[#164184]: https://github.com/cockroachdb/cockroach/pull/164184 +[#164672]: https://github.com/cockroachdb/cockroach/pull/164672 +[#165227]: https://github.com/cockroachdb/cockroach/pull/165227 +[#165382]: https://github.com/cockroachdb/cockroach/pull/165382 +[#164301]: https://github.com/cockroachdb/cockroach/pull/164301 +[#164471]: https://github.com/cockroachdb/cockroach/pull/164471 +[#164468]: https://github.com/cockroachdb/cockroach/pull/164468 +[#163378]: https://github.com/cockroachdb/cockroach/pull/163378 +[#164969]: https://github.com/cockroachdb/cockroach/pull/164969 +[#164827]: https://github.com/cockroachdb/cockroach/pull/164827 +[#164129]: https://github.com/cockroachdb/cockroach/pull/164129 +[#164909]: https://github.com/cockroachdb/cockroach/pull/164909 +[#164671]: https://github.com/cockroachdb/cockroach/pull/164671 +[#164765]: https://github.com/cockroachdb/cockroach/pull/164765 +[#164879]: https://github.com/cockroachdb/cockroach/pull/164879 +[#163891]: https://github.com/cockroachdb/cockroach/pull/163891 +[#165093]: https://github.com/cockroachdb/cockroach/pull/165093 +[#164403]: https://github.com/cockroachdb/cockroach/pull/164403 +[#164433]: https://github.com/cockroachdb/cockroach/pull/164433 +[#164739]: https://github.com/cockroachdb/cockroach/pull/164739 +[#164664]: https://github.com/cockroachdb/cockroach/pull/164664 +[#164164]: https://github.com/cockroachdb/cockroach/pull/164164 +[#164557]: https://github.com/cockroachdb/cockroach/pull/164557 +[#164881]: https://github.com/cockroachdb/cockroach/pull/164881 +[#164933]: https://github.com/cockroachdb/cockroach/pull/164933 +[#163991]: https://github.com/cockroachdb/cockroach/pull/163991 +[#164449]: https://github.com/cockroachdb/cockroach/pull/164449 +[#163230]: https://github.com/cockroachdb/cockroach/pull/163230 +[#164757]: https://github.com/cockroachdb/cockroach/pull/164757 +[#164874]: https://github.com/cockroachdb/cockroach/pull/164874 +[#150663]: https://github.com/cockroachdb/cockroach/pull/150663 +[#164444]: https://github.com/cockroachdb/cockroach/pull/164444 From ad14d3f0ef0761dfee4c3f4f8d104cc874ccba39 Mon Sep 17 00:00:00 2001 From: Automated Release Bot Date: Fri, 13 Mar 2026 19:39:15 +0000 Subject: [PATCH 04/16] Update release notes for v26.2-v26.2.0-alpha.2 From 44f44c8248ae4b8ecff3a51a5133af7bfa3881d5 Mon Sep 17 00:00:00 2001 From: Automated Release Bot Date: Fri, 13 Mar 2026 19:39:16 +0000 Subject: [PATCH 05/16] Update release notes for v26.2-v26.2.0-alpha.2 --- src/current/_data/releases.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/current/_data/releases.yml b/src/current/_data/releases.yml index 6ecca436333..1121b448f1b 100644 --- a/src/current/_data/releases.yml +++ b/src/current/_data/releases.yml @@ -10900,7 +10900,7 @@ release_date: '2026-03-18' release_type: Testing go_version: go1.25.5 - sha: 0f6bde6aa163eaa56dc1dc42c671940d04dbced6 + sha: 0280f21d74b62396eade9329c49b4aca13e9f312 has_sql_only: true has_sha256sum: true mac: From f42a48e7696805beb746b44ef333fe859cf05d55 Mon Sep 17 00:00:00 2001 From: Automated Release Bot Date: Fri, 13 Mar 2026 19:39:17 +0000 Subject: [PATCH 06/16] Update release notes for v26.2-v26.2.0-alpha.2 --- .../releases/v26.2/v26.2.0-alpha.2.md | 88 ++++++++++--------- 1 file changed, 47 insertions(+), 41 deletions(-) diff --git a/src/current/_includes/releases/v26.2/v26.2.0-alpha.2.md b/src/current/_includes/releases/v26.2/v26.2.0-alpha.2.md index 95cd3de3695..bc84e9429ba 100644 --- a/src/current/_includes/releases/v26.2/v26.2.0-alpha.2.md +++ b/src/current/_includes/releases/v26.2/v26.2.0-alpha.2.md @@ -76,6 +76,13 @@ Release Date: March 18, 2026 cause the new database to inherit the privileges in the backed up database. [#164444][#164444] - During an `INSPECT` run, a new check validates unique column values in `REGIONAL BY ROW` tables. [#164449][#164449] +- Added PostgreSQL-compatible numeric + formatting functions to_char(int, text), to_char(float, text), + to_char(numeric, text), and to_number(text, text). These functions + format numbers as strings and parse formatted strings back to numbers + using the PostgreSQL formatting syntax. + + Co-Authored-By: roachdev-claude [#164672][#164672] - Added to_date(text, text) and to_timestamp(text, text) SQL functions that parse dates and timestamps from formatted strings using PostgreSQL-compatible format patterns. For @@ -83,13 +90,6 @@ Release Date: March 18, 2026 to_timestamp('2023-03-15 14:30:45', 'YYYY-MM-DD HH24:MI:SS') returns a timestamptz. - Co-Authored-By: roachdev-claude [#164672][#164672] -- Added PostgreSQL-compatible numeric - formatting functions to_char(int, text), to_char(float, text), - to_char(numeric, text), and to_number(text, text). These functions - format numbers as strings and parse formatted strings back to numbers - using the PostgreSQL formatting syntax. - Co-Authored-By: roachdev-claude [#164672][#164672] - Added support for a new statement hint used to change session variable values for the duration of a single statement @@ -132,6 +132,11 @@ Release Date: March 18, 2026

Bug fixes

+- JWT authentication now returns a clear error when + HTTP requests to fetch JWKS or OpenID configuration return non-2xx status + codes, instead of silently passing the response body to the JSON parser. + + Co-Authored-By: roachdev-claude [#158294][#158294] - Fixed an issue where ORDER BY expressions containing subqueries with non-default NULLS ordering (e.g., NULLS LAST for ASC, NULLS FIRST for DESC) could cause an error during query @@ -144,6 +149,9 @@ Release Date: March 18, 2026 - Fixed a bug where backups taken after a 25.4 mixed version cluster downgrade could result in inconsistent backup indexes. [#164301][#164301] +- Altering a non-scan-only changefeed to add a + target with `initial_scan='only'` now returns an error instead of + not doing a scan and adding the target to the watched targets list. [#164433][#164433] - A bug where adding a target without an initial scan, dropping that same target, and then adding it again with an initial scan would result in the target being @@ -159,9 +167,6 @@ Release Date: March 18, 2026 Release note (backward-incompatible change): Using `ALTER CHANGEFEED ADD ...` for a table that is already watched will now return an error. [#164433][#164433] -- Altering a non-scan-only changefeed to add a - target with `initial_scan='only'` now returns an error instead of - not doing a scan and adding the target to the watched targets list. [#164433][#164433] - Fixed a bug where creating a table with a user-defined type column failed when the user had USAGE privilege on the base type but not on its implicit array type. The array type now inherits privileges from the base type, @@ -220,42 +225,43 @@ matching PostgreSQL behavior. [#164471][#164471] Co-Authored-By: roachdev-claude [#165367][#165367] -[#165260]: https://github.com/cockroachdb/cockroach/pull/165260 -[#165367]: https://github.com/cockroachdb/cockroach/pull/165367 -[#163400]: https://github.com/cockroachdb/cockroach/pull/163400 -[#164942]: https://github.com/cockroachdb/cockroach/pull/164942 -[#163866]: https://github.com/cockroachdb/cockroach/pull/163866 -[#164943]: https://github.com/cockroachdb/cockroach/pull/164943 -[#161763]: https://github.com/cockroachdb/cockroach/pull/161763 -[#164184]: https://github.com/cockroachdb/cockroach/pull/164184 -[#164672]: https://github.com/cockroachdb/cockroach/pull/164672 -[#165227]: https://github.com/cockroachdb/cockroach/pull/165227 -[#165382]: https://github.com/cockroachdb/cockroach/pull/165382 -[#164301]: https://github.com/cockroachdb/cockroach/pull/164301 -[#164471]: https://github.com/cockroachdb/cockroach/pull/164471 -[#164468]: https://github.com/cockroachdb/cockroach/pull/164468 -[#163378]: https://github.com/cockroachdb/cockroach/pull/163378 +[#164403]: https://github.com/cockroachdb/cockroach/pull/164403 [#164969]: https://github.com/cockroachdb/cockroach/pull/164969 +[#165227]: https://github.com/cockroachdb/cockroach/pull/165227 +[#163866]: https://github.com/cockroachdb/cockroach/pull/163866 [#164827]: https://github.com/cockroachdb/cockroach/pull/164827 -[#164129]: https://github.com/cockroachdb/cockroach/pull/164129 -[#164909]: https://github.com/cockroachdb/cockroach/pull/164909 -[#164671]: https://github.com/cockroachdb/cockroach/pull/164671 -[#164765]: https://github.com/cockroachdb/cockroach/pull/164765 -[#164879]: https://github.com/cockroachdb/cockroach/pull/164879 -[#163891]: https://github.com/cockroachdb/cockroach/pull/163891 +[#163378]: https://github.com/cockroachdb/cockroach/pull/163378 +[#163991]: https://github.com/cockroachdb/cockroach/pull/163991 +[#164164]: https://github.com/cockroachdb/cockroach/pull/164164 +[#164933]: https://github.com/cockroachdb/cockroach/pull/164933 +[#164881]: https://github.com/cockroachdb/cockroach/pull/164881 +[#161763]: https://github.com/cockroachdb/cockroach/pull/161763 [#165093]: https://github.com/cockroachdb/cockroach/pull/165093 -[#164403]: https://github.com/cockroachdb/cockroach/pull/164403 -[#164433]: https://github.com/cockroachdb/cockroach/pull/164433 [#164739]: https://github.com/cockroachdb/cockroach/pull/164739 +[#164765]: https://github.com/cockroachdb/cockroach/pull/164765 +[#163891]: https://github.com/cockroachdb/cockroach/pull/163891 +[#164184]: https://github.com/cockroachdb/cockroach/pull/164184 +[#163230]: https://github.com/cockroachdb/cockroach/pull/163230 +[#164942]: https://github.com/cockroachdb/cockroach/pull/164942 [#164664]: https://github.com/cockroachdb/cockroach/pull/164664 -[#164164]: https://github.com/cockroachdb/cockroach/pull/164164 +[#150663]: https://github.com/cockroachdb/cockroach/pull/150663 +[#164301]: https://github.com/cockroachdb/cockroach/pull/164301 [#164557]: https://github.com/cockroachdb/cockroach/pull/164557 -[#164881]: https://github.com/cockroachdb/cockroach/pull/164881 -[#164933]: https://github.com/cockroachdb/cockroach/pull/164933 -[#163991]: https://github.com/cockroachdb/cockroach/pull/163991 -[#164449]: https://github.com/cockroachdb/cockroach/pull/164449 -[#163230]: https://github.com/cockroachdb/cockroach/pull/163230 -[#164757]: https://github.com/cockroachdb/cockroach/pull/164757 [#164874]: https://github.com/cockroachdb/cockroach/pull/164874 -[#150663]: https://github.com/cockroachdb/cockroach/pull/150663 +[#165367]: https://github.com/cockroachdb/cockroach/pull/165367 +[#164909]: https://github.com/cockroachdb/cockroach/pull/164909 +[#164757]: https://github.com/cockroachdb/cockroach/pull/164757 +[#164943]: https://github.com/cockroachdb/cockroach/pull/164943 +[#164433]: https://github.com/cockroachdb/cockroach/pull/164433 +[#164471]: https://github.com/cockroachdb/cockroach/pull/164471 +[#164671]: https://github.com/cockroachdb/cockroach/pull/164671 +[#165260]: https://github.com/cockroachdb/cockroach/pull/165260 +[#163400]: https://github.com/cockroachdb/cockroach/pull/163400 +[#165382]: https://github.com/cockroachdb/cockroach/pull/165382 +[#158294]: https://github.com/cockroachdb/cockroach/pull/158294 +[#164449]: https://github.com/cockroachdb/cockroach/pull/164449 +[#164672]: https://github.com/cockroachdb/cockroach/pull/164672 +[#164879]: https://github.com/cockroachdb/cockroach/pull/164879 +[#164468]: https://github.com/cockroachdb/cockroach/pull/164468 +[#164129]: https://github.com/cockroachdb/cockroach/pull/164129 [#164444]: https://github.com/cockroachdb/cockroach/pull/164444 From 381309b42e11c2aa5b2773f67b0bd2820158b469 Mon Sep 17 00:00:00 2001 From: Automated Release Bot Date: Tue, 17 Mar 2026 21:36:10 +0000 Subject: [PATCH 07/16] Update release notes for v26.2-v26.2.0-alpha.2 From 025c53ad86a8a067aa28a4f0e553ade2f2060147 Mon Sep 17 00:00:00 2001 From: Automated Release Bot Date: Tue, 17 Mar 2026 21:36:11 +0000 Subject: [PATCH 08/16] Update release notes for v26.2-v26.2.0-alpha.2 From 8b94d9ad54930d696834a0cc4ca80057383902fd Mon Sep 17 00:00:00 2001 From: Automated Release Bot Date: Tue, 17 Mar 2026 21:36:12 +0000 Subject: [PATCH 09/16] Update release notes for v26.2-v26.2.0-alpha.2 --- .../releases/v26.2/v26.2.0-alpha.2.md | 122 ++++++------------ 1 file changed, 38 insertions(+), 84 deletions(-) diff --git a/src/current/_includes/releases/v26.2/v26.2.0-alpha.2.md b/src/current/_includes/releases/v26.2/v26.2.0-alpha.2.md index bc84e9429ba..b8f2ed2041b 100644 --- a/src/current/_includes/releases/v26.2/v26.2.0-alpha.2.md +++ b/src/current/_includes/releases/v26.2/v26.2.0-alpha.2.md @@ -31,9 +31,7 @@ Release Date: March 18, 2026

SQL language changes

- Added the `ST_AsMVT` aggregate function to generate Mapbox Vector Tile (MVT) binary format from geospatial data, providing PostgreSQL/PostGIS compatibility for web mapping applications. [#150663][#150663] -- ALTER TABLE ... SET LOCALITY is now fully - executed using the declarative schema changer, improving reliability - and consistency with other schema change operations. [#161763][#161763] +- `ALTER TABLE ... SET LOCALITY` is now fully executed using the declarative schema changer, improving reliability and consistency with other schema change operations. [#161763][#161763] - Added an index storage parameter `skip_unique_checks` that can be used to disable unique constraint checks for indexes with implicit partition columns, including indexes @@ -61,36 +59,15 @@ Release Date: March 18, 2026 recreation statement have been sorted in ascending order of the original hints' creation time. [#164164][#164164] - Views now support the PostgreSQL-compatible `security_invoker` option. When set via `CREATE VIEW ... WITH (security_invoker)` or `ALTER VIEW SET (security_invoker = true)`, privilege checks on the underlying tables are performed as the querying user rather than the view owner. The `security_invoker` option can be reset with `ALTER VIEW ... RESET (security_invoker)`. [#164184][#164184] -- CockroachDB now supports COMMIT AND CHAIN - and ROLLBACK AND CHAIN (as well as END AND CHAIN and ABORT AND CHAIN). - These finish the current transaction and immediately start a new - explicit transaction with the same isolation level, priority, and - read/write mode as the previous transaction. AND NO CHAIN is also - accepted for Postgres compatibility but behaves the same as a plain - COMMIT or ROLLBACK. - - Co-Authored-By: roachdev-claude [#164403][#164403] +- CockroachDB now supports `COMMIT AND CHAIN` and `ROLLBACK AND CHAIN`, as well as `END AND CHAIN` and `ABORT AND CHAIN`. These finish the current transaction and immediately start a new explicit transaction with the same isolation level, priority, and read/write mode as the previous transaction. `AND NO CHAIN` is also accepted for PostgreSQL compatibility but behaves the same as a plain `COMMIT` or `ROLLBACK`. [#164403][#164403] - RESTORE TABLE/DATABASE now supports the WITH GRANTS option, which restores grants on restore targets for users in the restoring cluster. Note that using this option with `new_db_name` will cause the new database to inherit the privileges in the backed up database. [#164444][#164444] - During an `INSPECT` run, a new check validates unique column values in `REGIONAL BY ROW` tables. [#164449][#164449] -- Added PostgreSQL-compatible numeric - formatting functions to_char(int, text), to_char(float, text), - to_char(numeric, text), and to_number(text, text). These functions - format numbers as strings and parse formatted strings back to numbers - using the PostgreSQL formatting syntax. - - Co-Authored-By: roachdev-claude [#164672][#164672] -- Added to_date(text, text) and - to_timestamp(text, text) SQL functions that parse dates and timestamps - from formatted strings using PostgreSQL-compatible format patterns. For - example, to_date('2023-03-15', 'YYYY-MM-DD') returns a date, and - to_timestamp('2023-03-15 14:30:45', 'YYYY-MM-DD HH24:MI:SS') returns a - timestamptz. - - Co-Authored-By: roachdev-claude [#164672][#164672] +- Added `to_date(text, text)` and `to_timestamp(text, text)` SQL functions that parse dates and timestamps from formatted strings using PostgreSQL-compatible format patterns. For example, `to_date('2023-03-15', 'YYYY-MM-DD')` returns a date, and `to_timestamp('2023-03-15 14:30:45', 'YYYY-MM-DD HH24:MI:SS')` returns a `timestamptz`. [#164672][#164672] +- Added PostgreSQL-compatible numeric formatting functions `to_char(int, text)`, `to_char(float, text)`, `to_char(numeric, text)`, and `to_number(text, text)`. These functions format numbers as strings and parse formatted strings back to numbers using PostgreSQL formatting syntax. [#164672][#164672] - Added support for a new statement hint used to change session variable values for the duration of a single statement without application changes. The new hint type can be created using the @@ -109,12 +86,7 @@ Release Date: March 18, 2026

Operational changes

-- The bulkio.index_backfill.elastic_control.enabled - cluster setting is now enabled by default, allowing index backfill operations - to integrate with elastic CPU control and automatically throttle based on - available resources. - - Epic: CRDB-48845. [#163866][#163866] +- The `bulkio.index_backfill.elastic_control.enabled` cluster setting is now enabled by default, allowing index backfill operations to integrate with elastic CPU control and automatically throttle based on available resources. [#163866][#163866] - Promoted 9 admission control metrics to Essential status, making them more discoverable in monitoring dashboards and troubleshooting workflows. These metrics track @@ -171,26 +143,9 @@ Release Date: March 18, 2026 when the user had USAGE privilege on the base type but not on its implicit array type. The array type now inherits privileges from the base type, matching PostgreSQL behavior. [#164471][#164471] -- ALTER TABLE ... ALTER PRIMARY KEY USING COLUMNS - (col) USING HASH is now correctly treated as a no-op when the table - already has a matching hash-sharded primary key, instead of attempting - an unnecessary schema change. - - Co-Authored-By: roachdev-claude [#164557][#164557] -- Fixed a bug in appBatchStats.merge where - the numEmptyEntries field was not being properly accumulated when - merging statistics. This could result in incorrect statistics - tracking for empty raft log entries. - - Co-Authored-By: roachdev-claude [#164671][#164671] -- Fixed a bug where ALTER TABLE ... ALTER COLUMN - ... SET DATA TYPE from an unbounded string or bit type to a bounded type - with a length >= 64 (e.g., STRING to STRING(100)) would skip validating - existing data against the new length constraint. This could leave rows - in the table that violate the column's type, with values longer than the - specified limit. - - Co-Authored-By: roachdev-claude [#164739][#164739] +- `ALTER TABLE ... ALTER PRIMARY KEY USING COLUMNS (col) USING HASH` is now correctly treated as a no-op when the table already has a matching hash-sharded primary key, instead of attempting an unnecessary schema change. [#164557][#164557] +- Fixed a bug in `appBatchStats.merge` where the `numEmptyEntries` field was not being properly accumulated when merging statistics. This could result in incorrect statistics tracking for empty raft log entries. [#164671][#164671] +- Fixed a bug where `ALTER TABLE ... ALTER COLUMN ... SET DATA TYPE` from an unbounded string or bit type to a bounded type with a length `>= 64` (for example, `STRING` to `STRING(100)`) would skip validating existing data against the new length constraint. This could leave rows in the table that violate the column's type, with values longer than the specified limit. [#164739][#164739] - Fixed a bug where `RESTORE` with `skip_missing_foreign_keys` could fail with an internal error if the restored table had an in-progress schema change that added a foreign key constraint whose referenced table was not included in the restore. [#164757][#164757] - In a recent change that was included in 25.4+, we inadvertently made it so that setting `min_checkpoint_frequency` to @@ -215,8 +170,7 @@ matching PostgreSQL behavior. [#164471][#164471] restarts from causing changefeeds to fall behind because of excessive backoff. [#164933][#164933] - Fixed a rare race condition where `SHOW CREATE TABLE` could fail with a `"relation does not exist"` error if a table referenced by a foreign key was being concurrently dropped. [#164942][#164942] -- Fixes a bug that had previously allowed the - primary and secondary to be in separate super regions. [#164943][#164943] +- Fixes a bug that had previously allowed the primary and secondary regions to be in separate super regions. [#164943][#164943] - Fixed a bug that could cause row sampling for table statistics to crash a node due to a data race when processing a collated string column with values larger than 400 bytes. This bug has existed since before v23.1. [#165260][#165260] - The information_schema.crdb_node_active_session_history and information_schema.crdb_cluster_active_session_history views now include @@ -225,43 +179,43 @@ matching PostgreSQL behavior. [#164471][#164471] Co-Authored-By: roachdev-claude [#165367][#165367] +[#164433]: https://github.com/cockroachdb/cockroach/pull/164433 +[#164879]: https://github.com/cockroachdb/cockroach/pull/164879 +[#163891]: https://github.com/cockroachdb/cockroach/pull/163891 +[#165093]: https://github.com/cockroachdb/cockroach/pull/165093 +[#163866]: https://github.com/cockroachdb/cockroach/pull/163866 +[#164942]: https://github.com/cockroachdb/cockroach/pull/164942 +[#161763]: https://github.com/cockroachdb/cockroach/pull/161763 [#164403]: https://github.com/cockroachdb/cockroach/pull/164403 -[#164969]: https://github.com/cockroachdb/cockroach/pull/164969 [#165227]: https://github.com/cockroachdb/cockroach/pull/165227 -[#163866]: https://github.com/cockroachdb/cockroach/pull/163866 -[#164827]: https://github.com/cockroachdb/cockroach/pull/164827 -[#163378]: https://github.com/cockroachdb/cockroach/pull/163378 -[#163991]: https://github.com/cockroachdb/cockroach/pull/163991 -[#164164]: https://github.com/cockroachdb/cockroach/pull/164164 -[#164933]: https://github.com/cockroachdb/cockroach/pull/164933 +[#164471]: https://github.com/cockroachdb/cockroach/pull/164471 +[#164874]: https://github.com/cockroachdb/cockroach/pull/164874 +[#165260]: https://github.com/cockroachdb/cockroach/pull/165260 +[#164664]: https://github.com/cockroachdb/cockroach/pull/164664 +[#164129]: https://github.com/cockroachdb/cockroach/pull/164129 +[#164449]: https://github.com/cockroachdb/cockroach/pull/164449 +[#164557]: https://github.com/cockroachdb/cockroach/pull/164557 [#164881]: https://github.com/cockroachdb/cockroach/pull/164881 -[#161763]: https://github.com/cockroachdb/cockroach/pull/161763 -[#165093]: https://github.com/cockroachdb/cockroach/pull/165093 -[#164739]: https://github.com/cockroachdb/cockroach/pull/164739 -[#164765]: https://github.com/cockroachdb/cockroach/pull/164765 -[#163891]: https://github.com/cockroachdb/cockroach/pull/163891 -[#164184]: https://github.com/cockroachdb/cockroach/pull/164184 +[#164164]: https://github.com/cockroachdb/cockroach/pull/164164 [#163230]: https://github.com/cockroachdb/cockroach/pull/163230 -[#164942]: https://github.com/cockroachdb/cockroach/pull/164942 -[#164664]: https://github.com/cockroachdb/cockroach/pull/164664 -[#150663]: https://github.com/cockroachdb/cockroach/pull/150663 +[#158294]: https://github.com/cockroachdb/cockroach/pull/158294 [#164301]: https://github.com/cockroachdb/cockroach/pull/164301 -[#164557]: https://github.com/cockroachdb/cockroach/pull/164557 -[#164874]: https://github.com/cockroachdb/cockroach/pull/164874 +[#164671]: https://github.com/cockroachdb/cockroach/pull/164671 +[#164765]: https://github.com/cockroachdb/cockroach/pull/164765 [#165367]: https://github.com/cockroachdb/cockroach/pull/165367 -[#164909]: https://github.com/cockroachdb/cockroach/pull/164909 +[#150663]: https://github.com/cockroachdb/cockroach/pull/150663 +[#164184]: https://github.com/cockroachdb/cockroach/pull/164184 +[#164969]: https://github.com/cockroachdb/cockroach/pull/164969 +[#164827]: https://github.com/cockroachdb/cockroach/pull/164827 [#164757]: https://github.com/cockroachdb/cockroach/pull/164757 [#164943]: https://github.com/cockroachdb/cockroach/pull/164943 -[#164433]: https://github.com/cockroachdb/cockroach/pull/164433 -[#164471]: https://github.com/cockroachdb/cockroach/pull/164471 -[#164671]: https://github.com/cockroachdb/cockroach/pull/164671 -[#165260]: https://github.com/cockroachdb/cockroach/pull/165260 [#163400]: https://github.com/cockroachdb/cockroach/pull/163400 -[#165382]: https://github.com/cockroachdb/cockroach/pull/165382 -[#158294]: https://github.com/cockroachdb/cockroach/pull/158294 -[#164449]: https://github.com/cockroachdb/cockroach/pull/164449 +[#163991]: https://github.com/cockroachdb/cockroach/pull/163991 +[#164444]: https://github.com/cockroachdb/cockroach/pull/164444 [#164672]: https://github.com/cockroachdb/cockroach/pull/164672 -[#164879]: https://github.com/cockroachdb/cockroach/pull/164879 +[#164909]: https://github.com/cockroachdb/cockroach/pull/164909 +[#165382]: https://github.com/cockroachdb/cockroach/pull/165382 +[#164739]: https://github.com/cockroachdb/cockroach/pull/164739 +[#164933]: https://github.com/cockroachdb/cockroach/pull/164933 [#164468]: https://github.com/cockroachdb/cockroach/pull/164468 -[#164129]: https://github.com/cockroachdb/cockroach/pull/164129 -[#164444]: https://github.com/cockroachdb/cockroach/pull/164444 +[#163378]: https://github.com/cockroachdb/cockroach/pull/163378 From 2cf37b374c40cfb2b37a3aeb264c9111eac9f082 Mon Sep 17 00:00:00 2001 From: Automated Release Bot Date: Tue, 17 Mar 2026 21:44:41 +0000 Subject: [PATCH 10/16] Update release notes for v26.2-v26.2.0-alpha.2 From babda5d8a7eefe7ae8be177568169d6d2cb0612e Mon Sep 17 00:00:00 2001 From: Automated Release Bot Date: Tue, 17 Mar 2026 21:44:42 +0000 Subject: [PATCH 11/16] Update release notes for v26.2-v26.2.0-alpha.2 From 6fc051d443d41d705343cf4365cf87428448ca8a Mon Sep 17 00:00:00 2001 From: Automated Release Bot Date: Tue, 17 Mar 2026 21:44:43 +0000 Subject: [PATCH 12/16] Update release notes for v26.2-v26.2.0-alpha.2 --- .../releases/v26.2/v26.2.0-alpha.2.md | 209 +++++------------- 1 file changed, 55 insertions(+), 154 deletions(-) diff --git a/src/current/_includes/releases/v26.2/v26.2.0-alpha.2.md b/src/current/_includes/releases/v26.2/v26.2.0-alpha.2.md index b8f2ed2041b..50f0535d13e 100644 --- a/src/current/_includes/releases/v26.2/v26.2.0-alpha.2.md +++ b/src/current/_includes/releases/v26.2/v26.2.0-alpha.2.md @@ -7,123 +7,45 @@ Release Date: March 18, 2026

Backward-incompatible changes

- Lowered the default value of the `sql.guardrails.max_row_size_log` cluster setting from `64 MiB` to `16 MiB`, and the default value of `sql.guardrails.max_row_size_err` from `512 MiB` to `80 MiB`. These settings control the maximum size of a row (or column family) that SQL can write before logging a warning or returning an error, respectively. The previous defaults were high enough that large rows would hit other limits first (such as the Raft command size limit or the backup SST size limit), producing confusing errors. The new defaults align with existing system limits to provide clearer diagnostics. If your workload legitimately writes rows larger than these new defaults, you can restore the previous behavior by increasing these settings. [#164468][#164468] -- When selecting from a view, - the view owner's privileges on the underlying tables are now checked. - Previously, no privilege checks were performed on the underlying tables, - so a view would continue to work even after the owner lost access to the - underlying tables. This also affects row-level security (RLS): the view - owner's RLS policies are now enforced instead of the invoker's. If this - causes issues, the previous behavior can be restored by setting the - cluster setting `sql.auth.skip_underlying_view_privilege_checks.enabled` - to true. [#164664][#164664] +- When selecting from a view, the view owner's privileges on the underlying tables are now checked. Previously, no privilege checks were performed on the underlying tables, so a view would continue to work even after the owner lost access to the underlying tables. This also affects row-level security (RLS): the view owner's RLS policies are now enforced instead of the invoker's. If this causes issues, you can restore the previous behavior by setting the cluster setting `sql.auth.skip_underlying_view_privilege_checks.enabled` to `true`. [#164664][#164664]

Security updates

-- When the `security.provisioning.ldap.enabled` - cluster setting is enabled, LDAP-authenticated DB Console logins now update the - `estimated_last_login_time` column in the `system.users` table. [#163400][#163400] -- When the - `security.provisioning.oidc.enabled` cluster setting is enabled, - OIDC-authenticated DB Console logins now populate the - `estimated_last_login_time` column in `system.users`, allowing - administrators to track when OIDC users last accessed the DB Console. [#164129][#164129] +- When the `security.provisioning.ldap.enabled` cluster setting is enabled, LDAP-authenticated DB Console logins now update the `estimated_last_login_time` column in the `system.users` table. [#163400][#163400] +- When the `security.provisioning.oidc.enabled` cluster setting is enabled, OIDC-authenticated DB Console logins now populate the `estimated_last_login_time` column in `system.users`, allowing administrators to track when OIDC users last accessed the DB Console. [#164129][#164129]

SQL language changes

- Added the `ST_AsMVT` aggregate function to generate Mapbox Vector Tile (MVT) binary format from geospatial data, providing PostgreSQL/PostGIS compatibility for web mapping applications. [#150663][#150663] - `ALTER TABLE ... SET LOCALITY` is now fully executed using the declarative schema changer, improving reliability and consistency with other schema change operations. [#161763][#161763] -- Added an index storage parameter - `skip_unique_checks` that can be used to disable unique constraint - checks for indexes with implicit partition columns, including indexes - in regional-by-row tables. This should only be used if the application - can guarantee uniqueness, for example, by using external UUID values - or relying on a unique_rowid() default value. Incorrectly applying this - setting when uniqueness is not guaranteed by the application could - result in logically duplicate keys in different partitions of a unique - index. [#163378][#163378] +- Added an index storage parameter `skip_unique_checks` that can be used to disable unique constraint checks for indexes with implicit partition columns, including indexes in `REGIONAL BY ROW` tables. This should **only** be used if the application can guarantee uniqueness, for example, by using external UUID values or relying on a `unique_rowid()` default value. Incorrectly applying this setting when uniqueness is not guaranteed by the application could result in logically duplicate keys in different partitions of a unique index. [#163378][#163378] - Introduced the `information_schema.crdb_delete_statement_hints` built-in function, which accepts 2 kinds of payload: `row_id` (int): the primary key of `system.statement_hints`; `fingerprint` (string). The function returns the number of rows deleted. [#163891][#163891] -- Added support for importing Parquet files - using the IMPORT statement. Parquet files can be imported from cloud - storage URLs (s3://, gs://, azure://) or HTTP servers that support - range requests (Accept-Ranges: bytes). This feature supports - column-level compression formats (Snappy, GZIP, ZSTD, Brotli, etc.) as - specified in the Parquet file format, but does not support additional - file-level compression (e.g., .parquet.gz files). Nested Parquet types - (lists, maps, structs) are not currently supported; only flat schemas - with primitive types are supported at this time. - - Epic: CRDB-23802 [#163991][#163991] -- We now include `information_schema.crdb_rewrite_inline_hints` - statements in the `schema.sql` file of a statement diagnostics bundle - for re-creating all the statement hints bound to the statement. The hints - recreation statement have been sorted in ascending order of the original - hints' creation time. [#164164][#164164] +- Added support for importing Parquet files using the `IMPORT` statement. Parquet files can be imported from cloud storage URLs (`s3://`, `gs://`, `azure://`) or HTTP servers that support range requests (`Accept-Ranges: bytes`). This feature supports column-level compression formats (Snappy, GZIP, ZSTD, Brotli, etc.) as specified in the Parquet file format, but does not support additional file-level compression (e.g., `.parquet.gz` files). Nested Parquet types (lists, maps, structs) are not supported; only flat schemas with primitive types are supported at this time. [#163991][#163991] +- CockroachDB now includes `information_schema.crdb_rewrite_inline_hints` statements in the `schema.sql` file of a statement diagnostics bundle for re-creating all the statement hints bound to the statement. The hint recreation statements are sorted in ascending order of the original hint creation time. [#164164][#164164] - Views now support the PostgreSQL-compatible `security_invoker` option. When set via `CREATE VIEW ... WITH (security_invoker)` or `ALTER VIEW SET (security_invoker = true)`, privilege checks on the underlying tables are performed as the querying user rather than the view owner. The `security_invoker` option can be reset with `ALTER VIEW ... RESET (security_invoker)`. [#164184][#164184] -- CockroachDB now supports `COMMIT AND CHAIN` and `ROLLBACK AND CHAIN`, as well as `END AND CHAIN` and `ABORT AND CHAIN`. These finish the current transaction and immediately start a new explicit transaction with the same isolation level, priority, and read/write mode as the previous transaction. `AND NO CHAIN` is also accepted for PostgreSQL compatibility but behaves the same as a plain `COMMIT` or `ROLLBACK`. [#164403][#164403] -- RESTORE TABLE/DATABASE now supports the WITH GRANTS - option, which restores grants on restore targets for users in the - restoring cluster. Note that using this option with `new_db_name` will - cause the new database to inherit the privileges in the backed up - database. [#164444][#164444] +- CockroachDB now supports `COMMIT AND CHAIN` and `ROLLBACK AND CHAIN` (as well as `END AND CHAIN` and `ABORT AND CHAIN`). These statements finish the current transaction and immediately start a new explicit transaction with the same isolation level, priority, and read/write mode as the previous transaction. `AND NO CHAIN` is also accepted for PostgreSQL compatibility but behaves identically to a plain `COMMIT` or `ROLLBACK`. [#164403][#164403] +- `RESTORE TABLE/DATABASE` now supports the `WITH GRANTS` option, which restores grants on restore targets for users in the restoring cluster. Note that using this option with `new_db_name` will cause the new database to inherit the privileges in the backed-up database. [#164444][#164444] - During an `INSPECT` run, a new check validates unique column values in `REGIONAL BY ROW` tables. [#164449][#164449] - Added `to_date(text, text)` and `to_timestamp(text, text)` SQL functions that parse dates and timestamps from formatted strings using PostgreSQL-compatible format patterns. For example, `to_date('2023-03-15', 'YYYY-MM-DD')` returns a date, and `to_timestamp('2023-03-15 14:30:45', 'YYYY-MM-DD HH24:MI:SS')` returns a `timestamptz`. [#164672][#164672] -- Added PostgreSQL-compatible numeric formatting functions `to_char(int, text)`, `to_char(float, text)`, `to_char(numeric, text)`, and `to_number(text, text)`. These functions format numbers as strings and parse formatted strings back to numbers using PostgreSQL formatting syntax. [#164672][#164672] -- Added support for a new statement hint used to - change session variable values for the duration of a single statement - without application changes. The new hint type can be created using the - information_schema.crdb_set_session_variable_hint builtin. The override applies - only when executing a statement matching the given fingerprint and does not - persist on the session or surrounding transaction. [#164909][#164909] -- Active Session History tables are now - accessible via information_schema.crdb_node_active_session_history - and information_schema.crdb_cluster_active_session_history, in - addition to the existing crdb_internal tables. This improves - discoverability when browsing information_schema for available - metadata. - - Co-Authored-By: roachdev-claude [#164969][#164969] +- Added PostgreSQL-compatible numeric formatting functions `to_char(int, text)`, `to_char(float, text)`, `to_char(numeric, text)`, and `to_number(text, text)`. These functions format numbers as strings and parse formatted strings back to numbers using the PostgreSQL formatting syntax. [#164672][#164672] +- Added support for a new statement hint used to change session variable values for the duration of a single statement without application changes. The new hint type can be created using the `information_schema.crdb_set_session_variable_hint` built-in function. The override applies only when executing a statement matching the given fingerprint and does not persist on the session or surrounding transaction. [#164909][#164909] +- Active Session History tables are now accessible via `information_schema.crdb_node_active_session_history` and `information_schema.crdb_cluster_active_session_history`, in addition to the existing `crdb_internal` tables. This improves discoverability when browsing `information_schema` for available metadata. [#164969][#164969] - The `enable_super_regions` session variable and the `sql.defaults.super_regions.enabled` cluster setting are no longer required to use super regions. Super region DDL operations (`ADD`, `DROP`, and `ALTER SUPER REGION`) now work without any experimental flag. The session variable and cluster setting are deprecated, and existing scripts that set them will continue to work without error. [#165227][#165227]

Operational changes

- The `bulkio.index_backfill.elastic_control.enabled` cluster setting is now enabled by default, allowing index backfill operations to integrate with elastic CPU control and automatically throttle based on available resources. [#163866][#163866] -- Promoted 9 admission control metrics - to Essential status, making them more discoverable in monitoring - dashboards and troubleshooting workflows. These metrics track - admission control wait times, resource exhaustion (slots, I/O - tokens, CPU tokens), and replication flow control, providing - critical visibility into cluster health and performance throttling. [#164827][#164827] +- Promoted 9 admission control metrics to `Essential` status, making them more discoverable in monitoring dashboards and troubleshooting workflows: `admission.wait_durations.sql-kv-response`, `admission.wait_durations.sql-sql-response`, `admission.wait_durations.elastic-stores`, `admission.wait_durations.elastic-cpu`, `admission.granter.slots_exhausted_duration.kv`, `admission.granter.io_tokens_exhausted_duration.kv`, `admission.granter.elastic_io_tokens_exhausted_duration.kv`, `admission.elastic_cpu.nanos_exhausted_duration`, and `kvflowcontrol.send_queue.bytes`. These metrics track admission control wait times, resource exhaustion, and replication flow control, providing visibility into cluster health and performance throttling. [#164827][#164827] - Added periodic ASH workload summary logging to the OPS channel. Two new cluster settings, `obs.ash.log_interval` (default 10m) and `obs.ash.log_top_n` (default 10), control how often and how many entries are emitted. Each summary reports the most frequently sampled workloads grouped by event type, event name, and workload ID, providing durable visibility into workload patterns that previously existed only in memory. [#165093][#165093] -- users cannot run AOST queries on the reader tenant, - unless they set bypass_pcr_reader_catalog_aost session variable. This session - variable should not be used by default in the reader workload. It should only - be used during investigation or for changing reader tenant specific cluster - settings. - - Co-Authored-By: roachdev-claude [#165382][#165382] +- Users cannot run AOST queries on the reader virtual cluster, unless they set the `bypass_pcr_reader_catalog_aost` session variable. This session variable should not be used by default in the reader workload. It should only be used during investigation or for changing cluster settings specific to the reader virtual cluster. [#165382][#165382]

Bug fixes

-- JWT authentication now returns a clear error when - HTTP requests to fetch JWKS or OpenID configuration return non-2xx status - codes, instead of silently passing the response body to the JSON parser. - - Co-Authored-By: roachdev-claude [#158294][#158294] -- Fixed an issue where ORDER BY expressions - containing subqueries with non-default NULLS ordering (e.g., NULLS LAST - for ASC, NULLS FIRST for DESC) could cause an error during query - planning. - - Co-Authored-By: Claude [#163230][#163230] -- Fixed a bug that caused - `ALTER INDEX ... PARTITION BY` statements to fail on a nonexistent index - even if `IF EXISTS` was used. [#163378][#163378] -- Fixed a bug where backups taken after a 25.4 - mixed version cluster downgrade could result in inconsistent backup - indexes. [#164301][#164301] -- Altering a non-scan-only changefeed to add a - target with `initial_scan='only'` now returns an error instead of - not doing a scan and adding the target to the watched targets list. [#164433][#164433] +- JWT authentication now returns a clear error when HTTP requests to fetch JWKS or OpenID configuration return non-`2xx` status codes, instead of silently passing the response body to the JSON parser. [#158294][#158294] +- Fixed an issue where `ORDER BY` expressions containing subqueries with non-default `NULLS` ordering (e.g., `NULLS LAST` for `ASC`, `NULLS FIRST` for `DESC`) could cause an error during query planning. [#163230][#163230] +- Fixed a bug that caused `ALTER INDEX ... PARTITION BY` statements to fail on a nonexistent index even if `IF EXISTS` was used. [#163378][#163378] +- Fixed a bug where incremental backups taken after downgrading a mixed-version cluster to v25.4 could result in inconsistent backup indexes. [#164301][#164301] +- Altering a non-scan-only changefeed to add a target with `initial_scan='only'` now returns an error instead of not doing a scan and adding the target to the watched targets list. [#164433][#164433] - A bug where adding a target without an initial scan, dropping that same target, and then adding it again with an initial scan would result in the target being @@ -144,78 +66,57 @@ when the user had USAGE privilege on the base type but not on its implicit array type. The array type now inherits privileges from the base type, matching PostgreSQL behavior. [#164471][#164471] - `ALTER TABLE ... ALTER PRIMARY KEY USING COLUMNS (col) USING HASH` is now correctly treated as a no-op when the table already has a matching hash-sharded primary key, instead of attempting an unnecessary schema change. [#164557][#164557] -- Fixed a bug in `appBatchStats.merge` where the `numEmptyEntries` field was not being properly accumulated when merging statistics. This could result in incorrect statistics tracking for empty raft log entries. [#164671][#164671] +- Fixed a bug in `appBatchStats.merge` where the `numEmptyEntries` field was not being properly accumulated when merging statistics. This could result in incorrect statistics tracking for empty Raft log entries. [#164671][#164671] - Fixed a bug where `ALTER TABLE ... ALTER COLUMN ... SET DATA TYPE` from an unbounded string or bit type to a bounded type with a length `>= 64` (for example, `STRING` to `STRING(100)`) would skip validating existing data against the new length constraint. This could leave rows in the table that violate the column's type, with values longer than the specified limit. [#164739][#164739] - Fixed a bug where `RESTORE` with `skip_missing_foreign_keys` could fail with an internal error if the restored table had an in-progress schema change that added a foreign key constraint whose referenced table was not included in the restore. [#164757][#164757] -- In a recent change that was included in 25.4+, - we inadvertently made it so that setting `min_checkpoint_frequency` to - 0 would cause the changefeed's highwater to not advance/not send - resolved timestamps. This bug has been fixed. Note however that setting - `min_checkpoint_frequency` to lower than `500ms` is not recommended as - it may cause degraded changefeed performance. [#164765][#164765] +- Fixed a bug introduced in v25.4+ where setting `min_checkpoint_frequency` to `0` prevented changefeeds from advancing their resolved timestamp (high-water mark) and emitting resolved messages. Note that setting `min_checkpoint_frequency` to lower than `500ms` is **not** recommended as it may cause degraded changefeed performance. [#164765][#164765] - Lowered the default value of the `changefeed.max_retry_backoff` cluster setting from `10m` to `30s` to reduce changefeed lag during rolling restarts. [#164874][#164874] -- Previously, CockroachDB might not have promptly - responded to the statement timeout when performing a hash join with ON - filter that is mostly `false`. This is now fixed. [#164879][#164879] -- Fixed a bug where IMPORT error messages - could include unredacted cloud storage credentials from the source - URI. Credentials are now stripped from URIs before they appear in - error messages. - - Co-Authored-By: roachdev-claude [#164881][#164881] -- Changefeed retry backoff now resets when - the changefeed's resolved timestamp (highwater mark) advances between - retries, in addition to the existing time-based reset - (changefeed.retry_backoff_reset). This prevents transient rolling - restarts from causing changefeeds to fall behind because of - excessive backoff. [#164933][#164933] +- Fixed a bug where CockroachDB did not always promptly respond to the statement timeout when performing a hash join with `ON` filter that is mostly `false`. [#164879][#164879] +- Fixed a bug where `IMPORT` error messages could include unredacted cloud storage credentials from the source URI. Credentials are now stripped from URIs before they appear in error messages. [#164881][#164881] +- Changefeed retry backoff now resets when the changefeed's resolved timestamp (high-water mark) advances between retries, in addition to the existing time-based reset (configured by `changefeed.retry_backoff_reset`). This prevents transient rolling restarts from causing changefeeds to fall behind because of excessive backoff. [#164933][#164933] - Fixed a rare race condition where `SHOW CREATE TABLE` could fail with a `"relation does not exist"` error if a table referenced by a foreign key was being concurrently dropped. [#164942][#164942] -- Fixes a bug that had previously allowed the primary and secondary regions to be in separate super regions. [#164943][#164943] +- Fixed a bug that had previously allowed the primary and secondary to be in separate super regions. [#164943][#164943] - Fixed a bug that could cause row sampling for table statistics to crash a node due to a data race when processing a collated string column with values larger than 400 bytes. This bug has existed since before v23.1. [#165260][#165260] -- The information_schema.crdb_node_active_session_history - and information_schema.crdb_cluster_active_session_history views now include - the app_name column, matching the underlying crdb_internal tables. - - Co-Authored-By: roachdev-claude [#165367][#165367] +- The `information_schema.crdb_node_active_session_history` and `information_schema.crdb_cluster_active_session_history` views now include the `app_name` column, matching the underlying `crdb_internal` tables. [#165367][#165367] -[#164433]: https://github.com/cockroachdb/cockroach/pull/164433 -[#164879]: https://github.com/cockroachdb/cockroach/pull/164879 +[#163378]: https://github.com/cockroachdb/cockroach/pull/163378 +[#164403]: https://github.com/cockroachdb/cockroach/pull/164403 +[#164909]: https://github.com/cockroachdb/cockroach/pull/164909 +[#164827]: https://github.com/cockroachdb/cockroach/pull/164827 [#163891]: https://github.com/cockroachdb/cockroach/pull/163891 -[#165093]: https://github.com/cockroachdb/cockroach/pull/165093 [#163866]: https://github.com/cockroachdb/cockroach/pull/163866 -[#164942]: https://github.com/cockroachdb/cockroach/pull/164942 -[#161763]: https://github.com/cockroachdb/cockroach/pull/161763 -[#164403]: https://github.com/cockroachdb/cockroach/pull/164403 -[#165227]: https://github.com/cockroachdb/cockroach/pull/165227 -[#164471]: https://github.com/cockroachdb/cockroach/pull/164471 -[#164874]: https://github.com/cockroachdb/cockroach/pull/164874 -[#165260]: https://github.com/cockroachdb/cockroach/pull/165260 -[#164664]: https://github.com/cockroachdb/cockroach/pull/164664 -[#164129]: https://github.com/cockroachdb/cockroach/pull/164129 -[#164449]: https://github.com/cockroachdb/cockroach/pull/164449 -[#164557]: https://github.com/cockroachdb/cockroach/pull/164557 -[#164881]: https://github.com/cockroachdb/cockroach/pull/164881 -[#164164]: https://github.com/cockroachdb/cockroach/pull/164164 -[#163230]: https://github.com/cockroachdb/cockroach/pull/163230 -[#158294]: https://github.com/cockroachdb/cockroach/pull/158294 [#164301]: https://github.com/cockroachdb/cockroach/pull/164301 +[#164433]: https://github.com/cockroachdb/cockroach/pull/164433 +[#164739]: https://github.com/cockroachdb/cockroach/pull/164739 [#164671]: https://github.com/cockroachdb/cockroach/pull/164671 -[#164765]: https://github.com/cockroachdb/cockroach/pull/164765 -[#165367]: https://github.com/cockroachdb/cockroach/pull/165367 -[#150663]: https://github.com/cockroachdb/cockroach/pull/150663 -[#164184]: https://github.com/cockroachdb/cockroach/pull/164184 -[#164969]: https://github.com/cockroachdb/cockroach/pull/164969 -[#164827]: https://github.com/cockroachdb/cockroach/pull/164827 -[#164757]: https://github.com/cockroachdb/cockroach/pull/164757 -[#164943]: https://github.com/cockroachdb/cockroach/pull/164943 [#163400]: https://github.com/cockroachdb/cockroach/pull/163400 [#163991]: https://github.com/cockroachdb/cockroach/pull/163991 +[#164164]: https://github.com/cockroachdb/cockroach/pull/164164 [#164444]: https://github.com/cockroachdb/cockroach/pull/164444 [#164672]: https://github.com/cockroachdb/cockroach/pull/164672 -[#164909]: https://github.com/cockroachdb/cockroach/pull/164909 [#165382]: https://github.com/cockroachdb/cockroach/pull/165382 -[#164739]: https://github.com/cockroachdb/cockroach/pull/164739 -[#164933]: https://github.com/cockroachdb/cockroach/pull/164933 +[#164557]: https://github.com/cockroachdb/cockroach/pull/164557 +[#164765]: https://github.com/cockroachdb/cockroach/pull/164765 +[#164874]: https://github.com/cockroachdb/cockroach/pull/164874 +[#164879]: https://github.com/cockroachdb/cockroach/pull/164879 +[#165260]: https://github.com/cockroachdb/cockroach/pull/165260 +[#164664]: https://github.com/cockroachdb/cockroach/pull/164664 +[#164184]: https://github.com/cockroachdb/cockroach/pull/164184 +[#164969]: https://github.com/cockroachdb/cockroach/pull/164969 +[#163230]: https://github.com/cockroachdb/cockroach/pull/163230 [#164468]: https://github.com/cockroachdb/cockroach/pull/164468 -[#163378]: https://github.com/cockroachdb/cockroach/pull/163378 +[#164129]: https://github.com/cockroachdb/cockroach/pull/164129 +[#164881]: https://github.com/cockroachdb/cockroach/pull/164881 +[#164933]: https://github.com/cockroachdb/cockroach/pull/164933 +[#164942]: https://github.com/cockroachdb/cockroach/pull/164942 +[#150663]: https://github.com/cockroachdb/cockroach/pull/150663 +[#161763]: https://github.com/cockroachdb/cockroach/pull/161763 +[#165367]: https://github.com/cockroachdb/cockroach/pull/165367 +[#164449]: https://github.com/cockroachdb/cockroach/pull/164449 +[#165227]: https://github.com/cockroachdb/cockroach/pull/165227 +[#165093]: https://github.com/cockroachdb/cockroach/pull/165093 +[#158294]: https://github.com/cockroachdb/cockroach/pull/158294 +[#164471]: https://github.com/cockroachdb/cockroach/pull/164471 +[#164757]: https://github.com/cockroachdb/cockroach/pull/164757 +[#164943]: https://github.com/cockroachdb/cockroach/pull/164943 From f65c7fee9cb472f6ea7867d3bc89d0c881defdab Mon Sep 17 00:00:00 2001 From: Automated Release Bot Date: Tue, 17 Mar 2026 22:21:43 +0000 Subject: [PATCH 13/16] Update release notes for v26.2-v26.2.0-alpha.2 From 9f3c920a6267d04928e6ad533cc4826c96bed0de Mon Sep 17 00:00:00 2001 From: Automated Release Bot Date: Tue, 17 Mar 2026 22:21:43 +0000 Subject: [PATCH 14/16] Update release notes for v26.2-v26.2.0-alpha.2 From b43bf28089e96e31b781472fd93bfb84e3fdc37e Mon Sep 17 00:00:00 2001 From: Automated Release Bot Date: Tue, 17 Mar 2026 22:21:44 +0000 Subject: [PATCH 15/16] Update release notes for v26.2-v26.2.0-alpha.2 --- .../releases/v26.2/v26.2.0-alpha.2.md | 62 +++++++++---------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/src/current/_includes/releases/v26.2/v26.2.0-alpha.2.md b/src/current/_includes/releases/v26.2/v26.2.0-alpha.2.md index 50f0535d13e..2fb1773cb56 100644 --- a/src/current/_includes/releases/v26.2/v26.2.0-alpha.2.md +++ b/src/current/_includes/releases/v26.2/v26.2.0-alpha.2.md @@ -35,9 +35,9 @@ Release Date: March 18, 2026

Operational changes

- The `bulkio.index_backfill.elastic_control.enabled` cluster setting is now enabled by default, allowing index backfill operations to integrate with elastic CPU control and automatically throttle based on available resources. [#163866][#163866] -- Promoted 9 admission control metrics to `Essential` status, making them more discoverable in monitoring dashboards and troubleshooting workflows: `admission.wait_durations.sql-kv-response`, `admission.wait_durations.sql-sql-response`, `admission.wait_durations.elastic-stores`, `admission.wait_durations.elastic-cpu`, `admission.granter.slots_exhausted_duration.kv`, `admission.granter.io_tokens_exhausted_duration.kv`, `admission.granter.elastic_io_tokens_exhausted_duration.kv`, `admission.elastic_cpu.nanos_exhausted_duration`, and `kvflowcontrol.send_queue.bytes`. These metrics track admission control wait times, resource exhaustion, and replication flow control, providing visibility into cluster health and performance throttling. [#164827][#164827] -- Added periodic ASH workload summary logging to the OPS channel. Two new cluster settings, `obs.ash.log_interval` (default 10m) and `obs.ash.log_top_n` (default 10), control how often and how many entries are emitted. Each summary reports the most frequently sampled workloads grouped by event type, event name, and workload ID, providing durable visibility into workload patterns that previously existed only in memory. [#165093][#165093] -- Users cannot run AOST queries on the reader virtual cluster, unless they set the `bypass_pcr_reader_catalog_aost` session variable. This session variable should not be used by default in the reader workload. It should only be used during investigation or for changing cluster settings specific to the reader virtual cluster. [#165382][#165382] +- Promoted the following admission control metrics to `ESSENTIAL` status, making them more discoverable in monitoring dashboards and troubleshooting workflows: `admission.wait_durations.*` (`sql-kv-response`, `sql-sql-response`, `elastic-stores`, `elastic-cpu`), `admission.granter.*_exhausted_duration.kv` (`slots`, `io_tokens`, `elastic_io_tokens`), `admission.elastic_cpu.nanos_exhausted_duration`, `kvflowcontrol.eval_wait.*.duration` (`elastic`, `regular`), and `kvflowcontrol.send_queue.bytes`. These metrics track admission control wait times, resource exhaustion, and replication flow control, providing visibility into cluster health and performance throttling. [#164827][#164827] +- Added periodic ASH workload summary logging to the `OPS` channel. Two new cluster settings, `obs.ash.log_interval` (default: `10m`) and `obs.ash.log_top_n` (default: `10`), control how often and how many entries are emitted. Each summary reports the most frequently sampled workloads grouped by event type, event name, and workload ID, providing visibility into workload patterns that previously existed only in memory. [#165093][#165093] +- Explicit `AS OF SYSTEM TIME` queries are no longer allowed on a Physical Cluster Replication (PCR) reader virtual cluster, unless the `bypass_pcr_reader_catalog_aost` session variable is set to `true`. This session variable should only be used during investigation or for changing cluster settings specific to the reader virtual cluster. [#165382][#165382]

Bug fixes

@@ -80,43 +80,43 @@ matching PostgreSQL behavior. [#164471][#164471] - The `information_schema.crdb_node_active_session_history` and `information_schema.crdb_cluster_active_session_history` views now include the `app_name` column, matching the underlying `crdb_internal` tables. [#165367][#165367] -[#163378]: https://github.com/cockroachdb/cockroach/pull/163378 -[#164403]: https://github.com/cockroachdb/cockroach/pull/164403 [#164909]: https://github.com/cockroachdb/cockroach/pull/164909 [#164827]: https://github.com/cockroachdb/cockroach/pull/164827 -[#163891]: https://github.com/cockroachdb/cockroach/pull/163891 -[#163866]: https://github.com/cockroachdb/cockroach/pull/163866 -[#164301]: https://github.com/cockroachdb/cockroach/pull/164301 +[#164765]: https://github.com/cockroachdb/cockroach/pull/164765 +[#164881]: https://github.com/cockroachdb/cockroach/pull/164881 +[#163378]: https://github.com/cockroachdb/cockroach/pull/163378 [#164433]: https://github.com/cockroachdb/cockroach/pull/164433 -[#164739]: https://github.com/cockroachdb/cockroach/pull/164739 -[#164671]: https://github.com/cockroachdb/cockroach/pull/164671 +[#165382]: https://github.com/cockroachdb/cockroach/pull/165382 +[#164449]: https://github.com/cockroachdb/cockroach/pull/164449 +[#164933]: https://github.com/cockroachdb/cockroach/pull/164933 +[#164943]: https://github.com/cockroachdb/cockroach/pull/164943 [#163400]: https://github.com/cockroachdb/cockroach/pull/163400 +[#163891]: https://github.com/cockroachdb/cockroach/pull/163891 [#163991]: https://github.com/cockroachdb/cockroach/pull/163991 +[#165093]: https://github.com/cockroachdb/cockroach/pull/165093 +[#164301]: https://github.com/cockroachdb/cockroach/pull/164301 +[#164739]: https://github.com/cockroachdb/cockroach/pull/164739 +[#164468]: https://github.com/cockroachdb/cockroach/pull/164468 +[#164403]: https://github.com/cockroachdb/cockroach/pull/164403 +[#165227]: https://github.com/cockroachdb/cockroach/pull/165227 +[#165367]: https://github.com/cockroachdb/cockroach/pull/165367 +[#150663]: https://github.com/cockroachdb/cockroach/pull/150663 +[#164129]: https://github.com/cockroachdb/cockroach/pull/164129 [#164164]: https://github.com/cockroachdb/cockroach/pull/164164 +[#164184]: https://github.com/cockroachdb/cockroach/pull/164184 [#164444]: https://github.com/cockroachdb/cockroach/pull/164444 -[#164672]: https://github.com/cockroachdb/cockroach/pull/164672 -[#165382]: https://github.com/cockroachdb/cockroach/pull/165382 -[#164557]: https://github.com/cockroachdb/cockroach/pull/164557 -[#164765]: https://github.com/cockroachdb/cockroach/pull/164765 -[#164874]: https://github.com/cockroachdb/cockroach/pull/164874 +[#163230]: https://github.com/cockroachdb/cockroach/pull/163230 [#164879]: https://github.com/cockroachdb/cockroach/pull/164879 -[#165260]: https://github.com/cockroachdb/cockroach/pull/165260 [#164664]: https://github.com/cockroachdb/cockroach/pull/164664 -[#164184]: https://github.com/cockroachdb/cockroach/pull/164184 -[#164969]: https://github.com/cockroachdb/cockroach/pull/164969 -[#163230]: https://github.com/cockroachdb/cockroach/pull/163230 -[#164468]: https://github.com/cockroachdb/cockroach/pull/164468 -[#164129]: https://github.com/cockroachdb/cockroach/pull/164129 -[#164881]: https://github.com/cockroachdb/cockroach/pull/164881 -[#164933]: https://github.com/cockroachdb/cockroach/pull/164933 +[#164671]: https://github.com/cockroachdb/cockroach/pull/164671 +[#164757]: https://github.com/cockroachdb/cockroach/pull/164757 [#164942]: https://github.com/cockroachdb/cockroach/pull/164942 -[#150663]: https://github.com/cockroachdb/cockroach/pull/150663 -[#161763]: https://github.com/cockroachdb/cockroach/pull/161763 -[#165367]: https://github.com/cockroachdb/cockroach/pull/165367 -[#164449]: https://github.com/cockroachdb/cockroach/pull/164449 -[#165227]: https://github.com/cockroachdb/cockroach/pull/165227 -[#165093]: https://github.com/cockroachdb/cockroach/pull/165093 +[#165260]: https://github.com/cockroachdb/cockroach/pull/165260 +[#164557]: https://github.com/cockroachdb/cockroach/pull/164557 +[#164672]: https://github.com/cockroachdb/cockroach/pull/164672 +[#164969]: https://github.com/cockroachdb/cockroach/pull/164969 +[#163866]: https://github.com/cockroachdb/cockroach/pull/163866 [#158294]: https://github.com/cockroachdb/cockroach/pull/158294 [#164471]: https://github.com/cockroachdb/cockroach/pull/164471 -[#164757]: https://github.com/cockroachdb/cockroach/pull/164757 -[#164943]: https://github.com/cockroachdb/cockroach/pull/164943 +[#164874]: https://github.com/cockroachdb/cockroach/pull/164874 +[#161763]: https://github.com/cockroachdb/cockroach/pull/161763 From f90a2ba35ccec49a0f217310e4434c17b538046a Mon Sep 17 00:00:00 2001 From: Ryan Kuo Date: Tue, 17 Mar 2026 18:45:12 -0400 Subject: [PATCH 16/16] reorder v26.2.0-alpha.2 release notes --- .../releases/v26.2/v26.2.0-alpha.2.md | 106 ++++++++---------- 1 file changed, 46 insertions(+), 60 deletions(-) diff --git a/src/current/_includes/releases/v26.2/v26.2.0-alpha.2.md b/src/current/_includes/releases/v26.2/v26.2.0-alpha.2.md index 2fb1773cb56..c0063430223 100644 --- a/src/current/_includes/releases/v26.2/v26.2.0-alpha.2.md +++ b/src/current/_includes/releases/v26.2/v26.2.0-alpha.2.md @@ -6,8 +6,13 @@ Release Date: March 18, 2026

Backward-incompatible changes

-- Lowered the default value of the `sql.guardrails.max_row_size_log` cluster setting from `64 MiB` to `16 MiB`, and the default value of `sql.guardrails.max_row_size_err` from `512 MiB` to `80 MiB`. These settings control the maximum size of a row (or column family) that SQL can write before logging a warning or returning an error, respectively. The previous defaults were high enough that large rows would hit other limits first (such as the Raft command size limit or the backup SST size limit), producing confusing errors. The new defaults align with existing system limits to provide clearer diagnostics. If your workload legitimately writes rows larger than these new defaults, you can restore the previous behavior by increasing these settings. [#164468][#164468] - When selecting from a view, the view owner's privileges on the underlying tables are now checked. Previously, no privilege checks were performed on the underlying tables, so a view would continue to work even after the owner lost access to the underlying tables. This also affects row-level security (RLS): the view owner's RLS policies are now enforced instead of the invoker's. If this causes issues, you can restore the previous behavior by setting the cluster setting `sql.auth.skip_underlying_view_privilege_checks.enabled` to `true`. [#164664][#164664] +- The `bulkio.index_backfill.elastic_control.enabled` cluster setting is now enabled by default, allowing index backfill operations to integrate with elastic CPU control and automatically throttle based on available resources. [#163866][#163866] +- Lowered the default value of the `sql.guardrails.max_row_size_log` cluster setting from `64 MiB` to `16 MiB`, and the default value of `sql.guardrails.max_row_size_err` from `512 MiB` to `80 MiB`. These settings control the maximum size of a row (or column family) that SQL can write before logging a warning or returning an error, respectively. The previous defaults were high enough that large rows would hit other limits first (such as the Raft command size limit or the backup SST size limit), producing confusing errors. The new defaults align with existing system limits to provide clearer diagnostics. If your workload legitimately writes rows larger than these new defaults, you can restore the previous behavior by increasing these settings. [#164468][#164468] +- Lowered the default value of the `changefeed.max_retry_backoff` cluster setting from `10m` to `30s` to reduce changefeed lag during rolling restarts. [#164874][#164874] +- Using `ALTER CHANGEFEED ADD ...` for a table that is already watched will now return an error: `target already watched by changefeed`. [#164433][#164433] +- Explicit `AS OF SYSTEM TIME` queries are no longer allowed on a Physical Cluster Replication (PCR) reader virtual cluster, unless the `bypass_pcr_reader_catalog_aost` session variable is set to `true`. This session variable should only be used during investigation or for changing cluster settings specific to the reader virtual cluster. [#165382][#165382] +- The `enable_super_regions` session variable and the `sql.defaults.super_regions.enabled` cluster setting are no longer required to use super regions. Super region DDL operations (`ADD`, `DROP`, and `ALTER SUPER REGION`) now work without any experimental flag. The session variable and cluster setting are deprecated, and existing scripts that set them will continue to work without error. [#165227][#165227]

Security updates

@@ -16,28 +21,26 @@ Release Date: March 18, 2026

SQL language changes

-- Added the `ST_AsMVT` aggregate function to generate Mapbox Vector Tile (MVT) binary format from geospatial data, providing PostgreSQL/PostGIS compatibility for web mapping applications. [#150663][#150663] -- `ALTER TABLE ... SET LOCALITY` is now fully executed using the declarative schema changer, improving reliability and consistency with other schema change operations. [#161763][#161763] +- CockroachDB now supports `COMMIT AND CHAIN` and `ROLLBACK AND CHAIN` (as well as `END AND CHAIN` and `ABORT AND CHAIN`). These statements finish the current transaction and immediately start a new explicit transaction with the same isolation level, priority, and read/write mode as the previous transaction. `AND NO CHAIN` is also accepted for PostgreSQL compatibility but behaves identically to a plain `COMMIT` or `ROLLBACK`. [#164403][#164403] +- `RESTORE TABLE/DATABASE` now supports the `WITH GRANTS` option, which restores grants on restore targets for users in the restoring cluster. Note that using this option with `new_db_name` will cause the new database to inherit the privileges in the backed-up database. [#164444][#164444] +- Added support for a new statement hint used to change session variable values for the duration of a single statement without application changes. The new hint type can be created using the `information_schema.crdb_set_session_variable_hint` built-in function. The override applies only when executing a statement matching the given fingerprint and does not persist on the session or surrounding transaction. [#164909][#164909] - Added an index storage parameter `skip_unique_checks` that can be used to disable unique constraint checks for indexes with implicit partition columns, including indexes in `REGIONAL BY ROW` tables. This should **only** be used if the application can guarantee uniqueness, for example, by using external UUID values or relying on a `unique_rowid()` default value. Incorrectly applying this setting when uniqueness is not guaranteed by the application could result in logically duplicate keys in different partitions of a unique index. [#163378][#163378] +- Views now support the PostgreSQL-compatible `security_invoker` option. When set via `CREATE VIEW ... WITH (security_invoker)` or `ALTER VIEW SET (security_invoker = true)`, privilege checks on the underlying tables are performed as the querying user rather than the view owner. The `security_invoker` option can be reset with `ALTER VIEW ... RESET (security_invoker)`. [#164184][#164184] +- Added the `ST_AsMVT` aggregate function to generate Mapbox Vector Tile (MVT) binary format from geospatial data, providing PostgreSQL/PostGIS compatibility for web mapping applications. [#150663][#150663] - Introduced the `information_schema.crdb_delete_statement_hints` built-in function, which accepts 2 kinds of payload: `row_id` (int): the primary key of `system.statement_hints`; `fingerprint` (string). The function returns the number of rows deleted. [#163891][#163891] +- Added `to_date(text, text)` and `to_timestamp(text, text)` SQL functions that parse dates and timestamps from formatted strings using PostgreSQL-compatible format patterns. For example, `to_date('2023-03-15', 'YYYY-MM-DD')` returns a date, and `to_timestamp('2023-03-15 14:30:45', 'YYYY-MM-DD HH24:MI:SS')` returns a `timestamptz`. [#164672][#164672] +- Added PostgreSQL-compatible numeric formatting functions `to_char(int, text)`, `to_char(float, text)`, `to_char(numeric, text)`, and `to_number(text, text)`. These functions format numbers as strings and parse formatted strings back to numbers using the PostgreSQL formatting syntax. [#164672][#164672] - Added support for importing Parquet files using the `IMPORT` statement. Parquet files can be imported from cloud storage URLs (`s3://`, `gs://`, `azure://`) or HTTP servers that support range requests (`Accept-Ranges: bytes`). This feature supports column-level compression formats (Snappy, GZIP, ZSTD, Brotli, etc.) as specified in the Parquet file format, but does not support additional file-level compression (e.g., `.parquet.gz` files). Nested Parquet types (lists, maps, structs) are not supported; only flat schemas with primitive types are supported at this time. [#163991][#163991] - CockroachDB now includes `information_schema.crdb_rewrite_inline_hints` statements in the `schema.sql` file of a statement diagnostics bundle for re-creating all the statement hints bound to the statement. The hint recreation statements are sorted in ascending order of the original hint creation time. [#164164][#164164] -- Views now support the PostgreSQL-compatible `security_invoker` option. When set via `CREATE VIEW ... WITH (security_invoker)` or `ALTER VIEW SET (security_invoker = true)`, privilege checks on the underlying tables are performed as the querying user rather than the view owner. The `security_invoker` option can be reset with `ALTER VIEW ... RESET (security_invoker)`. [#164184][#164184] -- CockroachDB now supports `COMMIT AND CHAIN` and `ROLLBACK AND CHAIN` (as well as `END AND CHAIN` and `ABORT AND CHAIN`). These statements finish the current transaction and immediately start a new explicit transaction with the same isolation level, priority, and read/write mode as the previous transaction. `AND NO CHAIN` is also accepted for PostgreSQL compatibility but behaves identically to a plain `COMMIT` or `ROLLBACK`. [#164403][#164403] -- `RESTORE TABLE/DATABASE` now supports the `WITH GRANTS` option, which restores grants on restore targets for users in the restoring cluster. Note that using this option with `new_db_name` will cause the new database to inherit the privileges in the backed-up database. [#164444][#164444] +- `ALTER TABLE ... SET LOCALITY` is now fully executed using the declarative schema changer, improving reliability and consistency with other schema change operations. [#161763][#161763] - During an `INSPECT` run, a new check validates unique column values in `REGIONAL BY ROW` tables. [#164449][#164449] -- Added `to_date(text, text)` and `to_timestamp(text, text)` SQL functions that parse dates and timestamps from formatted strings using PostgreSQL-compatible format patterns. For example, `to_date('2023-03-15', 'YYYY-MM-DD')` returns a date, and `to_timestamp('2023-03-15 14:30:45', 'YYYY-MM-DD HH24:MI:SS')` returns a `timestamptz`. [#164672][#164672] -- Added PostgreSQL-compatible numeric formatting functions `to_char(int, text)`, `to_char(float, text)`, `to_char(numeric, text)`, and `to_number(text, text)`. These functions format numbers as strings and parse formatted strings back to numbers using the PostgreSQL formatting syntax. [#164672][#164672] -- Added support for a new statement hint used to change session variable values for the duration of a single statement without application changes. The new hint type can be created using the `information_schema.crdb_set_session_variable_hint` built-in function. The override applies only when executing a statement matching the given fingerprint and does not persist on the session or surrounding transaction. [#164909][#164909] - Active Session History tables are now accessible via `information_schema.crdb_node_active_session_history` and `information_schema.crdb_cluster_active_session_history`, in addition to the existing `crdb_internal` tables. This improves discoverability when browsing `information_schema` for available metadata. [#164969][#164969] -- The `enable_super_regions` session variable and the `sql.defaults.super_regions.enabled` cluster setting are no longer required to use super regions. Super region DDL operations (`ADD`, `DROP`, and `ALTER SUPER REGION`) now work without any experimental flag. The session variable and cluster setting are deprecated, and existing scripts that set them will continue to work without error. [#165227][#165227]

Operational changes

-- The `bulkio.index_backfill.elastic_control.enabled` cluster setting is now enabled by default, allowing index backfill operations to integrate with elastic CPU control and automatically throttle based on available resources. [#163866][#163866] - Promoted the following admission control metrics to `ESSENTIAL` status, making them more discoverable in monitoring dashboards and troubleshooting workflows: `admission.wait_durations.*` (`sql-kv-response`, `sql-sql-response`, `elastic-stores`, `elastic-cpu`), `admission.granter.*_exhausted_duration.kv` (`slots`, `io_tokens`, `elastic_io_tokens`), `admission.elastic_cpu.nanos_exhausted_duration`, `kvflowcontrol.eval_wait.*.duration` (`elastic`, `regular`), and `kvflowcontrol.send_queue.bytes`. These metrics track admission control wait times, resource exhaustion, and replication flow control, providing visibility into cluster health and performance throttling. [#164827][#164827] - Added periodic ASH workload summary logging to the `OPS` channel. Two new cluster settings, `obs.ash.log_interval` (default: `10m`) and `obs.ash.log_top_n` (default: `10`), control how often and how many entries are emitted. Each summary reports the most frequently sampled workloads grouped by event type, event name, and workload ID, providing visibility into workload patterns that previously existed only in memory. [#165093][#165093] -- Explicit `AS OF SYSTEM TIME` queries are no longer allowed on a Physical Cluster Replication (PCR) reader virtual cluster, unless the `bypass_pcr_reader_catalog_aost` session variable is set to `true`. This session variable should only be used during investigation or for changing cluster settings specific to the reader virtual cluster. [#165382][#165382] +- Previously, altering a changefeed to add a table with an initial scan during a schema change backfill, or while the changefeed had lagging ranges, would sometimes be rejected. This is no longer the case. [#164433][#164433]

Bug fixes

@@ -46,31 +49,14 @@ Release Date: March 18, 2026 - Fixed a bug that caused `ALTER INDEX ... PARTITION BY` statements to fail on a nonexistent index even if `IF EXISTS` was used. [#163378][#163378] - Fixed a bug where incremental backups taken after downgrading a mixed-version cluster to v25.4 could result in inconsistent backup indexes. [#164301][#164301] - Altering a non-scan-only changefeed to add a target with `initial_scan='only'` now returns an error instead of not doing a scan and adding the target to the watched targets list. [#164433][#164433] -- A bug where adding a target without - an initial scan, dropping that same target, and then adding - it again with an initial scan would result in the target being - added without an initial scan has now been fixed. - - Release note (bug fix): A bug where adding a target without - an initial scan could cause events to be sent again for all - targets as of the original statement time has been fixed. - - Release note (ops change): Previously, altering a changefeed to add a table - with an initial scan during a schema change backfill or while the changefeed - had lagging ranges would sometimes be rejected. This is no longer the case. - - Release note (backward-incompatible change): Using `ALTER CHANGEFEED - ADD ...` for a table that is already watched will now return an error. [#164433][#164433] -- Fixed a bug where creating a table with a user-defined type column failed -when the user had USAGE privilege on the base type but not on its implicit -array type. The array type now inherits privileges from the base type, -matching PostgreSQL behavior. [#164471][#164471] +- Fixed a bug where adding a target without an initial scan, dropping that same target, and then adding it again with an initial scan would result in the target being added without an initial scan. [#164433][#164433] +- Fixed a bug where altering a changefeed to add a table with an initial scan during a schema change backfill or while the changefeed had lagging ranges would sometimes be rejected. [#164433][#164433] +- Fixed a bug where creating a table with a user-defined type column failed when the user had `USAGE` privilege on the base type but not on its implicit array type. The array type now inherits privileges from the base type, matching PostgreSQL behavior. [#164471][#164471] - `ALTER TABLE ... ALTER PRIMARY KEY USING COLUMNS (col) USING HASH` is now correctly treated as a no-op when the table already has a matching hash-sharded primary key, instead of attempting an unnecessary schema change. [#164557][#164557] - Fixed a bug in `appBatchStats.merge` where the `numEmptyEntries` field was not being properly accumulated when merging statistics. This could result in incorrect statistics tracking for empty Raft log entries. [#164671][#164671] - Fixed a bug where `ALTER TABLE ... ALTER COLUMN ... SET DATA TYPE` from an unbounded string or bit type to a bounded type with a length `>= 64` (for example, `STRING` to `STRING(100)`) would skip validating existing data against the new length constraint. This could leave rows in the table that violate the column's type, with values longer than the specified limit. [#164739][#164739] - Fixed a bug where `RESTORE` with `skip_missing_foreign_keys` could fail with an internal error if the restored table had an in-progress schema change that added a foreign key constraint whose referenced table was not included in the restore. [#164757][#164757] - Fixed a bug introduced in v25.4+ where setting `min_checkpoint_frequency` to `0` prevented changefeeds from advancing their resolved timestamp (high-water mark) and emitting resolved messages. Note that setting `min_checkpoint_frequency` to lower than `500ms` is **not** recommended as it may cause degraded changefeed performance. [#164765][#164765] -- Lowered the default value of the `changefeed.max_retry_backoff` cluster setting from `10m` to `30s` to reduce changefeed lag during rolling restarts. [#164874][#164874] - Fixed a bug where CockroachDB did not always promptly respond to the statement timeout when performing a hash join with `ON` filter that is mostly `false`. [#164879][#164879] - Fixed a bug where `IMPORT` error messages could include unredacted cloud storage credentials from the source URI. Credentials are now stripped from URIs before they appear in error messages. [#164881][#164881] - Changefeed retry backoff now resets when the changefeed's resolved timestamp (high-water mark) advances between retries, in addition to the existing time-based reset (configured by `changefeed.retry_backoff_reset`). This prevents transient rolling restarts from causing changefeeds to fall behind because of excessive backoff. [#164933][#164933] @@ -80,43 +66,43 @@ matching PostgreSQL behavior. [#164471][#164471] - The `information_schema.crdb_node_active_session_history` and `information_schema.crdb_cluster_active_session_history` views now include the `app_name` column, matching the underlying `crdb_internal` tables. [#165367][#165367] +[#163378]: https://github.com/cockroachdb/cockroach/pull/163378 +[#164403]: https://github.com/cockroachdb/cockroach/pull/164403 [#164909]: https://github.com/cockroachdb/cockroach/pull/164909 [#164827]: https://github.com/cockroachdb/cockroach/pull/164827 -[#164765]: https://github.com/cockroachdb/cockroach/pull/164765 -[#164881]: https://github.com/cockroachdb/cockroach/pull/164881 -[#163378]: https://github.com/cockroachdb/cockroach/pull/163378 -[#164433]: https://github.com/cockroachdb/cockroach/pull/164433 -[#165382]: https://github.com/cockroachdb/cockroach/pull/165382 -[#164449]: https://github.com/cockroachdb/cockroach/pull/164449 -[#164933]: https://github.com/cockroachdb/cockroach/pull/164933 -[#164943]: https://github.com/cockroachdb/cockroach/pull/164943 -[#163400]: https://github.com/cockroachdb/cockroach/pull/163400 [#163891]: https://github.com/cockroachdb/cockroach/pull/163891 -[#163991]: https://github.com/cockroachdb/cockroach/pull/163991 -[#165093]: https://github.com/cockroachdb/cockroach/pull/165093 +[#163866]: https://github.com/cockroachdb/cockroach/pull/163866 [#164301]: https://github.com/cockroachdb/cockroach/pull/164301 +[#164433]: https://github.com/cockroachdb/cockroach/pull/164433 [#164739]: https://github.com/cockroachdb/cockroach/pull/164739 -[#164468]: https://github.com/cockroachdb/cockroach/pull/164468 -[#164403]: https://github.com/cockroachdb/cockroach/pull/164403 -[#165227]: https://github.com/cockroachdb/cockroach/pull/165227 -[#165367]: https://github.com/cockroachdb/cockroach/pull/165367 -[#150663]: https://github.com/cockroachdb/cockroach/pull/150663 -[#164129]: https://github.com/cockroachdb/cockroach/pull/164129 +[#164671]: https://github.com/cockroachdb/cockroach/pull/164671 +[#163400]: https://github.com/cockroachdb/cockroach/pull/163400 +[#163991]: https://github.com/cockroachdb/cockroach/pull/163991 [#164164]: https://github.com/cockroachdb/cockroach/pull/164164 -[#164184]: https://github.com/cockroachdb/cockroach/pull/164184 [#164444]: https://github.com/cockroachdb/cockroach/pull/164444 -[#163230]: https://github.com/cockroachdb/cockroach/pull/163230 +[#164672]: https://github.com/cockroachdb/cockroach/pull/164672 +[#165382]: https://github.com/cockroachdb/cockroach/pull/165382 +[#164557]: https://github.com/cockroachdb/cockroach/pull/164557 +[#164765]: https://github.com/cockroachdb/cockroach/pull/164765 +[#164874]: https://github.com/cockroachdb/cockroach/pull/164874 [#164879]: https://github.com/cockroachdb/cockroach/pull/164879 -[#164664]: https://github.com/cockroachdb/cockroach/pull/164664 -[#164671]: https://github.com/cockroachdb/cockroach/pull/164671 -[#164757]: https://github.com/cockroachdb/cockroach/pull/164757 -[#164942]: https://github.com/cockroachdb/cockroach/pull/164942 [#165260]: https://github.com/cockroachdb/cockroach/pull/165260 -[#164557]: https://github.com/cockroachdb/cockroach/pull/164557 -[#164672]: https://github.com/cockroachdb/cockroach/pull/164672 +[#164664]: https://github.com/cockroachdb/cockroach/pull/164664 +[#164184]: https://github.com/cockroachdb/cockroach/pull/164184 [#164969]: https://github.com/cockroachdb/cockroach/pull/164969 -[#163866]: https://github.com/cockroachdb/cockroach/pull/163866 +[#163230]: https://github.com/cockroachdb/cockroach/pull/163230 +[#164468]: https://github.com/cockroachdb/cockroach/pull/164468 +[#164129]: https://github.com/cockroachdb/cockroach/pull/164129 +[#164881]: https://github.com/cockroachdb/cockroach/pull/164881 +[#164933]: https://github.com/cockroachdb/cockroach/pull/164933 +[#164942]: https://github.com/cockroachdb/cockroach/pull/164942 +[#150663]: https://github.com/cockroachdb/cockroach/pull/150663 +[#161763]: https://github.com/cockroachdb/cockroach/pull/161763 +[#165367]: https://github.com/cockroachdb/cockroach/pull/165367 +[#164449]: https://github.com/cockroachdb/cockroach/pull/164449 +[#165227]: https://github.com/cockroachdb/cockroach/pull/165227 +[#165093]: https://github.com/cockroachdb/cockroach/pull/165093 [#158294]: https://github.com/cockroachdb/cockroach/pull/158294 [#164471]: https://github.com/cockroachdb/cockroach/pull/164471 -[#164874]: https://github.com/cockroachdb/cockroach/pull/164874 -[#161763]: https://github.com/cockroachdb/cockroach/pull/161763 +[#164757]: https://github.com/cockroachdb/cockroach/pull/164757 +[#164943]: https://github.com/cockroachdb/cockroach/pull/164943