Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 28 additions & 1 deletion src/current/_data/releases.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10893,4 +10893,31 @@
docker_arm: true
docker_arm_experimental: false
docker_arm_limited_access: false
source: true
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: 0280f21d74b62396eade9329c49b4aca13e9f312
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
2 changes: 1 addition & 1 deletion src/current/_data/versions.csv
Original file line number Diff line number Diff line change
Expand Up @@ -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
108 changes: 108 additions & 0 deletions src/current/_includes/releases/v26.2/v26.2.0-alpha.2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
## v26.2.0-alpha.2

Release Date: March 18, 2026

{% include releases/new-release-downloads-docker-image.md release=include.release %}

<h3 id="v26-2-0-alpha-2-backward-incompatible-changes">Backward-incompatible changes</h3>

- 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]

<h3 id="v26-2-0-alpha-2-security-updates">Security updates</h3>

- 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]

<h3 id="v26-2-0-alpha-2-sql-language-changes">SQL language changes</h3>

- 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]
- `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]
- 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]

<h3 id="v26-2-0-alpha-2-operational-changes">Operational changes</h3>

- 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]
- 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]

<h3 id="v26-2-0-alpha-2-bug-fixes">Bug fixes</h3>

- 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]
- 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]
- 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]
- 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. [#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
[#164433]: https://github.com/cockroachdb/cockroach/pull/164433
[#164739]: https://github.com/cockroachdb/cockroach/pull/164739
[#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
[#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
[#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
[#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
Loading