---
title: What's New in v20.2.3
toc: true
summary: Additions and changes in CockroachDB version v20.2.3 since version v20.2.2
---
## December 14, 2020
Get future release notes emailed to you:
### Downloads
### Docker image
{% include copy-clipboard.html %}
~~~shell
$ docker pull cockroachdb/cockroach-unstable:v20.2.3
~~~
### SQL language changes
- Added admin-only `crdb_internal` [functions](../v20.2/functions-and-operators.html) to enable descriptor repair in dire circumstances. [#56937][#56937]
- Introduced a hint when GEOS is improperly installed to read the documented [instructions on installing CockroachDB]((../v20.2/install-cockroachdb.html) [#57033][#57033]
- Added support for running [`IMPORT`](../v20.2/import.html) in a mixed-version cluster. [#57599][#57599]
### API endpoint changes
- Added a new prometheus metric called `seconds_until_license_expiry` that reports on the number of seconds until the enterprise license on the cluster expires and 0 if there is no license. It will return a negative number if the expiration is in the past. [#56463][#56463]
### DB Console changes
- Updated design for custom date range selector on the [Cluster > Node Map](../v20.2/ui-cluster-overview-page.html#node-map-enterprise) and [Metrics](../v20.2/ui-overview-dashboard.html) pages. [#57115][#57115]
- [Job details page](../v20.2/ui-jobs-page.html) now shows description for failed job. [#57116][#57116]
### Bug fixes
- Eliminated opportunity for live lock in jobs subsystem due to frequent updates to already-finished jobs. [#56864][#56864]
- Fixed a bug causing the `LogFile` reserved API, which was used by [`cockroach debug zip`](../v20.2/cockroach-debug-zip.html), to corrupt log entries. [#56902][#56902]
- Fixed a bug introduced in the 20.2 series that could cause CockroachDB to crash due to range scans over virtual tables with virtual indexes. [#56924][#56924]
- Fixed a race condition in the [`tpcc` workload](../v20.2/cockroach-workload.html) with the `--scatter` flag where tables could be scattered multiple times or not at all. [#56978][#56978]
- Fixed a bug causing tables and metadata to be unavailable due to spurious `missing fk back reference` validation errors. [#57083][#57083]
- Fixed a bug related to the validation of un-upgraded, pre-19.2 inbound [foreign keys](../v20.2/foreign-key.html). [#57133][#57133]
- Creating a [materialized view](../v20.2/views.html) that references a column with a `NULL` value no longer results in an error. [#57193][#57193]
- Fixed a bug that caused an "ambiguous column reference" error during foreign key cascading updates. This error was incorrectly produced when the child table's reference column name was equal to the concatenation of the parent's reference column name and "_new", and when the child table had a [`CHECK`](../v20.2/check.html) constraint, a [computed column](../v20.2/computed-columns.html), or a [partial index](../v20.2/partial-indexes.html) predicate expression that referenced the column. This bug was introduced in version 20.2.0. [#57234][#57234]
- Fixed a bug that could cause a crash loop in rare circumstances. [#57312][#57312]
- `ST_GeomFromGeoJSON` now sets the SRID to 4326, matching PostGIS 3.0 / RFC7946 behavior. [#57245][#57245]
- [`SELECT FOR UPDATE`](../v20.2/select-for-update.html) now requires both `SELECT` and `UPDATE` [privileges](../v20.2/authorization.html), instead of just `UPDATE` privileges. [#57350][#57350]
- Fixed a bug that caused errors or corrupted partial indexes of child tables in foreign key relationships with cascading [`UPDATE`](../v20.2/update.html)s and [`DELETE`](../v20.2/delete.html)s. The corrupt partial indexes could result in incorrect query results. Any partial indexes on child tables of foreign key relationships with `ON DELETE CASCADE` or `ON UPDATE CASCADE` actions may be corrupt and should be dropped and re-created. This bug was introduced in version 20.2.0. [#57325][#57325]
- Fixed a bug that could cause new nodes to fail to start up when [upgrading to 20.2](../v20.2/upgrade-cockroach-version.html), due to a startup migration which would fail to terminate due to incorrect pagination in the presence of at least 100 running jobs. [#57437][#57437]
- Fixed a bug causing an internal error when executing `JSONB - String` operations via the [vectorized execution engine](../v20.2/vectorized-execution.html). This bug was introduced in version 20.2.0. [#57388][#57388]
- Fixed an internal error that could occur when using aggregate and window functions in an [`ORDER BY`](../v20.2/query-order.html) for a `UNION` or `VALUES` clause. [#57521][#57521]
- [`DROP TYPE`](../v20.2/drop-type.html) and certain other statements that work over SQL scalar types now properly support type names containing special characters. [#57558][#57558]
- Fixed performance regression to reading virtual tables which introspect the schema. This regression was introduced in version 20.2.0. [#57574][#57574]
- Removed the `system.jobs` full table scan, which can be expensive with many completed jobs. [#57591][#57591]
- Users can now perform a [cluster restore](../v20.2/restore.html) from old backup chains (i.e., incremental backups on top of full backups), when using the `BACKUP INTO` syntax. [#57667][#57667]
- Fixed a bug causing CockroachDB to crash when creating backup schedules writing to GCS buckets. [#57651][#57651]
- Fixed a bug causing users of the OSS builds of CockroachDB to see "Page Not Found" when loading the [DB Console](../v20.2/ui-overview.html). [#56776][#56776]
### Performance improvements
- Interactions between [Raft](../v20.2/architecture/replication-layer.html) heartbeats and the Raft goroutine pool scheduler are now more efficient and avoid excessive mutex contention. This was observed to prevent instability on large machines (32+ vCPU) in clusters with many ranges (50k+ per node). [#57008][#57008]
### Contributors
This release includes 46 merged PRs by 20 authors.
We would like to thank the following contributors from the CockroachDB community:
- Joshua M. Clulow (first-time contributor)
[#56443]: https://github.com/cockroachdb/cockroach/pull/56443
[#56463]: https://github.com/cockroachdb/cockroach/pull/56463
[#56776]: https://github.com/cockroachdb/cockroach/pull/56776
[#56864]: https://github.com/cockroachdb/cockroach/pull/56864
[#56902]: https://github.com/cockroachdb/cockroach/pull/56902
[#56924]: https://github.com/cockroachdb/cockroach/pull/56924
[#56937]: https://github.com/cockroachdb/cockroach/pull/56937
[#56978]: https://github.com/cockroachdb/cockroach/pull/56978
[#57008]: https://github.com/cockroachdb/cockroach/pull/57008
[#57033]: https://github.com/cockroachdb/cockroach/pull/57033
[#57083]: https://github.com/cockroachdb/cockroach/pull/57083
[#57115]: https://github.com/cockroachdb/cockroach/pull/57115
[#57116]: https://github.com/cockroachdb/cockroach/pull/57116
[#57133]: https://github.com/cockroachdb/cockroach/pull/57133
[#57193]: https://github.com/cockroachdb/cockroach/pull/57193
[#57234]: https://github.com/cockroachdb/cockroach/pull/57234
[#57245]: https://github.com/cockroachdb/cockroach/pull/57245
[#57312]: https://github.com/cockroachdb/cockroach/pull/57312
[#57325]: https://github.com/cockroachdb/cockroach/pull/57325
[#57350]: https://github.com/cockroachdb/cockroach/pull/57350
[#57388]: https://github.com/cockroachdb/cockroach/pull/57388
[#57437]: https://github.com/cockroachdb/cockroach/pull/57437
[#57484]: https://github.com/cockroachdb/cockroach/pull/57484
[#57521]: https://github.com/cockroachdb/cockroach/pull/57521
[#57558]: https://github.com/cockroachdb/cockroach/pull/57558
[#57574]: https://github.com/cockroachdb/cockroach/pull/57574
[#57591]: https://github.com/cockroachdb/cockroach/pull/57591
[#57599]: https://github.com/cockroachdb/cockroach/pull/57599
[#57651]: https://github.com/cockroachdb/cockroach/pull/57651
[#57667]: https://github.com/cockroachdb/cockroach/pull/57667