diff --git a/_config_base.yml b/_config_base.yml index d9f714ba461..0ef6606780a 100644 --- a/_config_base.yml +++ b/_config_base.yml @@ -51,10 +51,10 @@ release_info: start_time: 2020-08-31 11:01:26.34274101 +0000 UTC v20.2: name: v20.2.0 - version: v20.2.0-alpha.3 + version: v20.2.0-beta.1 docker_image: cockroachdb/cockroach-unstable - build_time: 2020/08/25 11:00:26 (go1.13.4) - start_time: 2020-08-25 11:01:26.34274101 +0000 UTC + build_time: 2020/09/14 11:00:26 (go1.13.4) + start_time: 2020-09-14 11:01:26.34274101 +0000 UTC include: ["_redirects"] diff --git a/_data/releases.yml b/_data/releases.yml index 9e3cd6223e4..f9caa9c5571 100644 --- a/_data/releases.yml +++ b/_data/releases.yml @@ -185,6 +185,8 @@ no_windows: true - title: Testing releases releases: + - date: September 14, 2020 + version: v20.2.0-beta.1 - date: August 25, 2020 version: v20.2.0-alpha.3 - date: July 27, 2020 diff --git a/_includes/sidebar-releases.json b/_includes/sidebar-releases.json index 67005bc9f90..00e847453d7 100644 --- a/_includes/sidebar-releases.json +++ b/_includes/sidebar-releases.json @@ -34,9 +34,9 @@ "title": "Testing Releases", "items": [ { - "title": "Latest v20.2 Alpha", + "title": "Latest v20.2 Beta", "urls": [ - "/releases/v20.2.0-alpha.3.html" + "/releases/v20.2.0-beta.1.html" ] }, { diff --git a/releases/v20.2.0-beta.1.md b/releases/v20.2.0-beta.1.md new file mode 100644 index 00000000000..d0eede5c2c5 --- /dev/null +++ b/releases/v20.2.0-beta.1.md @@ -0,0 +1,520 @@ +--- +title: What's New in v20.2.0-beta.1 +toc: true +summary: Additions and changes in CockroachDB version v20.2.0-beta.1 since version v20.2.0-alpha.3 +--- + +## September 14, 2020 + +In addition to various updates, enhancements, and bug fixes, this first v20.2 beta release includes the following major highlights: + +- **Backup schedules:** You can now set up a recurring schedule that lets CockroachDB handle scheduling, conflict resolution, and resilience for your backups. Previously, it was necessary to create your own scheduler service or cron job to kick off [`BACKUP`](../v20.2/backup.html) jobs. To create a schedule for a cluster-level backup that runs a full backup every day with the first full backup taken "now", run `CREATE SCHEDULE test_backup_schedule FOR BACKUP INTO ‘ + + + +### Downloads + +
+ + + + +
+ +### Docker image + +{% include copy-clipboard.html %} +~~~shell +$ docker pull cockroachdb/cockroach-unstable:v20.2.0-beta.1 +~~~ + +### Backward-incompatible changes + +- A change to the on-disk representation for user-defined schemas, enums, and databases was made that is backward-incompatible with v20.2 alpha releases. Only schemas, enums, and databases in the middle of being dropped at the time of the upgrade are affected, and the upgrade may result in the drop never running to completion. If you are upgrading from a v20.2 alpha release to a v20.2 beta release, we advise that you avoid dropping schemas, enums and databases. [#53387][#53387] + +### Security updates + +- Certificate revocation is now supported via OSCP and the [cluster setting](../v20.2/cluster-settings.html) `security.ocsp.mode`. This makes a call to the OCSP server on every connection attempt and may wait for up to value specified with the setting `security.ocsp.timeout`. [#53218][#53218] +- Defining or changing [authentication](../v20.2/authorization.html) principals or their credentials now requires the new `CREATELOGIN` option to be set for the requesting user or one of its roles. This includes setting/removing the `CREATELOGIN` option (whether the principal can log in), initializing or changing the password of a SQL user, and setting the expiration date for a password. Previously, only the `CREATEROLE` option could perform these changes. The pseudo-option `NOCREATELOGIN` can be used to revoke `CREATELOGIN`. The two predefined `root` and `admin` [roles](../v20.2/authorization.html#default-roles) have the option `CREATELOGIN` set by default. [#50601][#50601] +- Only a user which already has the `CREATELOGIN` option (either itself or one of its roles) can grant this option or use `NOCREATELOGIN`. [#50601][#50601] +- Roles that had the `CREATEROLE` privilege prior to upgrading to this version are also automatically granted `CREATELOGIN`. After the upgrade, `CREATELOGIN` is no longer granted automatically. [#50601][#50601] + +### General changes + +- `Random()` and `gen_random_uuid()` are now supported as default expressions for [`IMPORT`](../v20.2/import.html). [#52247][#52247] +- [`IMPORT INTO`](../v20.2/import-into.html) is now supported for `DELIMITED` and `PGCOPY` file formats. [#52628][#52628] +- Computed columns are now supported in the [`IMPORT INTO`](../v20.2/import-into.html) operation. [#51321][#51321] +- As part of the transition to v20.2, the migration to upgrade schema change jobs started prior to v20.1 is no longer run. [#52968][#52968] +- In some cases where `AmbiguousResultErrors` were produced under high load, non-ambiguous, retriable errors are now returned. [#53156][#53156] + +### Enterprise edition changes + +- [`SHOW BACKUP`](../v20.2/show-backup.html) can be used to list backups in a backup collection created by `BACKUP ... INTO`. [#52758][#52758] +- [`BACKUP`](../v20.2/backup.html)s with `revision_history` now support including UDTs. [#53160][#53160] +- User-defined schemas now support being backed up with revision history and restored with `AS OF SYSTEM TIME`. [#53241][#53241] +- Scheduled jobs are now included in [cluster backups](../v20.2/backup.html#backup-a-cluster). [#53203][#53203] +- As part of making basic [`BACKUP`](../v20.2/backup.html) and [`RESTORE`](../v20.2/restore.html) free to use without an enterprise license, [`SHOW BACKUP`](../v20.2/show-backup.html) and `SHOW BACKUPS IN` no longer require a license. [#53356][#53356] +- Backups run from v20.2 nodes are no longer run in an auto-appended backup location that was created by v20.1 nodes. [#53762][#53762] + +### SQL language changes + +- Reduced memory used by scans of tables containing JSON data. [#52738][#52738] +- Introduced the `box2d` [data type](../v20.2/data-types.html) to be used for geospatial comparators with [`GEOMETRY`/`GEOGRAPHY`](../v20.2/spatial-data.html). [#52771][#52771] +- [`EXPLAIN`](../v20.2/explain.html) now shows estimated row count for scans (when statistics are available). [`EXPLAIN (VERBOSE)`](../v20.2/explain.html) now shows the estimated row count for all operators. [#52798][#52798] +- Added support for `ALTER TABLE OWNER TO `. The command changes the owner of a table. To use the conditions, the following conditions must be met: The user executing the command must be the owner of the table, or the member of the owner role. The user executing the command must be a member of the new owner role. The new owner role must have `CREATE` on the schema the table belongs to. [#52659][#52659] +- Added support for `SELECT ... FOR {UPDATE,SHARE} NOWAIT`. The option can be used to throw an error instead of blocking on contended row-level lock acquisition. [#52522][#52522] +- Added privileges to user-defined types. Users can grant privileges on a type by using [`GRANT {USAGE/GRANT/ALL} ON TYPE TO `](../v20.2/grant.html). Users must have `CREATE` privilege in a database to create a type in that database. Users must have `USAGE` privilege to create an object that depends on a type. Users must have `GRANT` privilege to grant more privileges on the type. Owning a type implicitly gives `ALL` privileges on the type (`USAGE`,`GRANT`). Users must be the owner of the type to drop or alter the type. After creating a type, the creator can delegate privileges on that type by [`GRANT`](../v20.2/grant.html)ing any of the `USAGE`/`GRANT`/`ALL` privileges. To allow another user to grant privileges, they must have `GRANT` privilege and the privilege they want to [`GRANT`](../v20.2/grant.html). [#51622][#51622] +- [`EXPLAIN`](../v20.2/explain.html) now shows fewer "project" nodes. [#52865][#52865] +- Improved display of spans in [`EXPLAIN`](../v20.2/explain.html). [#52865][#52865] +- Added support for the `DROP SCHEMA` command. [#52726][#52726] +- Added a new [cluster setting](../v20.2/cluster-settings.html) `sql.log.slow_query.internal` which, when turned on in conjunction with the [slow query log](../v20.2/query-behavior-troubleshooting.html#using-the-slow-query-log), causes slow internal queries to be logged to a slow internal query log at `cockroach-sql-slow-internal-only.log`. Internal queries are no longer logged to the slow query log. This new setting is opt-in. The default behavior is to not log slow internal queries. [#52377][#52377] +- Removed some unnecessary [`EXPLAIN`](../v20.2/explain.html) fields, and relegated others to the `VERBOSE` variant. [#53003][#53003] +- Improved [`EXPLAIN`](../v20.2/explain.html) output for join nodes. [#53003][#53003] +- Improved [`EXPLAIN`](../v20.2/explain.html) output for scalar groups. [#53003][#53003] +- Improved [`EXPLAIN`](../v20.2/explain.html) output for set operations. [#53003][#53003] +- Box2d comparison operators are now gated by the [cluster setting](../v20.2/cluster-settings.html) `sql.spatial.experimental_box2d_comparison_operators.enabled`. [#52990][#52990] +- Added the `CONTROLJOB` role option. When creating/altering roles, `CONTROLJOB` can be passed as a role option. For example, [`CREATE USER CONTROLJOB CREATEROLE`](../v20.2/create-user.html). `NOCONTROLJOB` can be used to remove `CONTROLJOB` from the role when altering the role. `CONTROLJOB` allows the user to pause/resume and cancel jobs owned by non-admin users. `CONTROLJOB` also allows seeing all jobs owned by non-admin users, i.e., when running [`SHOW JOBS`](../v20.2/show-jobs.html). [#52804][#52804] +- Added a new public [cluster setting](../v20.2/cluster-settings.html) `sql.defaults.disallow_full_table_scans.enabled` that defaults to false, which informs the session setting `disallow_full_table_scans`. If the session is configured to disallow full table/index scans, any user query that plans a full table/index scan is rejected. This does not apply to internal queries or queries over virtual schemas (e.g., `pg_catalog`). [#52278][#52278] +- Renaming and dropping databases now satisfy the same transactional guarantees as online schema changes on tables: Changes will become visible if and only if the transaction commits, and a successful result indicates changes having propagated to the entire cluster. This fixes some long-standing problems with inconsistent database state being visible after renames and drops. (As a side effect of coherent caching for databases, database names can no longer be recycled in multiple schema changes in the same transaction.) [#52975][#52975] +- The [vectorized execution engine](../v20.2/vectorized-execution.html) now supports `DISTINCT` and `FILTER`ing hash aggregation. [#50721][#50721] +- Added support for `ALTER DATABASE OWNER TO`. This command changes the owner of a database. The user must be an owner of the database to run the command. The user must also be a member of the new owner role directly or indirectly. [#52736][#52736] +- [`UPSERT`](../v20.2/upsert.html) statements now acquire locks using the `FOR UPDATE` locking mode during their initial row scan, which improves performance for contended workloads. This behavior is configurable using the `enable_implicit_select_for_update` session variable and the `sql.defaults.implicit_select_for_update.enabled` [cluster setting](../v20.2/cluster-settings.html). [#53132][#53132] +- Users can now convert existing databases into schemas under other databases through the `ALTER DATABASE ... CONVERT TO SCHEMA UNDER PARENT ...` command. This command can only be run by `admin` and is only valid for databases that don't already have any child schemas other than `public`. [#52997][#52997] +- Implemented the `IdleInTransactionSessionTimeout` variable to allow terminating sessions that are idle in a transaction past the provided threshold. Set the variable by using `SET idle_in_transaction_session_timeout = 'time'`. Sessions that are idle in `OPEN`, `ABORTED`, and `DONE(COMMITWAIT)` transaction states will be terminated if the user idles longer than the threshold time. [#52938][#52938] +- Non-admin users with `CREATEROLE` are no longer permitted to drop users with the admin role. [#52881][#52881] +- Users can now specify which subdirectory they wish to write a [`BACKUP`](../v20.2/backup.html) to, via `BACKUP INTO 'subdir' IN x`. This will write `BACKUP` data to `x/subdir/`. [#53139][#53139] +- Added support for `ALTER SCHEMA OWNER TO `. The command changes the owner of a schema. To use the conditions, the following conditions must be met: The user executing the command must be the owner of the schema. The user executing the command must be a member of the new owner role. The new owner role must have `CREATE` on the database the schema belongs to. [#52781][#52781] +- The [vectorized execution engine](../v20.2/vectorized-execution.html) now supports ordered aggregation with the `DISTINCT` clause. [#53145][#53145] +- Introduced a new `CONTROLCHANGEFEED` role option. This grants non-admin roles the ability to create new changefeeds, as long as they have `SELECT` privileges on the target table. It can be conferred via `ALTER ROLE CONTROLCHANGEFEED` and revoked via `ALTER ROLE NOCONTROLCHANGEFEED`. [#52869][#52869] +- Added support for `ALTER TYPE OWNER TO `. The command changes the owner of a type. To use the conditions, the following conditions must be met: The user executing the command must be the owner of the type. The user executing the command must be a member of the new owner role. The new owner role must have `CREATE` on the schema the type belongs to. [#52656][#52656] +- Introduced a new `CREATEDB` role option. This grants non-admin roles the ability to create new databases. It can be conferred via `ALTER ROLE CREATEDB` and revoked via `ALTER ROLE NOCREATEDB`. [#52831][#52831] +- Schema owners can drop tables inside the schema without explicit `DROP` privilege on the table. [#52740][#52740] +- Queries logged in the [slow query log](../v20.2/query-behavior-troubleshooting.html#using-the-slow-query-log) come with a reason now, which can be any combination of `LATENCY_THRESHOLD`, `FULL_TABLE_SCAN`, and `FULL_SECONDORY_INDEX_SCAN`. There is also a new opt-in [cluster setting](../v20.2/cluster-settings.html) `sql.log.slow_query.experimental_full_table_scans.enabled` which, when enabled, logs full table/index scans regardless of the query execution being over the latency threshold. This setting only works if the slow query log has been turned on, i.e., a non-zero latency threshold must be specified. [#53164][#53164] +- Introduced a new `VIEWACTIVITY` role option. This grants non-admin roles the ability to see other users' sessions and queries through [`SHOW SESSIONS`](../v20.2/show-sessions.html), [`SHOW QUERIES`](../v20.2/show-queries.html), and the [Admin UI Statements page](../v20.2/admin-ui-statements-page.html). [#53291][#53291] +- Introduced a new `CANCELQUERY` role option. This grants non-admin roles the ability to cancel other users' queries and sessions. Note that non-admins are not allowed to cancel the queries or sessions of admins. [#53291][#53291] +- Previously, `selectivity` information would be included in [`EXPLAIN ANALYZE`](../v20.2/explain-analyze.html) diagrams if a query was executed via the [vectorized execution engine](../v20.2/vectorized-execution.html). This has been removed due to being confusing and probably unhelpful. [#53153][#53153] +- `stall time` has been renamed to `IO time` in [`EXPLAIN ANALYZE`](../v20.2/explain-analyze.html) diagrams for queries executed via the [vectorized execution engine](../v20.2/vectorized-execution.html). [#53153][#53153] +- An [`INSERT ... ON CONFLICT DO UPDATE`](../v20.2/insert.html#on-conflict-clause) statement without a list of column names after `ON CONFLICT` now results in a SQL syntax error with the error code `42601`. Previously, it errored with the message "there is no unique or exclusion constraint matching the ON CONFLICT specification" and the error code `42P10`. [#53067][#53067] +- Added support for the `WITH DATA` and `WITH NO DATA` arguments for the `REFRESH MATERIALIZED VIEW` command. [#53052][#53052] +- Added support for the `GRANT ... ON SCHEMA command`. [#53344][#53344] +- Added the `SHOW TYPES` command to list all user-defined types. [#53386][#53386] +- Added support for the `USAGE` privilege on schemas. [#53358][#53358] +- Previously, `UNION ALL` queries could crash the server due to OOM in some extreme cases. This is now fixed, at the expense of possible minor reduction in performance, by reducing the concurrency of evaluation of such queries. [#53343][#53343] +- CockroachDB now recognizes the `NOT DEFERRABLE` and `DEFERRABLE` arguments to [`SET TRANSACTION`](../v20.2/set-transaction.html). Note that the `DEFERRABLE` argument is still unimplemented. [#53435][#53435] +- Added an invisible [cluster setting](../v20.2/cluster-settings.html) `sql.conn.max_read_buffer_message_size`, which allows users to configure [SQL statement](../v20.2/sql-statements.html) maximum sizes across the cluster. This effect will take place upon connection restart. [#53445][#53445] +- [`SHOW BACKUP`](../v20.2/show-backup.html) now shows all schemas in a backup. Previously, databases, types, and schemas were not shown. **Note:** This introduces a **breaking change** in that it changes the schema of `SHOW BACKUP` and will no longer return the column `table_name`. This column is replaced by the more general `object_name`. [#53321][#53321] +- The memory used by disk scans is now accounted for, reducing the likelihood of out-of-memory conditions resulting in process crashes (as opposed to SQL out-of-memory error messages). [#52496][#52496] +- Populated the catalog table `pg_catalog.pg_matviews` with materialized view information. [#53501][#53501] +- A value of type `OID` can now be compared to a value of type `INT`. [#53523][#53523] +- Fixed a bug where temporary tables could be included in `BACKUP` commands. [#53478][#53478] +- Added 3 new columns to the `crdb_internal.node_transactions` and `cluster_transactions` tables: `num_stmts`, `num_retries`, and `num_auto_retries`. These keep track of the total number of statements executed on the transaction, the number of retries encountered, and the number of automatic retries encountered, respectively. [#51902][#51902] +- Added the `SHOW TRANSACTIONS` statement, similar to [`SHOW SESSIONS`](../v20.2/show-sessions.html) and variants. It shows the currently active transactions in the node or cluster, and some information about them. [#51902][#51902] +- The related `owner` columns are now populated in `pg_catalog` metadata tables. [#53495][#53495] +- `ENUM` types are no longer experimental. [#53565][#53565] +- Added the `tableoid` system column. [#53562][#53562] +- User-defined schemas are no longer experimental. [#53674][#53674] +- The [`EXPLAIN`](../v20.2/explain.html) output for [`UPSERT`](../v20.2/upsert.html) and [`INSERT ON CONFLICT`](../v20.2/insert.html) statements now includes a list of arbiter indexes. These arbiters are the indexes used for detecting conflicts between the insert row and the existing rows in the table. [#53172][#53172] +- Added support for the `CREATE SCHEMA ... AUTHORIZATION` command. [#53583][#53583] +- [`EXPLAIN ANALYZE`](../v20.2/explain-analyze.html) diagrams now contain "bytes read" information for table readers and lookup joins when the queries are executed via the [vectorized execution engine](../v20.2/vectorized-execution.html). [#53371][#53371] +- Disallowed the `CONVERT TO SCHEMA` command on the current database. [#53564][#53564] +- The `TransactionStatistics` proto will only include the first 1000 statment IDs that comprise a transaction. Any statement IDs beyond 1000 will be omitted. [#53553][#53553] +- Non-admin users are now permitted to execute [`RESTORE`](../v20.2/restore.html) statements as long as the restore does not depend on implicit credentials and the user has the appropriate privileges to create all of the resulting database objects. For database restores, this means the user must have the `CREATEDB` role privilege. For table restores, the user must have `CREATE` privileges on the parent database. Full cluster restores still require admin privileges. [#53650][#53650] +- Populated the `information_schema.column_udt_usage` catalog table. [#53699][#53699] +- Previously, the `pg_get_constraintdef` function would return a result that included type annotations, which is a CockroachDB-specific syntax. Now it does not. [#53865][#53865] +- [`EXPLAIN ANALYZE`](../v20.2/explain-analyze.html) diagrams now contain the information about the number of rows read by the vectorized table reader. [#53775][#53775] +- The new `prefer_lookup_joins_for_fk` session setting (and corresponding [cluster setting](../v20.2/cluster-settings.html)) can be used to make foreign key checks use lookup joins if they incorrectly use hash or merge join. [#53838][#53838] +- Previously, there was no way to query the transaction-level metrics collected by individual nodes. A new `crdb_internal` table called `node_transaction_statistics` allows users to query transaction metrics collected on a particular node. [#53759][#53759] +- Introduced a new `MODIFYCLUSTERSETTING` role option. This grants non-admin roles the ability to modify certain [cluster settings](../v20.2/cluster-settings.html), currently limited to settings with the "sql.defaults" prefix. [#53930][#53930] +- SQL expressions that are shown in `pg_catalog` columns and related functions now will be formatted with a typecast for non-numeric constants. [#53965][#53965] +- Implemented geometry [builtin](../v20.2/functions-and-operators.html#built-in-functions) `ST_Reverse` [#52834][#52834] +- Implemented the `&&` and `~` operators for comparing bounding box objects and geometries. [#52913][#52913] +- Implemented the `ST_CombineBBox` [builtin](../v20.2/functions-and-operators.html#built-in-functions). [#52903][#52903] +- Introduced the `s2_max_level`, `s2_level_mod`, and `s2_max_cells` storage parameters for modifying the S2 parameters for indexing [`GEOMETRY` and `GEOGRAPHY`](../v20.2/spatial-data.html) data types in an inverted index. [#52800][#52800] +- Introduced the `geometry_min_x`, `geometry_min_y`, `geometry_max_x`, `geometry_max_y` storage parameters for indexing GEOMETRY data types in an inverted index. [#52800][#52800] +- Implemented the `ALTER MATERIALIZED VIEW` and `DROP MATERIALIZED VIEW` commands. [#52840][#52840] +- Implemented the ability to cast between `box2d` and `GEOMETRY` types. [#52965][#52965] +- Implemented the `PostGIS_GetBBox` [builtin](../v20.2/functions-and-operators.html#built-in-functions). [#52963][#52963] +- Implemented the `ST_MakeBox2D` [builtin](../v20.2/functions-and-operators.html#built-in-functions). [#52961][#52961] +- Implemented the `ST_ClipByBox2D` [builtin](../v20.2/functions-and-operators.html#built-in-functions). [#52955][#52955] +- Added the ability to resolve the spatial-backed [builtins](../v20.2/functions-and-operators.html#built-in-functions) in the public schema. For example, `public.st_x` works the same as `st_x`. [#52983][#52983] +- Implemented `ST_Expand` for the `box2d` type. [#52957][#52957] +- Implemented `ST_PointFromGeoHash`, which converts geohash to point. [#52892][#52892] +- Implemented the `ST_Extent` [builtin](../v20.2/functions-and-operators.html#built-in-functions) for `GEOMETRY` aggregations into box2d. [#53001][#53001] +- Implemented the geometry [builtin](../v20.2/functions-and-operators.html#built-in-functions) `ST_Dimension`. [#53068][#53068] +- Implemented the geometry [builtin](../v20.2/functions-and-operators.html#built-in-functions) `ST_CoordDim` as an alias for `ST_NDims`. [#53193][#53193] +- Implemented the geometry [builtins](../v20.2/functions-and-operators.html#built-in-functions) `ST_IsEmpty` and `ST_IsCollection`. [#53217][#53217] +- Implemented the `ST_GeomFromGeoHash` and `ST_Box2DFromGeoHash` [builtins](../v20.2/functions-and-operators.html#built-in-functions). [#53162][#53162] +- Implemented the `ST_Union` [builtin](../v20.2/functions-and-operators.html#built-in-functions) as an aggregate. The previous alpha-available `ST_Union` for two arguments is deprecated. [#53127][#53127] +- Implemented `ST_Expand` for `GEOMETRY`-based types. [#53326][#53326] +- Implemented the geometry [builtins](../v20.2/functions-and-operators.html#built-in-functions) `ST_Multi`, `ST_CollectionExtract`, and `ST_CollectionHomogenize`. [#53287][#53287] +- Implemented the geometry [builtin](../v20.2/functions-and-operators.html#built-in-functions) `ST_SharedPaths` [#53307][#53307] +- Implemented the geometry [builtin](../v20.2/functions-and-operators.html#built-in-functions) `ST_FlipCoordinates` [#53296][#53296] +- Implemented the geometry [builtin](../v20.2/functions-and-operators.html#built-in-functions) `ST_SymDifference`. [#53636][#53636] +- Implemented the geometry aggregate [builtin](../v20.2/functions-and-operators.html#built-in-functions) `ST_Collect`. [#53645][#53645] +- Implemented the geometry [builtin](../v20.2/functions-and-operators.html#built-in-functions) `ST_ForceCollection`. [#53643][#53643] +- Implemented the geometry [builtin](../v20.2/functions-and-operators.html#built-in-functions) `ST_SymmetricDifference`. [#53688][#53688] +- Implemented the geometry aggregate [builtins](../v20.2/functions-and-operators.html#built-in-functions) `ST_MemCollect` and `ST_MemUnion`. [#53708][#53708] +- Implemented the geometry [builtin](../v20.2/functions-and-operators.html#built-in-functions) `ST_Normalize`. [#53726][#53726] +- Implemented the geometry [builtin](../v20.2/functions-and-operators.html#built-in-functions) `ST_Rotate`. [#53709][#53709] +- Implemented the geometry [builtin](../v20.2/functions-and-operators.html#built-in-functions) `ST_AddPoint`. [#53853][#53853] +- Implemented the geometry [builtin](../v20.2/functions-and-operators.html#built-in-functions) `ST_Simplify` and `ST_SimplifyPreserveTopology`. [#53796][#53796] +- Implemented the geometry [builtin](../v20.2/functions-and-operators.html#built-in-functions) `ST_Affine`. [#53856][#53856] +- Implemented the geometry [builtins](../v20.2/functions-and-operators.html#built-in-functions) `ST_LineFromMultiPoint` and `ST_LineMerge`. [#54013][#54013] +- Implemented the geometry [builtin](../v20.2/functions-and-operators.html#built-in-functions) `ST_RemoveRepeatedPoints`. [#53999][#53999] +- Implemented geometry [builtin](../v20.2/functions-and-operators.html#built-in-functions) `ST_RemovePoint` [#53244][#53244] +- Implemented the `ST_IsClosed`, `ST_IsSimple`, and `ST_IsRing` [builtins](../v20.2/functions-and-operators.html#built-in-functions). [#53240][#53240] +- Implemented the geometry [builtin](../v20.2/functions-and-operators.html#built-in-functions) `ST_Points`. [#53496][#53496] +- Implemented the `ST_IsPolygonCW`, `ST_IsPolygonCCW`, `ST_ForcePolygonCW`, and `ST_ForcePolygonCCW` [builtins](../v20.2/functions-and-operators.html#built-in-functions). [#53243][#53243] + +### Command-line changes + +- The [`--storage-engine`](../v20.2/cockroach-start.html#storage-engine) CLI flag no longer defaults to using the last-used storage engine when unspecified. Instead, Pebble is used by default unless otherwise specified using the `--storage-engine` flag. [#52944][#52944] +- Added alias commands `ls` and `rm` for `userfile list` and `userfile delete`. [#53074][#53074] +- The new debug command `decode-proto` reads descriptor from `stdin` in hex or Base64 format (auto-detected) and a flag `--schema=` with default value `cockroach.sql.sqlbase.Descriptor` and outputs to stdout the deserialized proto in JSON format. If the input is not a hex/Base64-encoded proto, then it is outputted verbatim. [#52972][#52972] +- The [`cockroach start`](../v20.2/cockroach-start.html) and [`cockroach start-single-node`](../v20.2/cockroach-start-single-node.html) commands now enable `--redactable-logs` by default. The flag is also enabled by default in [`cockroach demo`](../v20.2/cockroach-demo.html) if `--log-dir` is passed. This causes log files to become redactable, so that [`cockroach debug merge-log --redact`](../v20.2/cockroach-debug-merge-logs.html) or [`cockroach debug zip --redact`](../v20.2/cockroach-debug-zip.html) can remove sensitive information from log files. (Reminder: `cockroach debug zip --redact` only affects *log files*; other items collected by the command can still contain sensitive information.) [#53263][#53263] +- The command-line flag `--socket` has been removed. It was deprecated since v20.1. Use `--socket-dir` instead. [#53405][#53405] +- The command-line flag `--insecure` has been marked as deprecated. See [issue #53404](https://go.crdb.dev/issue/53404) for details. The flag will be removed in a later version in a staged fashion: first, additional security mechanisms will be added to enable more flexible deployments which were previously done using `--insecure`; then the flag will be removed from server commands; then finally, in a later version, also from client commands. [#53405][#53405] +- CockroachDB now recognizes the `\dT` alias for listing user-defined [types](../v20.2/data-types.html). [#53386][#53386] +- The `workload` sub-commands are no longer marked as experimental. [#53691][#53691] +- The `--geo-libs` flag introduced in v20.2 alpha versions is now renamed to `--spatial-libs`. [#53721][#53721] +- The CLI no longer prints a blanket `Time` for queries. Instead, if `show_times` is turned on and the server version is v20.2 or later, the CLI prints two separate times: the server execution time and the network latency. [#52233][#52233] + +### Admin UI changes + +- Improved how [SQL statement plans](../v20.2/admin-ui-statements-page.html#logical-plan) in the Admin UI are populated, using the new `EXPLAIN` infrastructure. [#52956][#52956] +- Previously, in some cases, the [Execution Stats page](../v20.2/admin-ui-statements-page.html#execution-stats) would show a confusingly high **Overhead** latency for a statement. This could happen due to multiple statements being parsed together or due to statement execution being retried. To avoid this, we now stop considering the time between when parsing ends and execution begins when determining service latency. [#53846][#53846] +- Added the **Session list** and **Session detail** pages. We now permit session and query termination from the UI. [#51903][#51903] + +### Bug fixes + +- Fixed a bug for [`ALTER TABLE`](../v20.2/alter-table.html) statements with multiple actions. In certain cases if the last action had no effect, the entire statement would be treated as a no-op. [#52819][#52819] +- Previously, unexpected context cancellation errors could sometimes be returned in the [vectorized execution engine](../v20.2/vectorized-execution.html). This is now fixed. [#52463][#52463] +- Fixed a bug where tables would not be cleaned up after a failed creation through [`CREATE TABLE AS`](../v20.2/create-table-as.html). [#52832][#52832] +- Fixed a bug whereby gc jobs for tables dropped as part of a [`DROP DATABASE CASCADE`](../v20.2/drop-database.html) might never complete. [#52818][#52818] +- Fixed an internal error that could occur when using an index-accelerated geospatial function inside an `EXISTS` or `NOT EXISTS` correlated subquery. [#52942][#52942] +- Fixed a bug where if a table with a check constraint was truncated while being backfilled, the check constraint could get lost. [#49399][#49399] +- Fixed bug where non-committed `DETACHED BACKUPS` left files which falsely indicated that a [`BACKUP`](../v20.2/backup.html) was in progress. [#52980][#52980] +- Fixed a crash that could occur when referencing a database that did not exist when trying to create a type or sequence, or when renaming a table. [#53137][#53137] +- Eliminated some rare `AmbiguousCommitErrors` happening when [CDC](../v20.2/change-data-capture.html) was used. [#53146][#53146] +- A change in v20.1 caused a certain class of bulk [`UPDATE`](../v20.2/update.html) and [`DELETE`](../v20.2/delete.html) statements to hang indefinitely if run in an implicit transaction. We now break up these statements to avoid starvation and prevent them from hanging indefinitely. [#52885][#52885] +- Previously, cluster restores would appear in the [jobs table](../v20.2/show-jobs.html) and [Admin UI Jobs page](../v20.2/admin-ui-jobs-page.html) as `RESTORE TABLE FROM ...`, which was incorrect. They now appear as `RESTORE FROM ...`. [#53230][#53230] +- Previously, CockroachDB could return incorrect results when performing `LEFT ANTI` hash joins when right equality columns would form a key when using the [vectorized execution engine](../v20.2/vectorized-execution.html). This has been fixed. [#53226][#53226] +- Admin users are now permitted to cancel other users' queries and sessions. Previously only the root user was allowed to do so. [#53291][#53291] +- Fixed a possible server panic when using the `nodelocal` and `userfile` subcommands. [#53359][#53359] +- Fixed a bug where user-defined types could not be used with some ORMs due to an assertion failure within Cockroach. [#53385][#53385] +- The [Admin UI Node Map](../v20.2/admin-ui-cluster-overview-page.html#node-map-enterprise) (enterprise feature) and the [Advanced Debug page](../v20.2/admin-ui-debug-pages.html) to list cluster localities are now again available to non-admin users. This bug had been introduced in v19.2.3. [#53329][#53329] +- Previously, if no table was referencing a schema, it would not be included. Now when backing up a database, all schemas will be included. [#53224][#53224] +- Fixed an internal error related to casts between tuples. [#53682][#53682] +- Virtual index scans now respect limits properly, as they did in v20.1 and prior. [#53529][#53529] +- CockroachDB could previously crash when evaluating queries with window functions with `GROUPS` mode of framing when `OFFSET FOLLOWING` boundary was used and when the offset was a very large value such that it could result in an integer overflow. This is now fixed. [#53722][#53722] +- Database creation/deletion was previously not correctly tracked by `revision_history` cluster backups. This is now fixed. [#53667][#53667] +- Fixed a bug that caused a crash when using a `RANGE` mode window function with an offset in some cases, e.g., `OVER (PARTITION BY b ORDER BY a RANGE 1 PRECEDING)`. [#53717][#53717] +- Fixed a panic in `ST_SetPoint` when given empty point. [#53857][#53857] +- Fixed a rare internal error that could occur during planning of queries with many highly selective predicates. [#53802][#53802] +- CockroachDB now properly checks that a user has `CREATE` privileges on the target database before allowing them to create a schema. [#53837][#53837] +- CockroachDB could previously crash when performing an interleaved join in some cases. This is now fixed. The bug has only been present on v20.2 testing releases. [#53863][#53863] +- Fixed "use of crdb_internal_vtable_pk column not allowed" for some queries involving virtual tables. [#53866][#53866] +- Fixed a bug when running restore while [upgrading the cluster from v20.1 to v20.2](../v20.2/upgrade-cockroach-version.html). [#53848][#53848] +- Fixed a bug where we allowed new types to be used in an array type during a version upgrade. [#53961][#53961] +- Fixed a rare bug where the [optimizer](../v20.2/cost-based-optimizer.html) incorrectly classified some columns as not-null, possibly leading to invalid query plans and incorrect results. [#54024][#54024] + +### Performance improvements + +- Maximum and minimum values, represented as 2-bucket histograms, are now collected for all non-index columns (up to 100 columns per table) as part of automatic statistics collection. 200-bucket histograrms are still collected for all index columns. This change enables the [optimizer](../v20.2/cost-based-optimizer.html) to make better cardinality estimates and may result in better query plans in some cases. [#52905][#52905] +- A large heap allocation performed during [`INSERT`](../v20.2/insert.html) statements was removed, resulting in an increase to throughput for single-row `INSERT` statements. [#53076][#53076] +- Transient node liveness blips no longer cause up-to-date ranges to unquiesce, which makes these events less destabilizing. [#51894][#51894] +- The `~` and `&&` geospatial bounding box operations can now benefit from index acceleration if one of the operands is an indexed geometry column. [#53023][#53023] +- Cleaning up after a failure during [`IMPORT INTO`](../v20.2/import-into.html) a table which was empty is now faster. [#52754][#52754] +- The allocation algorithm now supports intra-node rebalances, which means CockroachDB can fully utilize the additional stores on the same node. This removes the last roadblock to running CockroachDB with multiple stores (i.e., disks) per node. [#51567][#51567] +- Validation of optimistic reads is now performed earlier in transactions when doing so can save work. This eliminates certain types of [transaction retry errors](../v20.2/transaction-retry-error-reference.html) and avoids wasted RPC traffic. [#52884][#52884] +- Fixes a performance regression introduced in v20.2 alpha releases where the use of 2-part names to specify tables or types would incur extra reads from the store on every transaction. [#53290][#53290] +- The [optimizer](../v20.2/cost-based-optimizer.html) can now convert semi joins to inner joins in more cases, which may allow the optimizer to produce more efficient query plans. [#53337][#53337] +- The [optimizer](../v20.2/cost-based-optimizer.html) is now aware that the inverted join operator can preserve the ordering of its input. This enables the optimizer to eliminate unnecessary sort operations and produce more efficient plans in some cases. [#53502][#53502] +- The [optimizer](../v20.2/cost-based-optimizer.html) reduces filters applied after partial index scans in more cases where the filters are implicitly applied by the partial index predicate. This could lead to more efficient query plans in some cases. [#53507][#53507] +- Limited the frequency of an expensive operation due to schema changes. This makes workloads that perform schema changes at a high rate less resource-intensive. [#53605][#53605] +- Joins between very small tables are now more likely to use lookup join. [#53849][#53849] + +### Doc updates + +- Published a tutorial on orchestrating a secure [CockroachDB multi-region deployment on Amazon EKS](../v20.2/orchestrate-cockroachdb-with-kubernetes-multi-cluster.html). [#7782][#7782] +- Published [best practices for optimizing import performance](../v20.2/import-performance-best-practices.html) in CockroachDB. [#8035][#8035] + +### Contributors + +This release includes 283 merged PRs by 40 authors. +We would like to thank the following contributors from the CockroachDB community: + +- Cyrus Javan (first-time contributor) +- Deven Bhooshan (first-time contributor) +- Erik Grinaker (first-time contributor) +- Michael Meng (first-time contributor) +- Themis Papavasileiou (first-time contributor) +- Vincent Xiao +- himanshuchawla009 + +[#49399]: https://github.com/cockroachdb/cockroach/pull/49399 +[#50601]: https://github.com/cockroachdb/cockroach/pull/50601 +[#50721]: https://github.com/cockroachdb/cockroach/pull/50721 +[#51321]: https://github.com/cockroachdb/cockroach/pull/51321 +[#51567]: https://github.com/cockroachdb/cockroach/pull/51567 +[#51622]: https://github.com/cockroachdb/cockroach/pull/51622 +[#51775]: https://github.com/cockroachdb/cockroach/pull/51775 +[#51894]: https://github.com/cockroachdb/cockroach/pull/51894 +[#51902]: https://github.com/cockroachdb/cockroach/pull/51902 +[#51903]: https://github.com/cockroachdb/cockroach/pull/51903 +[#52233]: https://github.com/cockroachdb/cockroach/pull/52233 +[#52247]: https://github.com/cockroachdb/cockroach/pull/52247 +[#52278]: https://github.com/cockroachdb/cockroach/pull/52278 +[#52312]: https://github.com/cockroachdb/cockroach/pull/52312 +[#52377]: https://github.com/cockroachdb/cockroach/pull/52377 +[#52463]: https://github.com/cockroachdb/cockroach/pull/52463 +[#52496]: https://github.com/cockroachdb/cockroach/pull/52496 +[#52522]: https://github.com/cockroachdb/cockroach/pull/52522 +[#52598]: https://github.com/cockroachdb/cockroach/pull/52598 +[#52628]: https://github.com/cockroachdb/cockroach/pull/52628 +[#52656]: https://github.com/cockroachdb/cockroach/pull/52656 +[#52659]: https://github.com/cockroachdb/cockroach/pull/52659 +[#52711]: https://github.com/cockroachdb/cockroach/pull/52711 +[#52717]: https://github.com/cockroachdb/cockroach/pull/52717 +[#52726]: https://github.com/cockroachdb/cockroach/pull/52726 +[#52736]: https://github.com/cockroachdb/cockroach/pull/52736 +[#52738]: https://github.com/cockroachdb/cockroach/pull/52738 +[#52740]: https://github.com/cockroachdb/cockroach/pull/52740 +[#52754]: https://github.com/cockroachdb/cockroach/pull/52754 +[#52758]: https://github.com/cockroachdb/cockroach/pull/52758 +[#52771]: https://github.com/cockroachdb/cockroach/pull/52771 +[#52781]: https://github.com/cockroachdb/cockroach/pull/52781 +[#52798]: https://github.com/cockroachdb/cockroach/pull/52798 +[#52800]: https://github.com/cockroachdb/cockroach/pull/52800 +[#52804]: https://github.com/cockroachdb/cockroach/pull/52804 +[#52818]: https://github.com/cockroachdb/cockroach/pull/52818 +[#52819]: https://github.com/cockroachdb/cockroach/pull/52819 +[#52831]: https://github.com/cockroachdb/cockroach/pull/52831 +[#52832]: https://github.com/cockroachdb/cockroach/pull/52832 +[#52834]: https://github.com/cockroachdb/cockroach/pull/52834 +[#52840]: https://github.com/cockroachdb/cockroach/pull/52840 +[#52865]: https://github.com/cockroachdb/cockroach/pull/52865 +[#52869]: https://github.com/cockroachdb/cockroach/pull/52869 +[#52881]: https://github.com/cockroachdb/cockroach/pull/52881 +[#52884]: https://github.com/cockroachdb/cockroach/pull/52884 +[#52885]: https://github.com/cockroachdb/cockroach/pull/52885 +[#52892]: https://github.com/cockroachdb/cockroach/pull/52892 +[#52903]: https://github.com/cockroachdb/cockroach/pull/52903 +[#52905]: https://github.com/cockroachdb/cockroach/pull/52905 +[#52913]: https://github.com/cockroachdb/cockroach/pull/52913 +[#52921]: https://github.com/cockroachdb/cockroach/pull/52921 +[#52923]: https://github.com/cockroachdb/cockroach/pull/52923 +[#52925]: https://github.com/cockroachdb/cockroach/pull/52925 +[#52928]: https://github.com/cockroachdb/cockroach/pull/52928 +[#52938]: https://github.com/cockroachdb/cockroach/pull/52938 +[#52942]: https://github.com/cockroachdb/cockroach/pull/52942 +[#52944]: https://github.com/cockroachdb/cockroach/pull/52944 +[#52950]: https://github.com/cockroachdb/cockroach/pull/52950 +[#52955]: https://github.com/cockroachdb/cockroach/pull/52955 +[#52956]: https://github.com/cockroachdb/cockroach/pull/52956 +[#52957]: https://github.com/cockroachdb/cockroach/pull/52957 +[#52961]: https://github.com/cockroachdb/cockroach/pull/52961 +[#52963]: https://github.com/cockroachdb/cockroach/pull/52963 +[#52965]: https://github.com/cockroachdb/cockroach/pull/52965 +[#52968]: https://github.com/cockroachdb/cockroach/pull/52968 +[#52972]: https://github.com/cockroachdb/cockroach/pull/52972 +[#52975]: https://github.com/cockroachdb/cockroach/pull/52975 +[#52980]: https://github.com/cockroachdb/cockroach/pull/52980 +[#52983]: https://github.com/cockroachdb/cockroach/pull/52983 +[#52990]: https://github.com/cockroachdb/cockroach/pull/52990 +[#52997]: https://github.com/cockroachdb/cockroach/pull/52997 +[#53001]: https://github.com/cockroachdb/cockroach/pull/53001 +[#53003]: https://github.com/cockroachdb/cockroach/pull/53003 +[#53023]: https://github.com/cockroachdb/cockroach/pull/53023 +[#53052]: https://github.com/cockroachdb/cockroach/pull/53052 +[#53067]: https://github.com/cockroachdb/cockroach/pull/53067 +[#53068]: https://github.com/cockroachdb/cockroach/pull/53068 +[#53074]: https://github.com/cockroachdb/cockroach/pull/53074 +[#53076]: https://github.com/cockroachdb/cockroach/pull/53076 +[#53127]: https://github.com/cockroachdb/cockroach/pull/53127 +[#53132]: https://github.com/cockroachdb/cockroach/pull/53132 +[#53137]: https://github.com/cockroachdb/cockroach/pull/53137 +[#53139]: https://github.com/cockroachdb/cockroach/pull/53139 +[#53145]: https://github.com/cockroachdb/cockroach/pull/53145 +[#53146]: https://github.com/cockroachdb/cockroach/pull/53146 +[#53153]: https://github.com/cockroachdb/cockroach/pull/53153 +[#53156]: https://github.com/cockroachdb/cockroach/pull/53156 +[#53160]: https://github.com/cockroachdb/cockroach/pull/53160 +[#53162]: https://github.com/cockroachdb/cockroach/pull/53162 +[#53164]: https://github.com/cockroachdb/cockroach/pull/53164 +[#53172]: https://github.com/cockroachdb/cockroach/pull/53172 +[#53181]: https://github.com/cockroachdb/cockroach/pull/53181 +[#53193]: https://github.com/cockroachdb/cockroach/pull/53193 +[#53203]: https://github.com/cockroachdb/cockroach/pull/53203 +[#53215]: https://github.com/cockroachdb/cockroach/pull/53215 +[#53217]: https://github.com/cockroachdb/cockroach/pull/53217 +[#53218]: https://github.com/cockroachdb/cockroach/pull/53218 +[#53220]: https://github.com/cockroachdb/cockroach/pull/53220 +[#53224]: https://github.com/cockroachdb/cockroach/pull/53224 +[#53226]: https://github.com/cockroachdb/cockroach/pull/53226 +[#53230]: https://github.com/cockroachdb/cockroach/pull/53230 +[#53237]: https://github.com/cockroachdb/cockroach/pull/53237 +[#53240]: https://github.com/cockroachdb/cockroach/pull/53240 +[#53241]: https://github.com/cockroachdb/cockroach/pull/53241 +[#53243]: https://github.com/cockroachdb/cockroach/pull/53243 +[#53244]: https://github.com/cockroachdb/cockroach/pull/53244 +[#53252]: https://github.com/cockroachdb/cockroach/pull/53252 +[#53263]: https://github.com/cockroachdb/cockroach/pull/53263 +[#53275]: https://github.com/cockroachdb/cockroach/pull/53275 +[#53287]: https://github.com/cockroachdb/cockroach/pull/53287 +[#53290]: https://github.com/cockroachdb/cockroach/pull/53290 +[#53291]: https://github.com/cockroachdb/cockroach/pull/53291 +[#53296]: https://github.com/cockroachdb/cockroach/pull/53296 +[#53304]: https://github.com/cockroachdb/cockroach/pull/53304 +[#53307]: https://github.com/cockroachdb/cockroach/pull/53307 +[#53321]: https://github.com/cockroachdb/cockroach/pull/53321 +[#53326]: https://github.com/cockroachdb/cockroach/pull/53326 +[#53329]: https://github.com/cockroachdb/cockroach/pull/53329 +[#53337]: https://github.com/cockroachdb/cockroach/pull/53337 +[#53343]: https://github.com/cockroachdb/cockroach/pull/53343 +[#53344]: https://github.com/cockroachdb/cockroach/pull/53344 +[#53356]: https://github.com/cockroachdb/cockroach/pull/53356 +[#53358]: https://github.com/cockroachdb/cockroach/pull/53358 +[#53359]: https://github.com/cockroachdb/cockroach/pull/53359 +[#53371]: https://github.com/cockroachdb/cockroach/pull/53371 +[#53385]: https://github.com/cockroachdb/cockroach/pull/53385 +[#53386]: https://github.com/cockroachdb/cockroach/pull/53386 +[#53387]: https://github.com/cockroachdb/cockroach/pull/53387 +[#53405]: https://github.com/cockroachdb/cockroach/pull/53405 +[#53435]: https://github.com/cockroachdb/cockroach/pull/53435 +[#53441]: https://github.com/cockroachdb/cockroach/pull/53441 +[#53445]: https://github.com/cockroachdb/cockroach/pull/53445 +[#53478]: https://github.com/cockroachdb/cockroach/pull/53478 +[#53495]: https://github.com/cockroachdb/cockroach/pull/53495 +[#53496]: https://github.com/cockroachdb/cockroach/pull/53496 +[#53501]: https://github.com/cockroachdb/cockroach/pull/53501 +[#53502]: https://github.com/cockroachdb/cockroach/pull/53502 +[#53507]: https://github.com/cockroachdb/cockroach/pull/53507 +[#53510]: https://github.com/cockroachdb/cockroach/pull/53510 +[#53523]: https://github.com/cockroachdb/cockroach/pull/53523 +[#53529]: https://github.com/cockroachdb/cockroach/pull/53529 +[#53551]: https://github.com/cockroachdb/cockroach/pull/53551 +[#53553]: https://github.com/cockroachdb/cockroach/pull/53553 +[#53562]: https://github.com/cockroachdb/cockroach/pull/53562 +[#53564]: https://github.com/cockroachdb/cockroach/pull/53564 +[#53565]: https://github.com/cockroachdb/cockroach/pull/53565 +[#53579]: https://github.com/cockroachdb/cockroach/pull/53579 +[#53583]: https://github.com/cockroachdb/cockroach/pull/53583 +[#53600]: https://github.com/cockroachdb/cockroach/pull/53600 +[#53605]: https://github.com/cockroachdb/cockroach/pull/53605 +[#53636]: https://github.com/cockroachdb/cockroach/pull/53636 +[#53643]: https://github.com/cockroachdb/cockroach/pull/53643 +[#53645]: https://github.com/cockroachdb/cockroach/pull/53645 +[#53650]: https://github.com/cockroachdb/cockroach/pull/53650 +[#53667]: https://github.com/cockroachdb/cockroach/pull/53667 +[#53674]: https://github.com/cockroachdb/cockroach/pull/53674 +[#53682]: https://github.com/cockroachdb/cockroach/pull/53682 +[#53688]: https://github.com/cockroachdb/cockroach/pull/53688 +[#53691]: https://github.com/cockroachdb/cockroach/pull/53691 +[#53697]: https://github.com/cockroachdb/cockroach/pull/53697 +[#53699]: https://github.com/cockroachdb/cockroach/pull/53699 +[#53708]: https://github.com/cockroachdb/cockroach/pull/53708 +[#53709]: https://github.com/cockroachdb/cockroach/pull/53709 +[#53717]: https://github.com/cockroachdb/cockroach/pull/53717 +[#53721]: https://github.com/cockroachdb/cockroach/pull/53721 +[#53722]: https://github.com/cockroachdb/cockroach/pull/53722 +[#53726]: https://github.com/cockroachdb/cockroach/pull/53726 +[#53759]: https://github.com/cockroachdb/cockroach/pull/53759 +[#53762]: https://github.com/cockroachdb/cockroach/pull/53762 +[#53766]: https://github.com/cockroachdb/cockroach/pull/53766 +[#53775]: https://github.com/cockroachdb/cockroach/pull/53775 +[#53778]: https://github.com/cockroachdb/cockroach/pull/53778 +[#53796]: https://github.com/cockroachdb/cockroach/pull/53796 +[#53801]: https://github.com/cockroachdb/cockroach/pull/53801 +[#53802]: https://github.com/cockroachdb/cockroach/pull/53802 +[#53837]: https://github.com/cockroachdb/cockroach/pull/53837 +[#53838]: https://github.com/cockroachdb/cockroach/pull/53838 +[#53844]: https://github.com/cockroachdb/cockroach/pull/53844 +[#53846]: https://github.com/cockroachdb/cockroach/pull/53846 +[#53848]: https://github.com/cockroachdb/cockroach/pull/53848 +[#53849]: https://github.com/cockroachdb/cockroach/pull/53849 +[#53853]: https://github.com/cockroachdb/cockroach/pull/53853 +[#53856]: https://github.com/cockroachdb/cockroach/pull/53856 +[#53857]: https://github.com/cockroachdb/cockroach/pull/53857 +[#53863]: https://github.com/cockroachdb/cockroach/pull/53863 +[#53865]: https://github.com/cockroachdb/cockroach/pull/53865 +[#53866]: https://github.com/cockroachdb/cockroach/pull/53866 +[#53868]: https://github.com/cockroachdb/cockroach/pull/53868 +[#53870]: https://github.com/cockroachdb/cockroach/pull/53870 +[#53902]: https://github.com/cockroachdb/cockroach/pull/53902 +[#53930]: https://github.com/cockroachdb/cockroach/pull/53930 +[#53961]: https://github.com/cockroachdb/cockroach/pull/53961 +[#53965]: https://github.com/cockroachdb/cockroach/pull/53965 +[#53999]: https://github.com/cockroachdb/cockroach/pull/53999 +[#54013]: https://github.com/cockroachdb/cockroach/pull/54013 +[#54024]: https://github.com/cockroachdb/cockroach/pull/54024 +[#unknown]: https://github.com/cockroachdb/cockroach/pull/unknown +[05244b849]: https://github.com/cockroachdb/cockroach/commit/05244b849 +[05de90b83]: https://github.com/cockroachdb/cockroach/commit/05de90b83 +[069715cb6]: https://github.com/cockroachdb/cockroach/commit/069715cb6 +[169aad51e]: https://github.com/cockroachdb/cockroach/commit/169aad51e +[1a876293e]: https://github.com/cockroachdb/cockroach/commit/1a876293e +[2453954a5]: https://github.com/cockroachdb/cockroach/commit/2453954a5 +[26013632c]: https://github.com/cockroachdb/cockroach/commit/26013632c +[282f22876]: https://github.com/cockroachdb/cockroach/commit/282f22876 +[29f88d836]: https://github.com/cockroachdb/cockroach/commit/29f88d836 +[2eb8e9185]: https://github.com/cockroachdb/cockroach/commit/2eb8e9185 +[41899384a]: https://github.com/cockroachdb/cockroach/commit/41899384a +[43b10cec4]: https://github.com/cockroachdb/cockroach/commit/43b10cec4 +[4474d832b]: https://github.com/cockroachdb/cockroach/commit/4474d832b +[44ab54282]: https://github.com/cockroachdb/cockroach/commit/44ab54282 +[4c9110f70]: https://github.com/cockroachdb/cockroach/commit/4c9110f70 +[5113f1b6e]: https://github.com/cockroachdb/cockroach/commit/5113f1b6e +[543017094]: https://github.com/cockroachdb/cockroach/commit/543017094 +[5d0b98964]: https://github.com/cockroachdb/cockroach/commit/5d0b98964 +[5f9d6786c]: https://github.com/cockroachdb/cockroach/commit/5f9d6786c +[6180d9475]: https://github.com/cockroachdb/cockroach/commit/6180d9475 +[6a071ce17]: https://github.com/cockroachdb/cockroach/commit/6a071ce17 +[6ae5c973d]: https://github.com/cockroachdb/cockroach/commit/6ae5c973d +[78825b5bb]: https://github.com/cockroachdb/cockroach/commit/78825b5bb +[78a9e17dd]: https://github.com/cockroachdb/cockroach/commit/78a9e17dd +[8a25bd6ec]: https://github.com/cockroachdb/cockroach/commit/8a25bd6ec +[8d3134010]: https://github.com/cockroachdb/cockroach/commit/8d3134010 +[9636b0cf6]: https://github.com/cockroachdb/cockroach/commit/9636b0cf6 +[9bb92efcc]: https://github.com/cockroachdb/cockroach/commit/9bb92efcc +[9e3fcdedd]: https://github.com/cockroachdb/cockroach/commit/9e3fcdedd +[a61da063b]: https://github.com/cockroachdb/cockroach/commit/a61da063b +[ae67eaba0]: https://github.com/cockroachdb/cockroach/commit/ae67eaba0 +[b3566a06e]: https://github.com/cockroachdb/cockroach/commit/b3566a06e +[b3a3d6037]: https://github.com/cockroachdb/cockroach/commit/b3a3d6037 +[b5f85a771]: https://github.com/cockroachdb/cockroach/commit/b5f85a771 +[b701c7666]: https://github.com/cockroachdb/cockroach/commit/b701c7666 +[b76b7da53]: https://github.com/cockroachdb/cockroach/commit/b76b7da53 +[bbdee2566]: https://github.com/cockroachdb/cockroach/commit/bbdee2566 +[bdddab4a0]: https://github.com/cockroachdb/cockroach/commit/bdddab4a0 +[c2427bd9d]: https://github.com/cockroachdb/cockroach/commit/c2427bd9d +[d26479066]: https://github.com/cockroachdb/cockroach/commit/d26479066 +[dabbf57f9]: https://github.com/cockroachdb/cockroach/commit/dabbf57f9 +[dd1c98506]: https://github.com/cockroachdb/cockroach/commit/dd1c98506 +[e14ee8ef5]: https://github.com/cockroachdb/cockroach/commit/e14ee8ef5 +[e639c974f]: https://github.com/cockroachdb/cockroach/commit/e639c974f +[e69f86017]: https://github.com/cockroachdb/cockroach/commit/e69f86017 +[ea20c1dff]: https://github.com/cockroachdb/cockroach/commit/ea20c1dff +[eec2c1d4f]: https://github.com/cockroachdb/cockroach/commit/eec2c1d4f +[f0a97790e]: https://github.com/cockroachdb/cockroach/commit/f0a97790e +[fb7beac83]: https://github.com/cockroachdb/cockroach/commit/fb7beac83 +[fbb4338b8]: https://github.com/cockroachdb/cockroach/commit/fbb4338b8 +[ff3958f1e]: https://github.com/cockroachdb/cockroach/commit/ff3958f1e +[#7782]: https://github.com/cockroachdb/docs/pull/7782 +[#8035]: https://github.com/cockroachdb/docs/pull/8035 \ No newline at end of file