From fbeaced8a1244eee0fa19f12a2c4d79622e23cd6 Mon Sep 17 00:00:00 2001 From: Rich Loveland Date: Thu, 13 Aug 2020 16:46:26 -0400 Subject: [PATCH] Add release notes for v20.2.0-alpha.3 Fixes #7976. --- releases/v20.2.0-alpha.3.md | 554 ++++++++++++++++++++++++++++++++++++ 1 file changed, 554 insertions(+) create mode 100644 releases/v20.2.0-alpha.3.md diff --git a/releases/v20.2.0-alpha.3.md b/releases/v20.2.0-alpha.3.md new file mode 100644 index 00000000000..7741a61ee5b --- /dev/null +++ b/releases/v20.2.0-alpha.3.md @@ -0,0 +1,554 @@ +--- +title: What's New in v20.2.0-alpha.3 +toc: true +summary: Additions and changes in CockroachDB version v20.2.0-alpha.3 since version v20.2.0-alpha.2 +--- + +## August 21, 2020 + +Get future release notes emailed to you: + +
+ +
+ +### Downloads + +
+ + + + +
+ +### Docker image + +{% include copy-clipboard.html %} +~~~shell +$ docker pull cockroachdb/cockroach-unstable:v20.2.0-alpha.3 +~~~ + +### Backward-incompatible changes + +- A CockroachDB node started with [`cockroach start`](../v20.2/cockroach-start.html) without the `--join` flag no longer automatically initializes the cluster. The `cockroach init` command is now mandatory. The auto-initialization behavior had been deprecated in version 19.2. [#51245][#51245] +- Clusters running alphas of 20.2 that use `ENUM` types will not be able to upgrade to betas or major releases of 20.2 due to internal representation changes. [#52483][#52483] +- Improved `WITH` option parsing for [`RESTORE`](../v20.2/restore.html). Does not allow the same option to be specified twice, and also prevents usage of quoted option names. [#52302][#52302] +- The file names for heap profile dumps now use the naming scheme `memprof..`, where previously they were named `memprof..`. [#50446][#50446] + +### General changes + +- [`cockroach node recommission`](../v20.2/remove-nodes.html#recommission-nodes) has new semantics. Previously it was able to recommission any decommissioning node, regardless of how long ago its was decommissioned, or removed from the cluster. Now `cockroach node recommission` serves to only cancel an accidental inflight decommissioning process that wasn't finalized. [#50329][#50329] +- CPU profiles are now taken as part of the [`cockroach debug zip`](../v20.2/cockroach-debug-zip.html) command. [#50625][#50625] +- CPU profiles taken from CockroachDB servers now contain more profiler labels related to ongoing SQL processing. [#50625][#50625] +- The [CockroachDB tarballs](#downloads) now include the `libgeos` and `libgeos_c` static libraries, which are required to be copied to `/usr/local/lib/cockroach` for UNIX/MacOS systems to [perform certain geospatial operations](../v20.2/spatial-data.html). The Windows location will be finalized at a later date. This location is configurable with the `--geo-libs` flag to `cockroach start`. [#51108][#51108] +- The Docker container that ships with CockroachDB now includes the [GEOS](../v20.2/spatial-glossary.html#geos) library needed for geospatial functionality in `/usr/local/lib/cockroach` (which is the default location where the `cockroach` binary looks for the GEOS libraries). [#51392][#51392] +- [Timestamp](../v20.2/timestamp.html) functions are now supported by [`IMPORT INTO`](../v20.2/import-into.html). [#51390][#51390] +- [`IMPORT INTO`](../v20.2/import-into.html) now supports `unique_rowid()` as a default expression. [#50922][#50922] +- Previously, CockroachDB would spam its logs when undergoing network connectivity issues. This patch reduces the frequency of said spam. [#51937][#51937] +- Reverted the Go version back to 1.13. [#52348][#52348] + +### Enterprise edition changes + +- [`RESTORE`](../v20.2/restore.html) has a new option `skip_missing_sequence_owners` that must be supplied when restoring only the table/sequence that was previously a sequence owner/owned by a table. Additionally, this fixes a bug where ownership relationships would not be remapped after a `RESTORE`. [#50949][#50949] +- Disabled the use of [`IMPORT`](../v20.2/import.html) with user defined types. Users should use [`IMPORT INTO`](../v20.2/import-into.html) instead. [#51149][#51149] +- Added support for `BACKUP TENANT` and `RESTORE TENANT`. [#50967][#50967] +- Implemented a `CREATE SCHEDULE FOR BACKUP` statement which allows the creation of periodic backup schedules. [#51308][#51308] +- Implemented schedule control statements to pause, resume, or delete scheduled jobs. [#51896][#51896] +- Added support for user-defined schemas in the `IMPORT` and `IMPORT INTO` statements. [#51936][#51936] +- Added a `FOR SCHEDULES` clause to the job control statements to enable management of the jobs created by schedules. [#52038][#52038] +- The `SHOW SCHEDULES` statement now displays information about the scheduled jobs. [#52230][#52230] +- Added the ability to display jobs started by a specified schedule. [#52274][#52274] +- Added a `BACKUP ... INTO` alternative to `BACKUP TO` which automatically picks a new path within the destination. [#52329][#52329] +- The [`BACKUP`](../v20.2/backup.html) statement now takes priority over other transactions if its initial attempts to export a range fail. [#51624][#51624] +- Exported CSV files are now prepended with a long unique ID. This can help to mitigate situations where multiple export runs are written to the same directory, resulting in mixed data. This change does not prevent mixed data; rather, it makes it possible to identify files from distinct runs, so that an operator can clean up. [#52547][#52547] +- Updated `IMPORT` so that it cannot be used to create tables in user-defined schemas. Users should instead create the table with `CREATE TABLE` and then use `IMPORT INTO`. [#52729][#52729] +- The [`RESTORE`](../v20.2/restore.html) statement can now run in "detached" mode. That is, instead of waiting for the `RESTORE` job to finish, the job ID is returned immediately, and the job itself runs in the background. [#52779][#52779] +- Enabled [`BACKUP`](../v20.2/backup.html) and [`RESTORE`](../v20.2/restore.html) when user-defined schemas are in use. [#52588][#52588] + +### SQL language changes + +#### General SQL updates + +- Added support for materialized views. [#52530][#52530] +- Indexes are no longer required on the origin side of a [foreign key relationship](../v20.2/foreign-key.html), and are no longer automatically created. [#50771][#50771] +- Added a `CREATE SCHEDULE FOR BACKUP` statement. This statement can be used to specify a recurring backup schedule. [#50631][#50631] +- Removed the `SYMVAR` modifier to [`EXPLAIN (PLAN)`](../v20.2/explain.html). [#51349][#51349] +- The [vectorized engine](../v20.2/vectorized-execution.html) now supports the aggregate function `concat_agg`. [#51148][#51148] +- Disallowed row-level locking in `READ-ONLY` transactions to be consistent with Postgres behavior. [#51335][#51335] +- Implemented the `datetime_precision` column in the `information_schema.columns` table for time-stored values. [#51352][#51352] +- The `sql.log.slow_query.latency_threshold` cluster setting now requires an explicit unit when being set. (e.g.. 500ms for 500 milliseconds, 5us for 5 nanoseconds, 5s for 5 seconds etc). An error with a hint pops up if the user fails to provide units. [#50632][#50632] +- Added a deprecation notice for the use of [`ALTER TABLE .. RENAME`](../v20.2/alter-table.html) with a qualified name. [#51433][#51433] +- Disabled using [`ALTER TABLE .. RENAME`](../v20.2/alter-table.html) to change the schema of a table. [#51433][#51433] +- Unqualified names in the target of [`ALTER TABLE ... RENAME`](../v20.2/alter-table.html) are now treated as having the same database and schema as the table being renamed. [#51433][#51433] +- Interleaved table joins now show up in [`EXPLAIN (PLAN)`](../v20.2/explain.html) output. [#51469][#51469] +- The `pg_catalog.pg_attribute` table now contains the columns `attidentity` (unimplemented) and `attgenerated` (implemented, 's' for computed/generated columns). [#51466][#51466] +- Made a minor change to remove the outdated CCL-only message from the [`GRANT`](../v20.2/grant-roles.html) and [`REVOKE ROLE`](../v20.2/revoke-roles.html) help messages. [#51465][#51465] +- Added the `num_nulls` and `num_nonnulls` builtin functions, which count the number of arguments that are passed to them which are _NULL_ or non-_NULL_, respectively. [#51515][#51515] +- `EXPLAIN (PLAN)` now shows any filter on a scan as a separate `filter` node. [#51493][#51493] +- Added the `stddev_pop` and `var_pop` aggregate functions for population standard deviation and variance calculations. [#51447][#51447] +- Added support for the `idle_in_session_timeout` variable to allow automatically terminating [sessions](../v20.2/show-sessions.html) that idle past a certain threshold. [#51223][#51223] +- Added the cluster setting `sql.defaults.idle_in_session_timeout` for setting a default `idle_in_session_timeout` value for new sessions. This gives users the ability to set `idle_in_session_timeout` values for all newly created sessions. [#51223][#51223] +- Added support for renaming a value of an `ENUM` using the `ALTER TYPE RENAME VALUE TO ` syntax. [#51490][#51490] +- Exposed the MVCC timestamp of each row as a system column on the table. This column is named `crdb_internal_mvcc_timestamp` and is accessible only in a limited set of contexts. [#51494][#51494] +- Transactions that have modified or created a type will execute queries on the local node, rather than distributing the queries to other nodes in the cluster. [#51784][#51784] +- Casting [`TIMESTAMP`](../v20.2/timestamp.html) types to `TEXT`-related types now omits the timezone component. For example, `'2001-12-15 15:14:13'::TIMESTAMP` will now format as `'2001-12-15 15:14:13'` instead of `'2001-12-15 15:14:13+00:00'`. [#51692][#51692] +- Added the builtin function `crdb_internal.approximate_timestamp` to convert the `DECIMAL` returned from the `crdb_internal_mvcc_timestamp` system column into a [`TIMESTAMP`](../v20.2/timestamp.html). [#51662][#51662] +- [`EXPLAIN`](../v20.2/explain.html) no longer shows the "hidden" annotation for columns. [#51837][#51837] +- Previously, matching with `LIKE` supported the "prefix" notation `match(test%)` and "suffix" notation `match(%test)` This commit adds the "contains" notation `match(%test%)`. [#51636][#51636] +- Dropping a column always drops all indexes that index the column. It is no longer necessary to provide the `CASCADE` option to [`DROP COLUMN`](../v20.2/drop-column.html). [#51661][#51661] +- The [`SHOW CREATE`](../v20.2/show-create.html) statement now contains the schema of a table in the `CREATE` statement. [#50889][#50889] +- The [`EXPORT`](../v20.2/export.html) statement no longer requires an enterprise license. [#52029][#52029] +- `EXPLAIN (DISTSQL)` diagrams have been updated by switching table name with index name (previously, we had the syntax `index@table`, and now we have `table@index`). [#52085][#52085] +- The 'bytes' and 'rows read' metrics are now tracked with mean and variance, similar to the other per-statement metrics. `crdb_internal.node_statement_statistics` has been updated to remove the `bytes_read` and `rows_read` columns, replacing them with `bytes_read_avg`, `bytes_read_var`, `rows_read_avg`, and `rows_read_var`. [#51630][#51630] +- Added cosmetic improvements to [`EXPLAIN`](../v20.2/explain.html) node naming. [#52195][#52195] +- Added support for `ALTER TABLE/SEQUENCE/VIEW SET SCHEMA` to set the schema of the table to the target schema. One must have `DROP` privileges on the table and `CREATE` privileges on the schema to perform the operation. [#52090][#52090] +- Added support for the setting and getting of the `synchronous_commit` and `enable_seqscan` variables, which do not affect any performance characteristics. These are no-ops enabled to allow certain tools to work. [#52168][#52168] +- [`EXPLAIN`](../v20.2/explain.html) no longer shows grouping columns as "aggregations" for the group operator. [#52232][#52232] +- It's now possible to specify a KMS URI or a list of KMS URIs to encrypt [`BACKUP`](../v20.2/backup.html) data/manifests with by passing the `KMS_URI` option to `BACKUP`. [#52091][#52091] +- Query statistics now include the disk bytes and rows read from lookup and index [joins](../v20.2/joins.html), in addition to ordinary table scans. [#52237][#52237] +- The value of `pg_class.atttypmod` and the TypeModifier in the RowDescription for array columns is now the same as the type modifier of the type of the array contents. This enhances compatibility with the Postgres wire protocol. [#52428][#52428] +- Added support for `ALTER TABLE ... ALTER COLUMN ... SET NULL` syntax for [`IMPORT PGDUMP`](../v20.2/import.html#import-a-postgres-database-dump) type backups. [#52442][#52442] +- Added a hint for `"line too long"` errors when importing a backup with long lines. [#52432][#52432] +- Added "ownership" concept objects. Objects must now have an owner; all objects that do not have owners currently will have `admin` set as the default owner except system objects. System objects without owners will have `node` as their owner. By default, owners are the creator of the object. Owners have all privileges to the objects they own. Similarly, any [roles](../v20.2/authorization.html#create-and-manage-roles) that are members of the owner role also have all privileges on the object. Roles cannot be dropped if they own objects. This PR does not add support for changing the ownership of objects; that will be added in a future PR to support dropping roles. [#51856][#51856] +- When using [`IMPORT PGDUMP`](../v20.2/import.html#import-a-postgres-database-dump) with [`INSERT INTO`](../v20.2/insert.html) clauses, specifying a column name that is case sensitive (e.g. `"cApItAls"`) would previously error specifying the column name was not found. This has been fixed. [#52485][#52485] +- Added the `pg_get_serial_sequence` builtin function. [#52436][#52436] +- Added support for the `ALTER TYPE SET SCHEMA` command to set the schema of a user-defined type. The user must have `CREATE` privileges on the schema and `DROP` privileges on the type to set the schema. [#52301][#52301] +- Added a new statement `SHOW ENUMS` which displays information on existing enums. [#52538][#52538] +- Added support for the `BINARY` format for `COPY FROM`. [#51890][#51890] +- Previously, [`IMPORT PGDUMP`](../v20.2/import.html#import-a-postgres-database-dump) using `COPY` required all rows to be present in the same order as the table definition. This restriction has been removed. [#52488][#52488] +- Added a notice that is displayed to the user when she tries to add a value which already exists in an `ENUM`. [#52534][#52534] +- Modified [`SHOW TABLES`](../v20.2/show-tables.html) to return estimates of the number of rows in each table. The new column's name is `estimated_row_count`. The number of rows is taken from the `system.table_statistics` table (via `crdb_internal.table_row_statistics`, which shows only tables accessible to the current user). [#52203][#52203] +- Implemented the `regexp_split_to_table` and `regexp_split_to_array` builtin functions. [#52479][#52479] +- Added support for the `CREATE UNLOGGED TABLE` syntax to be parsed and recorded internally by CockroachDB. However, this syntax does not modify the behavior of the table. [#52596][#52596] +- Added support for the use of `CREATE INDEX ... WITH ...` syntax. [#52640][#52640] +- `"no inbound stream connection"` errors should happen less frequently due to the addition of connection retries. [#52624][#52624] +- Extended the [`RESTORE`](../v20.2/restore.html) statement to support the 'KMS' option. This can be used to decrypt encrypted [`BACKUP`](../v20.2/backup.html)(s). [#52434][#52434] +- Added support for parsing the syntax `CREATE TABLE ... WITH (autovacuum_enabled = bool)`, which results in a no-op. [#52652][#52652] +- Added various improvements to [`EXPLAIN`](../v20.2/explain.html). [#52730][#52730] +- Implemented the `ALTER SCHEMA RENAME TO` command. [#52349][#52349] +- The [vectorized execution engine](../v20.2/vectorized-execution.html) now fully supports comparison operators (things like `ILIKE`, `IS NOT DISTINCT FROM`, `SIMILAR TO`, and several others). [#52313][#52313] +- The `experimental_follower_read_timestamp()` function has been renamed to `follower_read_timestamp()`, signifying more confidence in CockroachDB's [follower read](../v20.2/follower-reads.html) implementation. The previous name remains a supported alias. [#52359][#52359] +- The reserved, non-documented cluster settings `server.heap_profile.*` have been renamed to `server.mem_profile.*`. They now control collection of multiple types of memory profiles besides just Go heap allocations. [#50446][#50446] + +#### Spatial support updates + +{{site.data.alerts.callout_info}} +For instructions showing how to get started with CockroachDB Spatial, see [Working with Spatial Data](../v20.2/spatial-data.html). +{{site.data.alerts.end}} + +- Implemented the `ST_MakePolygon` function for `GEOMETRY` types. [#50979][#50979] +- Added a variant of each index-backed geospatial function that is prefixed with a `_` (e.g., `ST_Covers` gets a non-index-accelerated variant called `_ST_Covers`). These prefixed variants avoid using the spatial index while providing the same functionality. [#51225][#51225] +- Implemented the `ST_DistanceSphere` and `ST_DistanceSpheroid` operators for `GEOMETRY` types. [#51461][#51461] +- Implemented the `ST_ConvexHull` function on `GEOMETRY` types. [#51446][#51446] +- Implemented the `ST_Disjoint` builtin function for `GEOMETRY` types. [#51444][#51444] +- Added support for the `USING GIST` syntax to create an [inverted index](../v20.2/inverted-indexes.html) on `GEOMETRY` and `GEOGRAPHY` columns. [#51516][#51516] +- Implemented the `ST_IsValid`, `ST_IsValidReason` and `ST_MakeValid` operators for `GEOMETRY` types. [#51484][#51484] +- Implemented the `ST_Force2D` functionality for `GEOMETRY` types. [#51514][#51514] +- Updated geospatial functions that take in a string argument such that when an ambiguous function that could be referring to either `GEOMETRY` or `GEOGRAPHY` types is encountered, the `GEOMETRY` type is chosen. This is the case for the following functions: `st_area`, `st_asewkt`, `st_asgeojson`, `st_buffer`, `st_coveredby`, `st_covers`, `st_distance`, `st_dwithin`, `st_intersects`, and `st_length`. [#51563][#51563] +- Implemented `ST_Length2D` and `ST_Perimeter2D` for `GEOMETRY` types. [#51556][#51556] +- Implemented `ST_Envelope` for `GEOMETRY` types. [#51604][#51604] +- Added the `ST_RelatePattern` builtin function, which checks whether a given [DE-9IM intersection matrix](https://en.wikipedia.org/wiki/DE-9IM) matches a given pattern. [#51858][#51858] +- Implemented `ST_GeoHash` for `GEOMETRY` and `GEOGRAPHY` types. [#50611][#50611] +- Implemented the `ST_Buffer` and `ST_Intersection` functions for `GEOGRAPHY` types. [#51537][#51537] +- Implemented the `ST_Intersection` function for [`STRING`](../v20.2/string.html) types. [#51537][#51537] +- When [ordering by](../v20.2/query-order.html) geospatial columns, they will now be ordered by the [Hilbert Space-filling Curve](https://en.wikipedia.org/wiki/Hilbert_curve) index so that points which are geographically similar are clustered together. [#51898][#51898] +- Implemented the `GEOMETRY` builtin function `ST_Translate`. [#51483][#51483] +- Implemented the `GEOMETRY` builtin function `ST_Scale`. [#52350][#52350] +- Implemented the `ST_MakeLine` aggregate builtin function. [#52631][#52631] +- Implemented the `GEOMETRY` builtin function `ST_SetPoint`. [#52655][#52655] +- Added aliases for `GeomFromEWKT` to `ST_GeomFromEWKT` and `GeomFromEWKB` to `ST_GeomFromEWKB`. [#52789][#52789] +- Added `ST_AsGeoJSON` for recordsets, putting row contents into the properties field of a [GeoJSON](https://geojson.org) object. [#52715][#52715] + +### Command-line changes + +- Added a set of `statement-diag` CLI commands that can be used to manage statement diagnostics. [#50924][#50924] +- Introduced a `membership` column to the output generated by `cockroach node status --decommission`. It should be used in favor of the `is_decommissioning` column going forward. [#50329][#50329] +- The v20.2 CLI [`cockroach node`](../v20.2/cockroach-node.html) family of subcommands will not work with servers running older versions of `cockroach`, but the v20.1 CLI `cockroach node` subcommands will work against v20.2 servers. [#50329][#50329] +- The `is_decommissioning` column found in the output of [`cockroach node decommission`](../v20.2/remove-nodes.html) is slated for removal in v20.1. Operators should instead use the new `membership` column to determine node membership status. [#50329][#50329] +- The `--wait` flag to [`cockroach node decommission`](../v20.2/remove-nodes.html) now takes any of the following values: + - `all` waits until all target nodes' replica counts have dropped to zero and marks the nodes as fully decommissioned. This is the default. + - `none` marks the targets as decommissioning, but does not wait for the replica counts to drop to zero before returning. If the replica counts are found to be zero, nodes are marked as fully decommissioned. Use when polling manually from an external system. [#50329][#50329] +- The `statement-diag` CLI command will now show all times in UTC. [#51185][#51185] +- Added a `userfile upload` command that can be used to upload a file to the user scoped blob storage: `userfile upload source/file /destination/of/file` [#50981][#50981] +- `SIGQUIT` now causes a CockroachDB server to log its stack traces without shutting down. [#50774][#50774] +- Added Kerberos (GSS) support to [`cockroach sql`](../v20.2/cockroach-sql.html) and other CLI commands that only use the SQL protocol (such as [`node ls`](../v20.2/cockroach-node.html), or `node status`). Other `cockroach` CLI commands that also use the RPC protocol still cannot use Kerberos (such as `node decommission`, `debug zip`, etc). [#51570][#51570] +- Improved the user semantics for `userfile upload` by supporting different patterns of specifying the source and destination CLI arguments. The source argument is required, while the destination argument is now optional. [#51353][#51353] +- Changed the Kerberos URL connection string parameters to the standard `krbsrvname` (previously `service`) and `krbspn` (previously `spn`). [#51947][#51947] +- Updated the label used for the commit ID in the printed version info. [#52263][#52263] +- [`cockroach dump`](../v20.2/cockroach-dump.html) now supports dumping databases that contain user-defined schemas, as well as accepting schema-qualified table names as arguments. [#52079][#52079] +- The `userfile` command now supports an `ls` command which allows users to list the files they have uploaded to the user-scoped FileTableStorage. `userfile ls` accepts a single, optional CLI argument which can either be a well-formed userfile URI or a glob pattern. The latter defaults to searching in the default FileTableStorage table `defaultdb.public.userfiles_$USERNAME`. [#51482][#51482] +- The `userfile` command now supports a delete command, which allows users to delete the files they have uploaded to the user-scoped `FileTableStorage`. `userfile delete` accepts one CLI argument which can either be a well-formed userfile URI or a glob pattern. The latter defaults to searching in the default `FileTableStorage` table `defaultdb.public.userfiles_$USERNAME`. [#51610][#51610] +- CockroachDB now better attempts to retain heap profile dumps after a crash due to an out-of-memory (OOM) error. [#50446][#50446] +- CockroachDB now better attempts to retain memory statistics corresponding to increases in total memory usage, not just heap allocations. [#50446][#50446] +- Crashes in [`cockroach demo`](../v20.2/cockroach-demo.html) sessions are now reported to telemetry, [if telemetry is enabled](../v20.2/diagnostics-reporting.html). [#52696][#52696] + +### Admin UI changes + +- Removed the **Now** button for the "From" timepicker in the custom time range on the **Metrics** page. [#51047][#51047] +- Updated the node label in chart legends to make the node ID visible. [#50434][#50434] +- Updated Admin UI database page styles to match the Cockroach Labs design system. [#47753][#47753] +- Updated link on login page for secure clusters to point to a moved documentation URL. [#51862][#51862] +- The **Statement Details** page now contains statistics for rows and disk bytes read. [#51630][#51630] +- The time range selector (on the **Metrics** page) now shows time in UTC instead of local time, with a "(UTC)" prefix after the time to highlight this in the UI. [#51056][#51056] + +### Bug fixes + +- Fixed an internal error that occurred when `AddGeometryColumn` was called with _NULL_ arguments. This now results in a no-op and returns _NULL_. [#50992][#50992] +- Previously, CockroachDB could crash when internal memory accounting hit a discrepancy. Now it will report an error instead. [#50962][#50962] +- Fixed the "column not in input" internal error in cases involving lookup semi/anti joins. [#50993][#50993] +- Added better support for large statement [diagnostic bundles](../v20.2/explain-analyze.html#debug-option). [#50974][#50974] +- Previously, if there was a table `t(a int, b int)`, and a sequence `seq` that was first owned by `t.a` and then altered to be owned by `t.b`, it would make the table `t` impossible to drop. This is now fixed. [#50720][#50720] +- The `age` function previously did not normalize the duration for large day or `H:M:S` values in the same way PostgreSQL does. This is now fixed. [#51054][#51054] +- Fixed an internal error in some cases involving `COALESCE` with _NULL_ inputs. [#51022][#51022] +- Fixed a bug where very long-running [incremental backups](../v20.2/backup.html#incremental-backups) could fail if the data they were backing up was garbage collected. [#51069][#51069] +- Fixed a bug causing the raw trace file collected inside a statement [diagnostics bundle](../v20.2/explain-analyze.html#debug-option) to be sometimes empty when the cluster setting `sql.trace.txn.enable_threshold` was in use. [#50914][#50914] +- Prevented spurious `"SimpleQuery not allowed while in extended protocol mode"` errors. [#51194][#51194] +- Previously, CockroachDB could hit an internal error when executing the `regexp_replace` builtin function; this has been fixed. [#51303][#51303] +- Fixed an internal error involving [`CASE` statements](../v20.2/scalar-expressions.html#simple-case-expressions) and boolean expressions with _NULL_ operands. [#51154][#51154] +- [`IMPORT`](../v20.2/import.html) no longer fails when run in a database which has a user with privileges on the database. [#51315][#51315] +- [`cockroach dump`](../v20.2/cockroach-dump.html) no longer fails with an error when dumping [temporary tables](../v20.2/temporary-tables.html), views, or sequences. It either ignores them or throws an informative error if the temporary object is explicitly requested to be dumped via the CLI. [#51185][#51185] +- Fixed incorrect results in some cases involving [joins](../v20.2/joins.html) on [interleaved tables](../v20.2/interleave-in-parent.html) with [limits](../v20.2/limit-offset.html). [#51398][#51398] +- Fixed a bug where [`cockroach dump`](../v20.2/cockroach-dump.html) would not properly escape quotes within [table comments](../v20.2/comment-on.html). [#51463][#51463] +- Fixed a bug where [`cockroach dump`](../v20.2/cockroach-dump.html) would not emit a correct statement for comments on indexes. [#51463][#51463] +- Fixed a bug in in the pgwire protocol implementation where CockroachDB would not correctly populate the `TableOID` and `TableAttributeNumber` fields in the `RowDescription` message of a prepared statement correctly. [#51479][#51479] +- Some queries in the [vectorized execution engine](../v20.2/vectorized-execution.html) could previously hang during cleanup. This is now fixed. [#51375][#51375] +- Previously, users could not drop tables or sequences with invalid internal state due to circular ownership issues. This is now fixed. [#51253][#51253] +- Updated the [vectorized engine](../v20.2/vectorized-execution.html) to show the same statistics for 'rows'/'bytes read' as the row-at-a-time engine. [#51591][#51591] +- Previously, CockroachDB could throw a "command is too large" error when performing [`UPSERT`](../v20.2/upsert.html) operations with many values. Internally, we attempted to perform such operations by splitting them into "batches", but the batching mechanism was broken. This is now fixed. [#51608][#51608] +- It is no longer possible for rapid range lease movement to trigger a rare assertion failure under contended workloads. The assertion contained the text: `"discovered lock by different transaction than existing lock"`. [#51615][#51615] +- CockroachDB now tracks the location of follower replicas for all ranges much more effectively than before. This means that more queries will be successfully served as ["follower reads"](../v20.2/follower-reads.html). [#51437][#51437] +- Before this change, we would leave orphaned `system.namespace`/`system.descriptor` entries if we ran a [`DROP DATABASE CASCADE`](../v20.2/drop-database.html) and the database contained "dependency" relations. For example, if the database included a view which depended on a table in the database, dropping the database would result in an orphaned entry for the view. Same thing for a sequence that was used by a table in the database. (See [#51782][#51782] for reproduction steps). This bug is now fixed, and cleanup of entries happens as expected. [#51813][#51813] +- Fixed instances of slow plans for prepared queries involving [CTEs](../v20.2/common-table-expressions.html) or [foreign key checks](../v20.2/foreign-key.html). [#51788][#51788] +- Fixed the `"unhandled op: json-object-agg"` internal error. [#51881][#51881] +- CockroachDB would previously emit benign internal "context canceled" errors when queries were executed by the [vectorized engine](../v20.2/vectorized-execution.html). This is now fixed. [#51772][#51772] +- Added better detection of invalid computed column or partial index predicates that contain context-dependent operators. [#51886][#51886] +- Increased robustness of [`RESTORE`](../v20.2/restore.html) against descriptors which may be in an unexpected state. [#51848][#51848] +- Previously, CockroachDB could return incorrect results on query that encountered a [`ReadWithinUncertaintyInterval`](../v20.2/transaction-retry-error-reference.html#readwithinuncertaintyinterval) error, and this has been fixed. [#51518][#51518] +- Previously, a [`BACKUP`](../v20.2/backup.html) job would block once it had finished backing up the data. This is now fixed. [#51999][#51999] +- Previously, [`RESTORE`](../v20.2/restore.html) would sometimes block at the end of the job when sending its results back if the connection that started the job disconnected. This is now fixed. [#51999][#51999] +- `COPY` previously did not allow a backslash of any character other than the special table set. CockroachDB would emit an error in these cases. This behavior is changed to allow any character after a backslash and interpret it to mean the character itself to match the behavior of PostgreSQL (e.g. now `\a` will be interpreted as `a`). Furthermore, non hex-digits following a `\x` are now interpreted without the backslash, (e.g. `\xH` will be interpreted as `xH`). Strings ending with a single backslash will use the backslash (e.g. `x\\` is interpreted as `x\`). [#52068][#52068] +- Fixed an internal error that could occur when an aggregate function argument contained a [correlated subquery](../v20.2/subqueries.html#correlated-subqueries) with another aggregate function referencing the outer scope. This now returns an appropriate user-friendly error: `"aggregate function calls cannot be nested"`. [#52092][#52092] +- CockroachDB could previously crash on some queries with [merge joins](../v20.2/joins.html#merge-joins); this has now been fixed. [#52042][#52042] +- Resolved an internal error that occurred with 0-argument builtin functions in the [vectorized engine](../v20.2/vectorized-execution.html). [#52103][#52103] +- Previously, subtracting months from a [`TIMESTAMP`](../v20.2/timestamp.html)/`DATE`/`TIMESTAMPTZ` whose date value was greater than 28 could subtract a further year off. This is now fixed. [#52138][#52138] +- Fixed an issue where large write requests no longer have a chance of erroneously throwing a `"transaction with sequence has a different value"` error. [#52234][#52234] +- Previously, shutting down a connection with an open transaction that had active [temporary tables](../v20.2/temporary-tables.html) caused deadlocks or general brokenness. This was because the table cleanup was done inside of the open transaction. This commit moves the table cleanup to be after the user transaction is shut down. [#52148][#52148] +- Fixed a rare bug that could cause actionable [closed timestamps](../v20.2/follower-reads.html#how-follower-reads-work) to effectively regress over a given keyspan. This could in turn lead to a serializability violation when using follower reads. This was due to ill-defined interactions between [range merges](../v20.2/range-merges.html) and the closed timestamp subsystem. [#50265][#50265] +- Updated the functions `crdb_version()` and `version()` to return the same result. [#52032][#52032] +- Fixed a bug with the temporary object cleaner where it was stuck trying to remove objects that it mistakenly thought were temporary. Note that no persistent data was deleted -- the temporary cleaner simply errored out because it thought certain persistent data was temporary. [#51359][#51359] +- Fixed a bug when using the `COPY` protocol which could prevent [schema changes](../v20.2/online-schema-changes.html) for up to 5 minutes. [#52384][#52384] +- Previously, CockroachDB would erroneously restart the execution of empty, unclosed portals after they had been fully exhausted. This has been fixed. [#48842][#48842] +- Updated [`IMPORT PGDUMP`](../v20.2/import.html) and `IMPORT MYSQLDUMP` to reject specifying multiple files. [#52500][#52500] +- Fixed an internal error involving string literals used as arrays. [#52416][#52416] +- Fixed a bug where jobs could fail to run during version upgrades. [#52475][#52475] +- Don't display a value for [`gc.ttlseconds`](../v20.2/configure-replication-zones.html) in the [Admin UI](../v20.2/admin-ui-overview.html) if it is not set. [#52721][#52721] +- Updated CockroachDB's handling of an unknown condition that would previously crash a node with the message `"committed txn with writeTooOld err"`. This condition no longer crashes a node; instead, an error message is printed to [the logs](../v20.2/debug-and-error-logs.html) asking for help in the investigation. [#51619][#51619] + +### Performance improvements + +- `SELECT IN` performance on longer filter rows was improved in the [vectorized engine](../v20.2/vectorized-execution.html) by replacing a linear scan with binary search. [#50337][#50337] +- Improved the efficiency of garbage collection when there are a large number of versions of a single key, commonly found when utilizing sequences. [#51184][#51184] +- Scans over the virtual table `pg_type` by the OID column have improved performance in common cases. [#51374][#51374] +- Queries no longer block during planning if cached table statistics have become stale and the new statistics have not yet been loaded. Instead, the stale statistics are used for planning until the new statistics have been loaded. This improves performance because it prevents latency spikes that may occur if there is a delay in loading the new statistics. [#51616][#51616] +- Modified the cardinality estimate for index-accelerated geospatial functions to make it more likely for the optimizer to choose a geospatial inverted index join during query planning. This results in more efficient plans in most cases. [#51963][#51963] +- Added support for performing joins using geospatial inverted indexes in a wider variety of cases. Complex boolean predicates combining multiple index-accelerated geospatial functions are now supported as join conditions. [#52376][#52376] +- Previously, histogram statistics were only collected for the first column of each index. Now they are collected for each indexed column, allowing the optimizer to more accurately estimate costs of query plans. [#52448][#52448] +- Unnecessary mutex contention observed in heavy read workloads has been removed. [#51055][#51055] +- Ranges recover moderately faster when their leaseholder is briefly down before becoming live again. [#51888][#51888] + +### Contributors + +This release includes 634 merged PRs by 59 authors. + +We would like to thank the following contributors from the CockroachDB community: + +- Andrii Vorobiov +- Eugene Kalinin (first-time contributor) +- Juan Carlos (first-time contributor) +- Vaibhav (first-time contributor) +- Vincent Xiao (first-time contributor) +- Yongyang Lai +- dujin (first-time contributor) +- himanshuchawla009 (first-time contributor) +- manhhiep92 (first-time contributor) +- xuhui-lu (first-time contributor) + +[#46259]: https://github.com/cockroachdb/cockroach/pull/46259 +[#47753]: https://github.com/cockroachdb/cockroach/pull/47753 +[#48842]: https://github.com/cockroachdb/cockroach/pull/48842 +[#50265]: https://github.com/cockroachdb/cockroach/pull/50265 +[#50329]: https://github.com/cockroachdb/cockroach/pull/50329 +[#50337]: https://github.com/cockroachdb/cockroach/pull/50337 +[#50434]: https://github.com/cockroachdb/cockroach/pull/50434 +[#50446]: https://github.com/cockroachdb/cockroach/pull/50446 +[#50503]: https://github.com/cockroachdb/cockroach/pull/50503 +[#50520]: https://github.com/cockroachdb/cockroach/pull/50520 +[#50611]: https://github.com/cockroachdb/cockroach/pull/50611 +[#50625]: https://github.com/cockroachdb/cockroach/pull/50625 +[#50631]: https://github.com/cockroachdb/cockroach/pull/50631 +[#50632]: https://github.com/cockroachdb/cockroach/pull/50632 +[#50648]: https://github.com/cockroachdb/cockroach/pull/50648 +[#50720]: https://github.com/cockroachdb/cockroach/pull/50720 +[#50771]: https://github.com/cockroachdb/cockroach/pull/50771 +[#50774]: https://github.com/cockroachdb/cockroach/pull/50774 +[#50889]: https://github.com/cockroachdb/cockroach/pull/50889 +[#50913]: https://github.com/cockroachdb/cockroach/pull/50913 +[#50914]: https://github.com/cockroachdb/cockroach/pull/50914 +[#50921]: https://github.com/cockroachdb/cockroach/pull/50921 +[#50922]: https://github.com/cockroachdb/cockroach/pull/50922 +[#50924]: https://github.com/cockroachdb/cockroach/pull/50924 +[#50949]: https://github.com/cockroachdb/cockroach/pull/50949 +[#50962]: https://github.com/cockroachdb/cockroach/pull/50962 +[#50967]: https://github.com/cockroachdb/cockroach/pull/50967 +[#50974]: https://github.com/cockroachdb/cockroach/pull/50974 +[#50979]: https://github.com/cockroachdb/cockroach/pull/50979 +[#50981]: https://github.com/cockroachdb/cockroach/pull/50981 +[#50992]: https://github.com/cockroachdb/cockroach/pull/50992 +[#50993]: https://github.com/cockroachdb/cockroach/pull/50993 +[#50994]: https://github.com/cockroachdb/cockroach/pull/50994 +[#51022]: https://github.com/cockroachdb/cockroach/pull/51022 +[#51047]: https://github.com/cockroachdb/cockroach/pull/51047 +[#51054]: https://github.com/cockroachdb/cockroach/pull/51054 +[#51055]: https://github.com/cockroachdb/cockroach/pull/51055 +[#51056]: https://github.com/cockroachdb/cockroach/pull/51056 +[#51069]: https://github.com/cockroachdb/cockroach/pull/51069 +[#51079]: https://github.com/cockroachdb/cockroach/pull/51079 +[#51086]: https://github.com/cockroachdb/cockroach/pull/51086 +[#51108]: https://github.com/cockroachdb/cockroach/pull/51108 +[#51148]: https://github.com/cockroachdb/cockroach/pull/51148 +[#51149]: https://github.com/cockroachdb/cockroach/pull/51149 +[#51154]: https://github.com/cockroachdb/cockroach/pull/51154 +[#51184]: https://github.com/cockroachdb/cockroach/pull/51184 +[#51185]: https://github.com/cockroachdb/cockroach/pull/51185 +[#51194]: https://github.com/cockroachdb/cockroach/pull/51194 +[#51218]: https://github.com/cockroachdb/cockroach/pull/51218 +[#51223]: https://github.com/cockroachdb/cockroach/pull/51223 +[#51225]: https://github.com/cockroachdb/cockroach/pull/51225 +[#51226]: https://github.com/cockroachdb/cockroach/pull/51226 +[#51243]: https://github.com/cockroachdb/cockroach/pull/51243 +[#51245]: https://github.com/cockroachdb/cockroach/pull/51245 +[#51247]: https://github.com/cockroachdb/cockroach/pull/51247 +[#51253]: https://github.com/cockroachdb/cockroach/pull/51253 +[#51303]: https://github.com/cockroachdb/cockroach/pull/51303 +[#51308]: https://github.com/cockroachdb/cockroach/pull/51308 +[#51310]: https://github.com/cockroachdb/cockroach/pull/51310 +[#51315]: https://github.com/cockroachdb/cockroach/pull/51315 +[#51335]: https://github.com/cockroachdb/cockroach/pull/51335 +[#51349]: https://github.com/cockroachdb/cockroach/pull/51349 +[#51352]: https://github.com/cockroachdb/cockroach/pull/51352 +[#51353]: https://github.com/cockroachdb/cockroach/pull/51353 +[#51359]: https://github.com/cockroachdb/cockroach/pull/51359 +[#51374]: https://github.com/cockroachdb/cockroach/pull/51374 +[#51375]: https://github.com/cockroachdb/cockroach/pull/51375 +[#51390]: https://github.com/cockroachdb/cockroach/pull/51390 +[#51392]: https://github.com/cockroachdb/cockroach/pull/51392 +[#51398]: https://github.com/cockroachdb/cockroach/pull/51398 +[#51433]: https://github.com/cockroachdb/cockroach/pull/51433 +[#51437]: https://github.com/cockroachdb/cockroach/pull/51437 +[#51444]: https://github.com/cockroachdb/cockroach/pull/51444 +[#51446]: https://github.com/cockroachdb/cockroach/pull/51446 +[#51447]: https://github.com/cockroachdb/cockroach/pull/51447 +[#51461]: https://github.com/cockroachdb/cockroach/pull/51461 +[#51462]: https://github.com/cockroachdb/cockroach/pull/51462 +[#51463]: https://github.com/cockroachdb/cockroach/pull/51463 +[#51465]: https://github.com/cockroachdb/cockroach/pull/51465 +[#51466]: https://github.com/cockroachdb/cockroach/pull/51466 +[#51469]: https://github.com/cockroachdb/cockroach/pull/51469 +[#51479]: https://github.com/cockroachdb/cockroach/pull/51479 +[#51482]: https://github.com/cockroachdb/cockroach/pull/51482 +[#51483]: https://github.com/cockroachdb/cockroach/pull/51483 +[#51484]: https://github.com/cockroachdb/cockroach/pull/51484 +[#51490]: https://github.com/cockroachdb/cockroach/pull/51490 +[#51493]: https://github.com/cockroachdb/cockroach/pull/51493 +[#51494]: https://github.com/cockroachdb/cockroach/pull/51494 +[#51514]: https://github.com/cockroachdb/cockroach/pull/51514 +[#51515]: https://github.com/cockroachdb/cockroach/pull/51515 +[#51516]: https://github.com/cockroachdb/cockroach/pull/51516 +[#51518]: https://github.com/cockroachdb/cockroach/pull/51518 +[#51537]: https://github.com/cockroachdb/cockroach/pull/51537 +[#51556]: https://github.com/cockroachdb/cockroach/pull/51556 +[#51563]: https://github.com/cockroachdb/cockroach/pull/51563 +[#51570]: https://github.com/cockroachdb/cockroach/pull/51570 +[#51591]: https://github.com/cockroachdb/cockroach/pull/51591 +[#51604]: https://github.com/cockroachdb/cockroach/pull/51604 +[#51605]: https://github.com/cockroachdb/cockroach/pull/51605 +[#51608]: https://github.com/cockroachdb/cockroach/pull/51608 +[#51609]: https://github.com/cockroachdb/cockroach/pull/51609 +[#51610]: https://github.com/cockroachdb/cockroach/pull/51610 +[#51615]: https://github.com/cockroachdb/cockroach/pull/51615 +[#51616]: https://github.com/cockroachdb/cockroach/pull/51616 +[#51619]: https://github.com/cockroachdb/cockroach/pull/51619 +[#51624]: https://github.com/cockroachdb/cockroach/pull/51624 +[#51627]: https://github.com/cockroachdb/cockroach/pull/51627 +[#51630]: https://github.com/cockroachdb/cockroach/pull/51630 +[#51636]: https://github.com/cockroachdb/cockroach/pull/51636 +[#51645]: https://github.com/cockroachdb/cockroach/pull/51645 +[#51661]: https://github.com/cockroachdb/cockroach/pull/51661 +[#51662]: https://github.com/cockroachdb/cockroach/pull/51662 +[#51691]: https://github.com/cockroachdb/cockroach/pull/51691 +[#51692]: https://github.com/cockroachdb/cockroach/pull/51692 +[#51694]: https://github.com/cockroachdb/cockroach/pull/51694 +[#51704]: https://github.com/cockroachdb/cockroach/pull/51704 +[#51772]: https://github.com/cockroachdb/cockroach/pull/51772 +[#51777]: https://github.com/cockroachdb/cockroach/pull/51777 +[#51782]: https://github.com/cockroachdb/cockroach/pull/51782 +[#51784]: https://github.com/cockroachdb/cockroach/pull/51784 +[#51788]: https://github.com/cockroachdb/cockroach/pull/51788 +[#51807]: https://github.com/cockroachdb/cockroach/pull/51807 +[#51813]: https://github.com/cockroachdb/cockroach/pull/51813 +[#51816]: https://github.com/cockroachdb/cockroach/pull/51816 +[#51837]: https://github.com/cockroachdb/cockroach/pull/51837 +[#51848]: https://github.com/cockroachdb/cockroach/pull/51848 +[#51856]: https://github.com/cockroachdb/cockroach/pull/51856 +[#51858]: https://github.com/cockroachdb/cockroach/pull/51858 +[#51862]: https://github.com/cockroachdb/cockroach/pull/51862 +[#51870]: https://github.com/cockroachdb/cockroach/pull/51870 +[#51881]: https://github.com/cockroachdb/cockroach/pull/51881 +[#51886]: https://github.com/cockroachdb/cockroach/pull/51886 +[#51888]: https://github.com/cockroachdb/cockroach/pull/51888 +[#51890]: https://github.com/cockroachdb/cockroach/pull/51890 +[#51896]: https://github.com/cockroachdb/cockroach/pull/51896 +[#51898]: https://github.com/cockroachdb/cockroach/pull/51898 +[#51921]: https://github.com/cockroachdb/cockroach/pull/51921 +[#51936]: https://github.com/cockroachdb/cockroach/pull/51936 +[#51937]: https://github.com/cockroachdb/cockroach/pull/51937 +[#51939]: https://github.com/cockroachdb/cockroach/pull/51939 +[#51947]: https://github.com/cockroachdb/cockroach/pull/51947 +[#51963]: https://github.com/cockroachdb/cockroach/pull/51963 +[#51964]: https://github.com/cockroachdb/cockroach/pull/51964 +[#51999]: https://github.com/cockroachdb/cockroach/pull/51999 +[#52006]: https://github.com/cockroachdb/cockroach/pull/52006 +[#52029]: https://github.com/cockroachdb/cockroach/pull/52029 +[#52032]: https://github.com/cockroachdb/cockroach/pull/52032 +[#52034]: https://github.com/cockroachdb/cockroach/pull/52034 +[#52038]: https://github.com/cockroachdb/cockroach/pull/52038 +[#52041]: https://github.com/cockroachdb/cockroach/pull/52041 +[#52042]: https://github.com/cockroachdb/cockroach/pull/52042 +[#52068]: https://github.com/cockroachdb/cockroach/pull/52068 +[#52079]: https://github.com/cockroachdb/cockroach/pull/52079 +[#52085]: https://github.com/cockroachdb/cockroach/pull/52085 +[#52090]: https://github.com/cockroachdb/cockroach/pull/52090 +[#52091]: https://github.com/cockroachdb/cockroach/pull/52091 +[#52092]: https://github.com/cockroachdb/cockroach/pull/52092 +[#52094]: https://github.com/cockroachdb/cockroach/pull/52094 +[#52103]: https://github.com/cockroachdb/cockroach/pull/52103 +[#52138]: https://github.com/cockroachdb/cockroach/pull/52138 +[#52148]: https://github.com/cockroachdb/cockroach/pull/52148 +[#52168]: https://github.com/cockroachdb/cockroach/pull/52168 +[#52195]: https://github.com/cockroachdb/cockroach/pull/52195 +[#52203]: https://github.com/cockroachdb/cockroach/pull/52203 +[#52230]: https://github.com/cockroachdb/cockroach/pull/52230 +[#52232]: https://github.com/cockroachdb/cockroach/pull/52232 +[#52234]: https://github.com/cockroachdb/cockroach/pull/52234 +[#52237]: https://github.com/cockroachdb/cockroach/pull/52237 +[#52263]: https://github.com/cockroachdb/cockroach/pull/52263 +[#52274]: https://github.com/cockroachdb/cockroach/pull/52274 +[#52301]: https://github.com/cockroachdb/cockroach/pull/52301 +[#52302]: https://github.com/cockroachdb/cockroach/pull/52302 +[#52313]: https://github.com/cockroachdb/cockroach/pull/52313 +[#52329]: https://github.com/cockroachdb/cockroach/pull/52329 +[#52348]: https://github.com/cockroachdb/cockroach/pull/52348 +[#52349]: https://github.com/cockroachdb/cockroach/pull/52349 +[#52350]: https://github.com/cockroachdb/cockroach/pull/52350 +[#52359]: https://github.com/cockroachdb/cockroach/pull/52359 +[#52364]: https://github.com/cockroachdb/cockroach/pull/52364 +[#52365]: https://github.com/cockroachdb/cockroach/pull/52365 +[#52376]: https://github.com/cockroachdb/cockroach/pull/52376 +[#52384]: https://github.com/cockroachdb/cockroach/pull/52384 +[#52388]: https://github.com/cockroachdb/cockroach/pull/52388 +[#52416]: https://github.com/cockroachdb/cockroach/pull/52416 +[#52428]: https://github.com/cockroachdb/cockroach/pull/52428 +[#52432]: https://github.com/cockroachdb/cockroach/pull/52432 +[#52434]: https://github.com/cockroachdb/cockroach/pull/52434 +[#52436]: https://github.com/cockroachdb/cockroach/pull/52436 +[#52442]: https://github.com/cockroachdb/cockroach/pull/52442 +[#52448]: https://github.com/cockroachdb/cockroach/pull/52448 +[#52475]: https://github.com/cockroachdb/cockroach/pull/52475 +[#52479]: https://github.com/cockroachdb/cockroach/pull/52479 +[#52483]: https://github.com/cockroachdb/cockroach/pull/52483 +[#52485]: https://github.com/cockroachdb/cockroach/pull/52485 +[#52488]: https://github.com/cockroachdb/cockroach/pull/52488 +[#52500]: https://github.com/cockroachdb/cockroach/pull/52500 +[#52530]: https://github.com/cockroachdb/cockroach/pull/52530 +[#52534]: https://github.com/cockroachdb/cockroach/pull/52534 +[#52538]: https://github.com/cockroachdb/cockroach/pull/52538 +[#52547]: https://github.com/cockroachdb/cockroach/pull/52547 +[#52569]: https://github.com/cockroachdb/cockroach/pull/52569 +[#52588]: https://github.com/cockroachdb/cockroach/pull/52588 +[#52589]: https://github.com/cockroachdb/cockroach/pull/52589 +[#52592]: https://github.com/cockroachdb/cockroach/pull/52592 +[#52595]: https://github.com/cockroachdb/cockroach/pull/52595 +[#52596]: https://github.com/cockroachdb/cockroach/pull/52596 +[#52599]: https://github.com/cockroachdb/cockroach/pull/52599 +[#52624]: https://github.com/cockroachdb/cockroach/pull/52624 +[#52631]: https://github.com/cockroachdb/cockroach/pull/52631 +[#52640]: https://github.com/cockroachdb/cockroach/pull/52640 +[#52652]: https://github.com/cockroachdb/cockroach/pull/52652 +[#52655]: https://github.com/cockroachdb/cockroach/pull/52655 +[#52696]: https://github.com/cockroachdb/cockroach/pull/52696 +[#52715]: https://github.com/cockroachdb/cockroach/pull/52715 +[#52721]: https://github.com/cockroachdb/cockroach/pull/52721 +[#52729]: https://github.com/cockroachdb/cockroach/pull/52729 +[#52730]: https://github.com/cockroachdb/cockroach/pull/52730 +[#52779]: https://github.com/cockroachdb/cockroach/pull/52779 +[#52789]: https://github.com/cockroachdb/cockroach/pull/52789 +[09076fdd5]: https://github.com/cockroachdb/cockroach/commit/09076fdd5 +[0a1a7c2f0]: https://github.com/cockroachdb/cockroach/commit/0a1a7c2f0 +[14221e626]: https://github.com/cockroachdb/cockroach/commit/14221e626 +[1682c4018]: https://github.com/cockroachdb/cockroach/commit/1682c4018 +[301839722]: https://github.com/cockroachdb/cockroach/commit/301839722 +[33f86ff31]: https://github.com/cockroachdb/cockroach/commit/33f86ff31 +[3697ebe72]: https://github.com/cockroachdb/cockroach/commit/3697ebe72 +[39c00cb68]: https://github.com/cockroachdb/cockroach/commit/39c00cb68 +[3b604f641]: https://github.com/cockroachdb/cockroach/commit/3b604f641 +[3ce3d2b60]: https://github.com/cockroachdb/cockroach/commit/3ce3d2b60 +[421420d66]: https://github.com/cockroachdb/cockroach/commit/421420d66 +[44983c4ce]: https://github.com/cockroachdb/cockroach/commit/44983c4ce +[4877173b5]: https://github.com/cockroachdb/cockroach/commit/4877173b5 +[4aaf4844b]: https://github.com/cockroachdb/cockroach/commit/4aaf4844b +[4d8b019a9]: https://github.com/cockroachdb/cockroach/commit/4d8b019a9 +[4db62f745]: https://github.com/cockroachdb/cockroach/commit/4db62f745 +[5100508cb]: https://github.com/cockroachdb/cockroach/commit/5100508cb +[529aa8297]: https://github.com/cockroachdb/cockroach/commit/529aa8297 +[5416c9c6b]: https://github.com/cockroachdb/cockroach/commit/5416c9c6b +[5475e6269]: https://github.com/cockroachdb/cockroach/commit/5475e6269 +[54b30fd50]: https://github.com/cockroachdb/cockroach/commit/54b30fd50 +[5ffaf44ba]: https://github.com/cockroachdb/cockroach/commit/5ffaf44ba +[66eb16da5]: https://github.com/cockroachdb/cockroach/commit/66eb16da5 +[67e319f3f]: https://github.com/cockroachdb/cockroach/commit/67e319f3f +[6c1a90b22]: https://github.com/cockroachdb/cockroach/commit/6c1a90b22 +[6def410cb]: https://github.com/cockroachdb/cockroach/commit/6def410cb +[70cce489e]: https://github.com/cockroachdb/cockroach/commit/70cce489e +[797db1d9e]: https://github.com/cockroachdb/cockroach/commit/797db1d9e +[83dfef8e8]: https://github.com/cockroachdb/cockroach/commit/83dfef8e8 +[84192f40c]: https://github.com/cockroachdb/cockroach/commit/84192f40c +[8759499dc]: https://github.com/cockroachdb/cockroach/commit/8759499dc +[87c6c12d7]: https://github.com/cockroachdb/cockroach/commit/87c6c12d7 +[89781ac5f]: https://github.com/cockroachdb/cockroach/commit/89781ac5f +[acfa3d47d]: https://github.com/cockroachdb/cockroach/commit/acfa3d47d +[b19794de2]: https://github.com/cockroachdb/cockroach/commit/b19794de2 +[b4af2b06d]: https://github.com/cockroachdb/cockroach/commit/b4af2b06d +[b7430b5f7]: https://github.com/cockroachdb/cockroach/commit/b7430b5f7 +[c3951f31a]: https://github.com/cockroachdb/cockroach/commit/c3951f31a +[c4e1643f9]: https://github.com/cockroachdb/cockroach/commit/c4e1643f9 +[cd84345a8]: https://github.com/cockroachdb/cockroach/commit/cd84345a8 +[d0fde99b4]: https://github.com/cockroachdb/cockroach/commit/d0fde99b4 +[d163557b4]: https://github.com/cockroachdb/cockroach/commit/d163557b4 +[d5497e315]: https://github.com/cockroachdb/cockroach/commit/d5497e315 +[d86d679ae]: https://github.com/cockroachdb/cockroach/commit/d86d679ae +[dd76f4aa7]: https://github.com/cockroachdb/cockroach/commit/dd76f4aa7 +[e92b4d35a]: https://github.com/cockroachdb/cockroach/commit/e92b4d35a +[eaa01fd67]: https://github.com/cockroachdb/cockroach/commit/eaa01fd67 +[ec3d431be]: https://github.com/cockroachdb/cockroach/commit/ec3d431be +[f21b856d9]: https://github.com/cockroachdb/cockroach/commit/f21b856d9 +[f4c804a2b]: https://github.com/cockroachdb/cockroach/commit/f4c804a2b +[fd89146ae]: https://github.com/cockroachdb/cockroach/commit/fd89146ae