# What's New in v19.1

CockroachDB v19.1 is a required Regular Release.

Refer to Major release types before installing or upgrading for release timing and support details.

On this page, you can read about changes and find downloads for all production and testing releases of CockroachDB v19.1

- For key feature enhancements in v19.1 and other upgrade considerations, refer to the notes for v19.1.0.

- For details about release types, naming, and licensing, refer to the Releases page.

- Be sure to also review the Release Support Policy.

- After downloading a supported CockroachDB binary, learn how to install CockroachDB or upgrade your cluster.

Get future release notes emailed to you:

Thanks!

## v19.1.11

Release Date: July 7, 2020

Warning:

Cockroach Labs has discovered a bug relating to incremental backups, for CockroachDB v19.1.0 - v19.1.11. If a backup coincides with an in-progress index creation (backfill), `RESTORE`, or `IMPORT`, it is possible that a subsequent incremental backup will not include all of the indexed, restored or imported data.

For more information, including other affected versions, see Technical Advisory 63162.

### Bug fixes

- Fixed a bug in `TRUNCATE` that could leave tables in a state where they could not be renamed. #50766

### Contributors

This release includes 1 merged PR by 1 author.

## v19.1.10

Release Date: June 29, 2020

Warning:

Cockroach Labs has discovered a bug relating to incremental backups, for CockroachDB v19.1.0 - v19.1.11. If a backup coincides with an in-progress index creation (backfill), `RESTORE`, or `IMPORT`, it is possible that a subsequent incremental backup will not include all of the indexed, restored or imported data.

For more information, including other affected versions, see Technical Advisory 63162.

### Security updates

- HTTP endpoints beginning with `/debug/` now require a valid `admin` login session. #50491

### Bug fixes

- Previously, HTTP requests would start to fail with error 503 "`transport: authentication handshake failed: io: read/write on closed pipe`" and never become possible again until restarting the node. This has been fixed. This bug has existed since v2.1 or earlier. #48483
- Previously, when the value passed to `--drain-wait` was very small, but non-zero, `cockroach quit` in certain cases would not proceed to perform a hard shutdown. This has been corrected. This bug was present in v19.1.9, v19.2.7, and v20.1.1. #49365
- Fixed a RocksDB bug that could result in inconsistencies in rare circumstances. #50510

### Build changes

- Release Docker images are now built on Debian 9.12. #50480

### Doc updates

- Updated guidance on node decommissioning. #7304
- Renamed "whitelist/blacklist" terminology to "allowlist/blocklist". #7535
- Updated the Releases navigation in the sidebar to expose the latest Production and Testing releases. #7550
- Fixed scrollbar visibility on Chrome. #7487

### Contributors

This release includes 10 merged PRs by 6 authors. We would like to thank the following contributors from the CockroachDB community:

- Drew Kimball (first-time contributor, CockroachDB team member)
- Jackson Owens (first-time contributor, CockroachDB team member)
- James H. Linder (first-time contributor, CockroachDB team member)

## v19.1.9

Release Date: May 12, 2020

This page lists additions and changes in v19.1.9 since v19.1.8.

- For a comprehensive summary of features in v19.1, see the v19.1 GA release notes.
- To upgrade to v19.1, see Upgrade to CockroachDB v19.1

Warning:

Cockroach Labs has discovered a bug relating to incremental backups, for CockroachDB v19.1.0 - v19.1.11. If a backup coincides with an in-progress index creation (backfill), `RESTORE`, or `IMPORT`, it is possible that a subsequent incremental backup will not include all of the indexed, restored or imported data.

For more information, including other affected versions, see Technical Advisory 63162.

### Backward-incompatible changes

- Previously, the phase of server shutdown responsible for range lease transfers to other nodes would give up after 10,000 attempts of transferring replica leases away, regardless of the value of `server.shutdown.lease_transfer_wait`. The limit of 10,000 attempts has been removed, so that now only the maximum duration `server.shutdown.lease_transfer_wait` applies. #47698
- The textual error and warning messages displayed by `cockroach quit` under various circumstances have been updated. Meanwhile, the message "`ok`" remains as indicator that the operation has likely succeeded. #47698
- `cockroach quit` now prints out progress details on its standard error stream, even when `--logtostderr` is not specified. Previously, nothing was printed on standard error. Scripts that wish to ignore this output can redirect the `stderr` stream. #47698

### Security updates

- Non-licensed users are now able to add more principals to the special superuser role/group `admin`. Note: Creation of additional roles is still a licensed feature. #45396

### General changes

- Previously, the phase of server shutdown responsible for range lease transfers to other nodes had a hard timeout of 5 seconds. This patch makes this timeout configurable via the new cluster setting `server.shutdown.lease_transfer_wait`. #47698

### SQL language changes

- It is now possible to use `GRANT` and `REVOKE` to add users to the `admin` role without a valid license. This change aims to enable use of the Admin UI and other privileged features without a license. #45396
- The type checking code now prefers aggregate overloads with string inputs if there are multiple possible candidates due to arguments of unknown type. #46902
- Added a new "unimplemented" error when attempting to `ADD CONSTRAINT` with the `EXCLUDE USING` syntax. #46912
- Added support for using `CREATE INDEX ... INCLUDE (col1, col2, ...)`, which is an alias that PostgreSQL uses that is analogous to our `STORING (col1, col2, ...)` syntax. #46912
- Added support for parsing the `REINDEX` syntax, which results in an "unimplemented" error that explains that `REINDEX`ing is not required in CockroachDB. #46912
- CockroachDB now parses the `CREATE INDEX CONCURRENTLY` and `DROP INDEX CONCURRENTLY` syntaxes, which return errors when used. #46808

### Command-line changes

- `cockroach debug zip` now avoids creating invalid zip files if some of its requests encounter an error. #46637
- The time that `cockroach quit` waits client-side for the node to drain (remove existing clients and push range leases away) is now configurable via the command-line flag `--drain-wait`. Note that separate server-side timeouts also apply separately; check the `server.shutdown.*` cluster settings for details. #47698
- It is now possible to drain a node without shutting down the process, using `cockroach node drain`. This makes it easier to integrate with service managers and orchestration: it now becomes safe to issue `cockroach node drain` and then separately stop the service via a process manager or orchestrator. Without this new mode, there is a risk to misconfigure the service manager to auto-restart the node after it shuts down via `quit`, in a way that's surprising or unwanted. The new command `node drain` also recognizes the new `--drain-wait` flag. #47698
- The default value of the parameter `--drain-wait` for `cockroach quit` has been increased from 1 minute to 10 minutes, to give more time for nodes with thousands of ranges to migrate their leases away. #47698
- The commands `cockroach quit` and `cockroach node drain` now report a "work remaining" metric on their standard error stream. The value reduces until it reaches `0`, to indicate that the graceful shutdown has completed server-side. An operator can now rely on `cockroach node drain` to obtain confidence of a graceful shutdown prior to terminating the server process. #47698

### Admin UI changes

- Metrics relating to SQL transaction restarts and rollbacks are now properly captured and exported. #46273

### Bug fixes

- Fixed a "cannot map variable" error in some rare cases involving joins. #44860
- Fixed incorrect de-duplication of impure expressions (like `gen_random_uuid`) in projections and default values. #44916
- Fixed an internal error that could occur when `NULLIF` was called with one null argument. #45391
- It is now possible to create inverted indexes on columns whose names are mixed-case. #45678
- Previously, drivers that did not truncate trailing zeroes for decimals in the binary format ended up having inaccuracies of up to 10^4 during the decode step. Fixed this error by truncating the trailing zeroes as appropriate. This fixes known incorrect decoding cases with Postgrex in Elixir. #45671
- Fixed a name resolution error that could occur when a common table expression (CTE) was referenced in the `SELECT` list of a query using the syntax `<cte-name>.<col-name>`. #45782
- Previously, CockroachDB could crash when computing window functions with `RANGE` mode of framing when one of the bounds was either of `offset PRECEDING` or `offset FOLLOWING` type when there were `NULL` values in the single column from `ORDER BY` clause. Additionally, in `RANGE` mode bounds `0 PRECEDING` and `0 FOLLOWING` could be handled incorrectly. Now this has been fixed. #45806
- Fixed an internal error that could occur in the optimizer when a `WHERE` filter contained at least one correlated subquery and one non-correlated subquery. #46168
- CockroachDB now properly supports using `--url` with query options (e.g., `application_name`) without specifying `sslmode`. The default of `sslmode=disable` is assumed in that case. #46480
- Fixed a bug where operations on an index that contained a collated string in descending order would fail. #46579
- Fixed an incorrect query result that could occur when a scalar aggregate was called with a null input. #46902
- Fixed a data race on AST nodes for `SELECT` statements that include a `WINDOW` clause. It is unclear whether this could have resulted in incorrect results being returned for these queries. #47177
- Fixed incorrect results that could occur when casting negative intervals or timestamps to type decimal. #47524
- Previously, CockroachDB was incorrectly releasing memory used by hash aggregation. This could lead to a crash (which was more likely when hash aggregation had store on the order of 100k of groups) and is now fixed. #47520
- Fixed a bug that could lead to data corruption or data loss if a replica was both the source of a snapshot and was being concurrently removed from the range. This scenario is rare, but possible. #48317

### Contributors

This release includes 27 merged PRs by 10 authors.

## v19.1.8

Release Date: February 11, 2020

This page lists additions and changes in v19.1.8 since v19.1.7.

- For a comprehensive summary of features in v19.1, see the v19.1 GA release notes.
- To upgrade to v19.1, see Upgrade to CockroachDB v19.1

Warning:

Cockroach Labs has discovered a bug relating to incremental backups, for CockroachDB v19.1.0 - v19.1.11. If a backup coincides with an in-progress index creation (backfill), `RESTORE`, or `IMPORT`, it is possible that a subsequent incremental backup will not include all of the indexed, restored or imported data.

For more information, including other affected versions, see Technical Advisory 63162.

### Security updates

- Previous versions of CockroachDB were incorrectly enabling non-admin SQL users to use the statements details in the Admin UI and the HTTP endpoint `/_status/statements`. This information is sensitive because the endpoint does not hide data that the requester does not have privilege over. This has been corrected by requiring a SQL `admin` user to access the statements details page and the HTTP endpoint. #44355

### Admin UI changes

- We previously introduced a fix on the admin UI to prevent non-admin SQL users from executing queries - however, this accidentally made certain pages requiring table details not to display. This error has now been fixed. #44193

### Bug fixes

- Fixed a bug where repeated use of `COPY FROM PARENT` on an index or partition could cause an unexpected validation error. #44266
- Fixed a planning bug related to `FULL` joins between single-row relations. #44242
- Fixed incorrect plans in very rare cases involving filters that aren't constant folded in the optimizer but that can be evaluated statically when running a given query. #44602
- Fixed "no output column equivalent to.." and "column not in input" errors in some cases involving `DISTINCT ON` and `ORDER BY`. [#44598][#44598]
- Fixed "expected constant FD to be strict" internal error. #44599
- Fixed a bug where running a query with the `LIKE` operator using the custom `ESCAPE` symbol when the pattern contained Unicode characters could result in an internal error in CockroachDB. #44649
- Fixed possibly incorrect query results in various cornercases, especially when `SELECT DISTINCT` is used. #44606
- Fixed an internal error that could happen in the planner when table statistics were collected manually using `CREATE STATISTICS` for different columns at different times. #44443
- CockroachDB no longer repeatedly looks for non-existing jobs, which may cause high memory usage, when cleaning up schema changes. #44824

### Contributors

This release includes 12 merged PRs by 9 authors. We would like to thank the following contributors from the CockroachDB community:

- Oliver Tan (first-time contributor, CockroachDB team member)

## v19.1.7

Release Date: January 27, 2020

This page lists additions and changes in v19.1.7 since v19.1.6.

- For a comprehensive summary of features in v19.1, see the v19.1 GA release notes.
- To upgrade to v19.1, see Upgrade to CockroachDB v19.1

Warning:

Cockroach Labs has discovered a bug relating to incremental backups, for CockroachDB v19.1.0 - v19.1.11. If a backup coincides with an in-progress index creation (backfill), `RESTORE`, or `IMPORT`, it is possible that a subsequent incremental backup will not include all of the indexed, restored or imported data.

For more information, including other affected versions, see Technical Advisory 63162.

### Bug fixes

- Some incorrect issue links referenced to by error hints have been corrected. #43234
- Prevented rare cases of infinite looping on database files written with a CockroachDB version earlier than v2.1.9. #43253
- Changefeeds now emit backfill row updates for a dropped column when the table descriptor drops that column. #43037
- `EXPLAIN` can now be used with statements that use `AS OF SYSTEM TIME`. #43305
- Fixed a bug that caused some jobs to be left indefinitely in a pending state and never run. #43416
- Migrating the privileges on the `system.lease` table no longer creates a deadlock during a cluster upgrade. #43508
- Fixed a bug in the parsing logic for `server.host_based_authentication.configuration`, where both single-character strings and quoted strings containing spaces and separated by commas were not properly parsed. This would cause rules for usernames consisting of a single character or usernames containing spaces to apply improperly. #43812
- A SQL row write that is re-issued after already succeeding no longer throws a duplicate key error when the previous write in its transaction deleted the row. #43942
- Fixed a changefeed bug where a resolved timestamp might be published before all events that precede it have been published in the presence of a range merge. #44082
- Converted a panic when using collated strings to an error. #44119

### Performance improvements

- A transaction running into multiple intents from an abandoned conflicting transaction now cleans them up more efficiently. #43589

### Contributors

This release includes 11 merged PRs by 7 authors.

## v19.1.6

Release Date: December 16, 2019

This page lists additions and changes in v19.1.6 since v19.1.5.

- For a comprehensive summary of features in v19.1, see the v19.1 GA release notes.
- To upgrade to v19.1, see Upgrade to CockroachDB v19.1

Warning:

Cockroach Labs has discovered a bug relating to incremental backups, for CockroachDB v19.1.0 - v19.1.11. If a backup coincides with an in-progress index creation (backfill), `RESTORE`, or `IMPORT`, it is possible that a subsequent incremental backup will not include all of the indexed, restored or imported data.

For more information, including other affected versions, see Technical Advisory 63162.

### Security updates

- CockroachDB previously allowed non-authenticated access to privileged HTTP endpoints like `/_admin/v1/events`, which operate using `root` user permissions and can thus access (and sometimes modify) any and all data in the cluster. This security vulnerability has been patched by disallowing non-authenticated access to these endpoints and restricting access to admin users only.

  Note:

  Users who have built monitoring automation using these HTTP endpoints must modify their automation to work using an HTTP session token for an admin user.

- Some Admin UI screens (e.g., Jobs) were previously incorrectly displayed using `root` user permissions, regardless of the logged-in user's credentials. This enabled insufficiently privileged users to access privileged information. This security vulnerability has been patched by using the credentials of the logged-in user to display all Admin UI screens.

- Privileged HTTP endpoints and certain Admin UI screens require an admin user. However, `root` is disallowed from logging in via HTTP and it is not possible to create additional admin accounts without an Enterprise license. This is further discussed here and will be addressed in an upcoming patch revision.

  Note:

  Users without an Enterprise license can create an additional admin user using a temporary evaluation license, until an alternative is available. A user created this way will persist beyond the license expiry.

- Some Admin UI screens currently display an error or a blank page when viewed by a non-admin user (e.g., Table Details). This is a known limitation mistakenly introduced by the changes described above. This situation is discussed further here and will be addressed in an upcoming patch revision. The list of UI pages affected includes but is not limited to:

  - Job details
  - Database details
  - Table details
  - Zone configurations
  Note:

  Users can access these Admin UI screens using an admin user until a fix is available.

The list of HTTP endpoints affected by the first change above includes:

HTTP Endpoint | Description | Sensitive information revealed | Special (see below)
--- | --- | --- | ---
`/_admin/v1/data_distribution` | Database-table-node mapping | Database and table names |
`/_admin/v1/databases/{database}/tables/{table}/stats` | Table stats histograms | Stored table data via PK values |
`/_admin/v1/drain` | API to shut down a node | Can cause DoS on cluster |
`/_admin/v1/enqueue_range` | Force range rebalancing | Can cause DoS on cluster |
`/_admin/v1/events` | Event log | Usernames, stored object names, privilege mappings |
`/_admin/v1/nontablestats` | Non-table statistics | Stored table data via PK values |
`/_admin/v1/rangelog` | Range log | Stored table data via PK values |
`/_admin/v1/settings` | Cluster settings | Organization name |
`/_status/allocator/node/{node_id}` | Rebalance simulator | Can cause DoS on cluster | yes
`/_status/allocator/range/{range_id}` | Rebalance simulatoor | Can cause DoS on cluster | yes
`/_status/certificates/{node_id}` | Node and user certificates | Credentials |
`/_status/details/{node_id}` | Node details | Internal IP addresses |
`/_status/enginestats/{node_id}` | Storage statistics | Operational details |
`/_status/files/{node_id}` | Retrieve heap and goroutine dumps | Operational details | yes
`/_status/gossip/{node_id}` | Gossip details | Internal IP addresses | yes
`/_status/hotranges` | Ranges with active requests | Stored table data via PK values |
`/_status/local_sessions` | SQL sessions | Cleartext SQL queries | yes
`/_status/logfiles/{node_id}` | List of log files | Operational details | yes
`/_status/logfiles/{node_id}/{file}` | Server logs + entries | Many: names, application data, credentials, etc. | yes
`/_status/logs/{node_id}` | Log entries | Many: names, application data, credentials, etc. | yes
`/_status/profile/{node_id}` | Profiling data | Operational details |
`/_status/raft` | Raft details | Stored table data via PK values |
`/_status/range/{range_id}` | Range details | Stored table data via PK values |
`/_status/ranges/{node_id}` | Range details | Stored table data via PK values |
`/_status/sessions` | SQL sessions | Cleartext SQL queries | yes
`/_status/span` | Statistics per key span | Whether certain table rows exist |
`/_status/stacks/{node_id}` | Stack traces | Application data, stored table data |
`/_status/stores/{node_id}` | Store details | Operational details |

Note:

"Special" endpoints are subject to the cluster setting `server.remote_debugging.mode`. Unless the setting was customized, clients are only able to connect from the same machine as the node.

### SQL language changes

- `EXPLAIN (OPT,ENV)` now returns a URL with the data encoded in the fragment portion. Opening the URL shows a page with the decoded data. Note that the data is processed in the local browser session and is never sent out. #41092
- `EXPLAIN ANALYSE` can now be used as an alias to `EXPLAIN ANALYZE`. #41093
- Mutations under `UNION` or `UNION ALL` are now disallowed. This restriction is temporary and will be lifted in a future release. #41496

### Admin UI changes

- Certain web UI pages (like the list of databases or tables) now restrict their content to match the privileges of the logged-in user. #42727
- The event log now presents all cluster settings changes, unredacted, when an admin user uses the page. #42727
- Customization of the UI by users is now only properly saved if the user has write privilege to `system.ui` (i.e., is an admin user). Also, all authenticated users share the same customizations. This is a known limitation and should be lifted in a future version. #42727
- Access to table statistics are temporarily blocked from access by non-admin users until further notice, for security reasons. #42727
- Certain debug pages have been blocked from non-admin users for security reasons. #42727

### Bug fixes

- The experimental cloud storage changefeed sink previously violated some of the changefeed invariants under rare conditions. A number of these have been fixed, but some fixes require changes to the format of the filenames output by the cloud storage changefeed. This is unsuitable for inclusion in a patch release, so users of cloud storage changefeed sinks are highly encouraged to upgrade to CockroachDB 19.2 or later. #42907
- Fixed a crash that occurs when a suboperator with a `LIKE` comparison has a NULL left-hand side. #41073
- Reduced write amplification by avoiding forcing files through compactions unnecessarily. #41301
- Fixed a rare data corruption bug in RocksDB caused by newer Linux kernel's handling of i_generation on certain file systems. #41393
- Fixed a bug causing the `cluster_logical_timestamp()` function to sometimes return incorrect results. #41441
- Fixed internal errors generated during the execution of some complicated cases of correlated subqueries. #41667
- Fixed a bug causing zone configuration changes on tables with existing index zone configurations to not take effect unless the `num_replicas` field was also set. #41682
- Fixed bug causing zone configuration application on indexes to leak into configurations on partitions. #41679
- Fixed multiple bugs relating to zone configurations and `COPY FROM PARENT`. Previously, `COPY FROM PARENT` was ignored when using it on partitions and indexes, and when using it on a zone that had an existing value for the field that was being changed. #41699
- Fixed a bug causing rapid network disconnections to lead to cluster unavailability because goroutines waited for a connection which will never be initialized to send its first heartbeat. #42165
- Fixed an internal error in a rare case involving `UNION` and tuples inside `VALUES` clauses. #42266
- CockroachDB now permits planning of window functions within mutation statements, and other statements that cannot be distributed. #42617
- Fixed a bug that would produce a spurious failure with the error message "incompatible COALESCE expressions" when adding or validating `MATCH FULL` foreign key constraints involving composite keys with columns of differing types. #42652
- Fixed a case where we incorrectly determine that a query (or part of a query) which contains an `IS NULL` constraint on a unique index column returns at most one row, possibly ignoring a `LIMIT 1` clause. #42792
- It is now possible to transfer range leases to lagging replicas. #42764
- `ALTER INDEX IF EXISTS` no longer fails when using an unqualified index name that does not match any existing index. Now it is a no-op. #42839
- CockroachDB now prevents a number of panics from the SQL layer caused by an invalid range split. These would usually manifest with messages mentioning encoding errors ("found null on not null column" but also possibly various others). #42860
- Other callers to `acquireNodeLease` will not get erroneously cancelled just because the context of the first caller was cancelled. #43028
- Fixed a bug in poller causing it to emit row updates at a timestamp less than or equal to an already forwarded resolved timestamp. #43027
- Fixed a bug in cloud storage sink file naming that violates ordering in presence of a schema changes. #43027
- Fixed a bug causing disk stalls to allow a node to continue heartbeating its liveness record and prevent other nodes from taking over its leases, despite being completely unresponsive. #41765
- CockroachDB now properly removes excess secondary log files (SQL audit logging, statement execution logging, and RocksDB events). #41034
- `cockroach debug zip`, `cockroach node` and `cockroach user` now work properly if the `defaultdb` database has been manually dropped and the connection URL does not specify a database. #41131

### Contributors

This release includes 34 merged PRs by 19 authors.

## v19.1.5

Release Date: September 30, 2019

This page lists additions and changes in v19.1.5 since v19.1.4.

- For a comprehensive summary of features in v19.1, see the v19.1 GA release notes.
- To upgrade to v19.1, see Upgrade to CockroachDB v19.1

Warning:

Cockroach Labs has discovered a bug relating to incremental backups, for CockroachDB v19.1.0 - v19.1.11. If a backup coincides with an in-progress index creation (backfill), `RESTORE`, or `IMPORT`, it is possible that a subsequent incremental backup will not include all of the indexed, restored or imported data.

For more information, including other affected versions, see Technical Advisory 63162.

### SQL language changes

- Add `check_constraints` table to the `information_schema`. #39688

### Bug fixes

- Unary negatives in constant arithmetic expressions are no longer ignored. #39367
- Propagate zone configuration to non-gossiped system tables. #39691
- Prevent unlimited memory usage during SQL range deletions. #39733
- A crash caused by the presence of window functions in the source of the `CREATE TABLE AS` statement is fixed. #40430
- Fix a planning error that could occur when a common table expression with an `ORDER BY` was used inside of a subquery. #40490
- Fixed an optimizer panic when building array access expressions. #40513
- Fix bug where an MVCC value at a future timestamp is returned after a transaction restart. #40611
- Consider intents in a read's uncertainty interval to be uncertain just as if they were committed values. This removes the potential for stale reads when a causally dependent transaction runs into the not-yet resolved intents from a causal ancestor. #40611
- Prevent problems on mixed-version 19.1 clusters that are also performing a lookup join on a table that has an ongoing index backfill. #40739
- The `cockroach` CLI client commands are now able to connect to a server via the environment variable `COCKROACH_URL`. #40848
- Fix a crash in apply joins. #40829
- Detailed crash reports ("panic messages") could previously be reported in the wrong file, if SQL audit reporting or statement logging had been activated. This has been corrected and crash reports will now properly always appear in the main log file. #40942

### Contributors

This release includes 14 merged PRs by 10 authors.

## v19.1.4

Release Date: August 13, 2019

This page lists additions and changes in v19.1.4 since v19.1.3.

- For a comprehensive summary of features in v19.1, see the v19.1 GA release notes.
- To upgrade to v19.1, see Upgrade to CockroachDB v19.1

Warning:

Cockroach Labs has discovered a bug relating to incremental backups, for CockroachDB v19.1.0 - v19.1.11. If a backup coincides with an in-progress index creation (backfill), `RESTORE`, or `IMPORT`, it is possible that a subsequent incremental backup will not include all of the indexed, restored or imported data.

For more information, including other affected versions, see Technical Advisory 63162.

### Enterprise edition changes

- The new `skip_missing_views` option for `RESTORE` skips restoring views that cannot be restored because their dependencies are not being restored at the same time. #38773

### SQL language changes

- CockroachDB now ignores non-fatal errors updating jobs during `DROP TABLE`. #38821
- The first statement of a transaction no longer returns a transaction retry error if it is an `UPDATE` or `DELETE` (this was already true for `INSERT`). #39087

### Bug fixes

- Fixed a bug that prevented inverted indexes from being created on `JSONB` columns containing `NULL` values. #38747
- Ranges consisting of only one row (and historical versions of that row) are now correctly up-replicated. #38588
- Fixed a planning error that caused valid queries to fail with the error "rowCount passed in was too small". #38793
- Fixed incorrect results, or "unordered span" errors, in some cases involving exclusive inequalities with non-numeric types. #38896
- Fixed a bug in the cost-based optimizer causing a bad index for lookup joins in some cases. #39028
- Fixed a potential infinite loop in queries involving reverse scans. #39101
- `UPSERT`s planned by the cost-based optimizer that use lookup joins run during column mutations on the table being updated no longer cause crashes or other issues. #38917
- `crdb_internal.ranges` can now be used inside views. Note that such views can become invalid in future releases if `crdb_internal.ranges` changes. #39213

### Contributors

This release includes 15 merged PRs by 11 authors.

## v19.1.3

Release Date: July 15, 2019

This page lists additions and changes in v19.1.3 since v19.1.2.

- For a comprehensive summary of features in v19.1, see the v19.1 GA release notes.
- To upgrade to v19.1, see Upgrade to CockroachDB v19.1

Warning:

Cockroach Labs has discovered a bug relating to incremental backups, for CockroachDB v19.1.0 - v19.1.11. If a backup coincides with an in-progress index creation (backfill), `RESTORE`, or `IMPORT`, it is possible that a subsequent incremental backup will not include all of the indexed, restored or imported data.

For more information, including other affected versions, see Technical Advisory 63162.

### Bug fixes

- Fixed help text that erroneously labeled Encryption at Rest as experimental. #38237
- Fixed an incorrect type mismatch error when empty `ARRAY` values are used as `DEFAULT` values (and potentially in other contexts). #38300
- Fixed a panic that could occur when decoding decimals as query parameters. #38330
- `NULL`s are now correctly handled by `MIN`, `SUM`, and `AVG` when used as window functions. #38356
- Fixed an issue that prevented restoring some backups if they included tables that were partitioned by columns of a certain types while also interleaved by child tables. #38494
- Fixed possible deadlock when storage engine write fails. #38478
- Fixed potential reappearance of deleted timeseries data, which could trip the consistency checker. #38478
- Removed dependency on `sync_file_range` on Linux platforms on which it returns ENOSYS, such as WSL (Windows Subsystem for Linux). #38478
- Nodes that have been down now recover quicker when they rejoin, assuming they weren't down for much more than the value of the `server.time_until_store_dead` cluster setting (which defaults to 5 minutes). #38642
- Checking the "skip should queue" checkbox in the Manual Enqueue Range advanced debuggging page now works for the GC Queue. #38296
- The YCSB workload no longer ignores the `--db`option. #38238
- Fixed the auto-retry counter in stats and now logs it in the statement/audit logs. #38035

### Security improvements

- Only check `CommonName` on first certificate in file. #38165

### Doc updates

- Added the Build a Python app with Kubernetes on CockroachCloud tutorial for running a Python app on a CockroachCloud cluster using a local Kubernetes cluster. #4918
- Expanded the recommended Topology Patterns for running CockroachDB in a cloud environment, each with required configurations and latency and resiliency characteristics. #4820
- Made the Java code samples in Build a Java App with CockroachDB simpler and more idiomatic. #4855
- Documented what happens when a node runs out of disk space and how to create a ballast file to prepare for this case. #5000

### Contributors

This release includes 17 merged PRs by 14 authors.

## v19.1.2

Release Date: June 17, 2019

This page lists additions and changes in v19.1.2 since v19.1.1.

- For a comprehensive summary of features in v19.1, see the v19.1 GA release notes.
- To upgrade to v19.1, see Upgrade to CockroachDB v19.1

Warning:

Cockroach Labs has discovered a bug relating to incremental backups, for CockroachDB v19.1.0 - v19.1.11. If a backup coincides with an in-progress index creation (backfill), `RESTORE`, or `IMPORT`, it is possible that a subsequent incremental backup will not include all of the indexed, restored or imported data.

For more information, including other affected versions, see Technical Advisory 63162.

### Enterprise edition changes

- You can now alter the zone configuration for a secondary index partition using the syntax `ALTER PARTITION OF INDEX <tablename>@<indexname> CONFIGURE ZONE ...`. #36883

### Bug fixes

- CockroachDB now computes the result of shifting bit arrays to the right properly and avoids generating invalid bit arrays. #36751
- `SHOW ZONE CONFIGURATION` no longer emits invalid `ALTER` syntax in its output when displaying the zone configuration for a table or index partition that is inheriting from the database or the default configuration. #36883
- `SHOW ZONE CONFIGURATION FOR TABLE t PARTITION p` no longer ignores the clause `PARTITION p` and now properly displays the zone configuration for that partition instead. #36883
- Automated table statistics no longer encounter "batch timestamp must be after replica GC threshold" errors on configurations with low TTL. #37588
- Fixed type inference of columns in subqueries for some expressions of the form `scalar IN (subquery)`. #37598
- Fixed a panic when constructing the error message for an invalid partitioning. #37703
- Fixed a potential source of (faux) replica inconsistencies that can be reported while running a mixed v19.1 / v2.1 cluster. This error (in that situation only) is benign and can be resolved by upgrading to the latest v19.1 patch release. Every time this error occurs, a "checkpoint" is created which will occupy a large amount of disk space and which needs to be removed manually (see `<store directory>/auxiliary/checkpoints`). #37722
- Fixed a case in which `cockroach quit` would return successfully even though the server process was still running in a severely degraded state. #37722
- Fixed incorrect results or "incorrectly ordered stream" errors in response to some queries with aggregations, and improved the `EXPLAIN` output for aggregations. #37792
- A `NULL` right operand now causes the sub-operator expression to return `NULL`. #37886
- The `age()` function is now correctly marked as impure, causing it to be unavailable in certain contexts. #37922
- Certain binary encodings of numeric/decimal values no longer result in values that are an order of magnitude off. #37921
- Fixed a race condition that could cause a panic during query planning. #37974
- Fixed `GROUP BY` for empty arrays. #37940
- Fixed a bug when estimating result set sizes in the optimizer that caused queries involving very large integer ranges to have poor plans. #38038
- The `cockroach` commands that internally use a RPC connection (e.g., `cockroach quit`, `cockroach init`, etc.) once again properly support passing an IPv6 address literal via the `--host` argument. #37982
- The `cockroach init` command will now always properly report when a cluster is already initialized, even after the node that it's connecting to is restarted. #37593

### Security improvements

- Stack memory used by CockroachDB is now marked as non-executable, improving security and compatibility with SELinux. #38011

### Contributors

This release includes 25 merged PRs by 18 authors. We would like to thank the following contributors from the CockroachDB community:

- Simo Kinnunen (first-time contributor)

## v19.1.1

Release Date: May 20, 2019

This page lists additions and changes in v19.1.1 since v19.1.0.

- For a comprehensive summary of features in v19.1, see the v19.1 GA release notes.
- To upgrade to v19.1, see Upgrade to CockroachDB v19.1

Warning:

Cockroach Labs has discovered a bug relating to incremental backups, for CockroachDB v19.1.0 - v19.1.11. If a backup coincides with an in-progress index creation (backfill), `RESTORE`, or `IMPORT`, it is possible that a subsequent incremental backup will not include all of the indexed, restored or imported data.

For more information, including other affected versions, see Technical Advisory 63162.

### Enterprise edition changes

- `CHANGEFEED`s now accept a `key_in_value` option; this is automatically used for cloud storage sinks, making the primary key of deleted rows recoverable. #37328

### SQL language changes

- `EXPLAIN (DISTSQL) CREATE STATISTICS` now shows the DistSQL plan used by the `CREATE STATISTICS` job. #37237
- Added missing columns to `information_schema.columns`. #37283

### Bug fixes

- Prevented panics when adding comments to database objects at high verbosity. #37325
- Fixed panics when trying to run certain `SHOW` commands via the pgwire prepare path. #37325
- Fixed a regression in 19.1 that prevented empty arrays from being accepted over pgwire. #37398
- While a cluster is unavailable (e.g., during a network partition), memory and goroutines used for authenticating connections no longer leak when the client closes said connections. #36177
- Fixed a possible panic while recovering from a WAL on which a sync operation failed. #37109
- Fixed an error which could occur when a zigzag join was performed against a table with dropped columns. #37245
- Fixed incorrect query plans/results when non-validated FK constraints are not satisfied by the data. #37253
- `CHANGEFEED`s now retry instead of causing errors in more situations. #37092
- Fixed a bug where `CHANGEFEED` job progress would regress when the job was restarted. #37091
- The `changefeed.max_behind_nanos` metric now has fewer false positives of changefeeds falling behind. #37048
- Corrected the names of some columns for tables created with `CREATE TABLE <name> AS <query>`. #37238
- Fixed a bug causing unvalidated check constraints to disappear from the output of `SHOW CONSTRAINTS` and to not be referenced in `ALTER TABLE` after upgrading to 19.1. #37462

### Performance improvements

- Improved the performance of some queries containing predicates with constant functions, since these functions are now evaluated earlier during query optimization. #37234
- Improved the performance of some queries by teaching the optimizer to always prefer constrained scans over unconstrained scans. #37235

### Doc updates

- Updated the Kubernetes tutorials for running CockroachDB on GKE to specify a reasonable machine type. Also updated the Helm-specific instructions for maintenance tasks (adding/removing nodes, upgrading a cluster).#4813 #4805
- Fixed the code sample in Build a PHP App with CockroachDB to not create new connections for each query. #4804.

### Contributors

This release includes 28 merged PRs by 14 authors.

## v19.1.0

Release Date: April 30, 2019

With the release of CockroachDB v19.1, we’ve made a variety of security, performance, and usability improvements. A few highlights:

- Enhanced security: CockroachDB now supports transparent data encryption at rest and integrates with existing LDAP directory services within an organization to simplify user account management.

- Native Change Data Capture: CockroachDB extends its streaming data capabilities by enabling data to flow more easily to backend warehouses, with support for publishing distributed, row-level change feeds directly into cloud storage for downstream processing.

- High-performance multi-region deployments: Our cost-based optimizer can now use data locality to optimize queries so you can get low-latency queries even when your data may be spread across regions. We’ve also added follower reads to improve read performance for certain geo-distributed workloads.

Check out a comprehensive summary of the most significant user-facing changes and then upgrade to CockroachDB v19.1. You can also read more about these changes in the v19.1 blog post.

Warning:

Cockroach Labs has discovered a bug relating to incremental backups, for CockroachDB v19.1.0 - v19.1.11. If a backup coincides with an in-progress index creation (backfill), `RESTORE`, or `IMPORT`, it is possible that a subsequent incremental backup will not include all of the indexed, restored or imported data.

For more information, including other affected versions, see Technical Advisory 63162.

### Summary

This section summarizes the most significant user-facing changes in v19.1.0. For a complete list of features and changes, including bug fixes and performance improvements, see the release notes for previous testing releases.

- Managed service offering
- Enterprise features
- Core features
- Backward-incompatible changes
- Known limitations
- Documentation

### Managed service offering

Feature | Description
--- | ---
Managed CockroachDB Console | Paid managed CockroachDB customers can now sign into their organization's account, view the connection string details, add and edit their list of allowed IPs on the management console.

### Enterprise features

These features require an enterprise license. Register for a 30-day trial license here.

Feature | Description
--- | ---
Encryption at Rest | Encryption at rest provides transparent encryption of a node's data on the local disk. This feature was introduced as experimental in v2.1 and is now ready for production use.
GSSAPI with Kerberos Authentication | CockroachDB now supports the Generic Security Services API (GSSAPI) with Kerberos authentication, which lets you use an external enterprise directory system that supports Kerberos, such as Active Directory.
Follower Reads | This feature reduces read latencies by allowing queries to perform historical reads of the closest replica of a given piece of data rather than reading from the more distant "leaseholder" replica. To enable follower reads on a query, use the `experimental_follower_read_timestamp()` built-in function in conjunction with the `AS OF SYSTEM TIME` clause.
Prefer Closest Secondary Index | Given multiple identical indexes that have different locality constraints using replication zones, the cost-based optimizer will now prefer the index that is closest to the gateway node that is planning the query. In a properly configured geo-distributed cluster, this can lead to performance improvements due to improved data locality and reduced network traffic. This feature enables scenarios where reference data such as a table of postal codes can be replicated to different regions, and queries will use the copy in the same region.
Change Data Capture | CDC in v19.1 includes many improvements to production-readiness. `CHANGEFEED`s delivering data to Apache Kafka/Confluent Platform are now fully supported, and a new cloud storage sink allows `CHANGEFEED`s to deliver table updates as JSON files to endpoints like Google Storage or AWS S3. A new push-based internal data delivery mechanism called rangefeeds helps deliver data with increased reliability and lower latency.

### Core features

These features are freely available in the core version and do not require an enterprise license.

Feature | Description
--- | ---
Load-Based Splitting | CockroachDB now automatically splits frequently accessed keys into smaller ranges to optimize your cluster’s performance.
Query Optimizer Hints | The cost-based optimizer now supports hint syntax to force the use of merge, hash, or lookup joins. This let you override the cost-based optimizer's join algorithm selection in cases where you have information about your data that the cost-based optimizer does not yet have.
Correlated Subqueries | Most correlated subqueries are now decorrelated and processed by the cost-based-optimizer. For those that cannot be decorrelated, CockroachDB now emits an "apply" operator that executes a sub-plan for every row in its input. This allows CockroachDB to execute a large number of additional correlated subqueries that were not able to be executed in v2.1.
Core Changefeeds | CockroachDB now offers a non-enterprise version of change data capture, via the `EXPERIMENTAL CHANGEFEED FOR` statement, to consume table updates over a streaming Postgres connection.
Cost-Based Optimizer | The cost-based optimizer now supports almost all read-only queries (except window functions) and almost all mutations (e.g., `CREATE TABLE AS`, `INSERT`, `UPDATE`, `UPSERT`, `DELETE`). In addition, the cost-based optimizer now reorders up to 4 joins in a query to attempt to find the most performant ordering (via the new `reorder_joins_limit` session variable) and takes advantage of automatically generated table statistics without impacting foreground traffic. Note that statistics are created by default on all indexed columns when a user upgrades to this version. Finally, a query plan cache now saves a portion of the planning time for frequent queries used in the cost-based optimizer.
Logical Plans in the Admin UI | The Statement Details page in the Admin UI now shows the ordered steps CockroachDB will take to execute a query (i.e., the `EXPLAIN` output). This helps you identify bottlenecks caused by how queries are planned by our heuristic and cost-based optimizers.
Cascading Replication Zones | Newly created replication zones will now inherit empty values from their parent. For example, if the replication zone for a table is not explicitly set with `num_replicas`, it will inherit that value from its direct parent, whether that's the `.default` replication zone from the entire cluster or the replication zone for the database containing the table.
Custom Savepoints | CockroachDB now supports custom naming of `SAVEPOINT`s for compatibility with ORMs and other third-party tools.

### Backward-incompatible changes

Before upgrading to CockroachDB v19.1.0, be sure to review the following backward-incompatible changes and adjust your application as necessary.

- CockroachDB no longer supports the `B'abcde'` notation to express byte array literals. This notation now expresses bit array literals like in PostgreSQL. The `b'...'` notation remains for byte array literals.

- The normalized results of certain timestamp + duration operations involving year or month durations have been adjusted to agree with the values returned by PostgreSQL.

- The `CHANGEFEED` `experimental-avro` option has been renamed `experimental_avro`.

- Timezone abbreviations, such as `EST`, are no longer allowed when parsing or converting to a date/time type. Previously, an abbreviation would be accepted if it were an alias for the session's timezone.

- The way composite foreign key matches are evaluated has changed to match the Postgres behavior. If your schema currently uses composite keys, it may require updates, since this change may affect your foreign key constraints and cascading behavior. For more details and guidance, see this note.

- Mutation statements like `UPDATE`, `INSERT`, and `DELETE` no longer attempt to guarantee mutation or output ordering when an `ORDER BY` clause is present. It is now an error to use `ORDER BY` without `LIMIT` with the `UPDATE` statement.

### Known limitations

For information about limitations we've identified in CockroachDB v19.1, with suggested workarounds where applicable, see Known Limitations.

### Documentation

Topic | Description
--- | ---
Geo-Partitioning | Added a video and tutorial on using geo-partitioning to get very fast reads and writes in a broadly distributed cluster.
Security | Added an overview of CockroachDB security, with a dedicated page on authentication, encryption, authorization, and SQL audit logging.
Troubleshooting | Added much more guidance on troubleshooting cluster setup and troubleshooting SQL behavior.
Architecture | Added the Life of a Distributed Transaction, which details the path that a query takes through CockroachDB's architecture, starting with a SQL client and progressing all the way to RocksDB (and then back out again). Also added Reads and Writes in CockroachDB, which explains how reads and writes are affected by the replicated and distributed nature of data in CockroachDB.
Production Guidance | Expanded the Production Checklist with more current hardware recommendations and additional guidance on storage, file systems, and clock synchronization. Also added a library of common Cluster Topology Patterns.
ORMs | Expanded the SQLAlchemy tutorial to provide code for transaction retries and best practices for using SQLAlchemy with CockroachDB.

## v19.1.0-rc.4

Release Date: April 25, 2019

### Bug fixes

- Fixed a crash caused by running `COMMENT ON` with verbose logging turned on. #36825
- Fixed a panic that can happen while RangeFeeds are active. #36870
- The default value of the `kv.bulk_io_write.max_rate` cluster setting is now 1 TB/s, to help prevent incorrect rate limiting behavior due to rounding. #36912
- Fixed a rare inconsistency that could occur on badly overloaded clusters. #36959
- Fixed a bug in write batch decoding that could cause "invalid batch" errors while using `cockroach debug` commands to analyze data. #36965
- Fixed an issue that could cause low-traffic clusters to get stuck after a network outage. #37064

### Contributors

This release includes 11 merged PRs by 9 authors.

## v19.1.0-rc.3

Release Date: April 15, 2019

### Bug fixes

- Fixed a potential crash when constructing certain types of aggregations with post projections. #36514
- CockroachDB now correctly validates computed columns during `ALTER TABLE ... ADD COLUMN`. #36575
- Fixed a bug when parsing dates with large years. #36555
- Fixed a bug when decoding single column family `JSONB` columns. #36626
- Fixed a potential crash in a mixed-version cluster with some nodes running `v19.1-beta-x` and others running `19.1-rc.x`. #36719
- Made `CHANGEFEED`s more resilient to a class of bugs that manifest as stalls. #36768

### Performance improvements

- CockroachDB now applies back-pressure to bulk operations before other traffic. #36738

### Contributors

This release includes 19 merged PRs by 12 authors.

## v19.1.0-rc.2

Release Date: April 8, 2019

### SQL language changes

- Added the `kv.bulk_io_write.concurrent_addsstable_requests` cluster setting, which limits the number of SSTables that can be added concurrently during bulk operations. #36444
- Added the `schemachanger.backfiller.buffer_size`, `schemachanger.backfiller.max_sst_size`, and `schemachanger.bulk_index_backfill.batch_size` cluster settings, which control buffering in index backfills. #36377
- Added the `sql.defaults.reorder_joins_limit` cluster setting, which defines the default value of the `reorder_joins_limit` session variable. #36382

### Bug fixes

- Fixed a panic that could occur with certain patterns of using `UPDATE` and column families. #36375
- Prevented production server crashes on certain assertion errors. #36434
- Data that was previously omitted from `debug zip` is now included. #36480
- Fixed a planning error that occurred with some `GROUP BY` queries due to errors in null count estimation. #36528
- Fixed inappropriate column renaming in some cases involving single-column SRFs. #36535
- Prevented a panic when running a render expression that produces an error at the very end of a `count_rows` aggregate. #36538
- Prevented a deadlock related to store queue processing. #36542

### Performance improvements

- CockroachDB now allows oversized ranges to split sooner. #36368
- Reduced memory usage during bulk data ingestion (during `IMPORT`, `RESTORE`, and index creation). #36420
- Prevented rocksdb from slowing down write traffic during bulk data ingestion. #36512
- Sped up bulk data ingestion during index backfills and `IMPORT`. #36525

### Doc updates

- Emphasized the experimental status of CockroachDB's Windows binary. #4628
- Clarified the use of the `ApplicationName` connection string parameter for JDBC clients. #4623
- Documented the `COMMENT ON` statement, for adding comments to databases, tables, and columns. #4617
- Documented the `RENAME CONSTRAINT` subcommand of `ALTER TABLE`, and identified the `ALTER TABLE` subcommands that can be used in combination in a single `ALTER TABLE` statement. #4615
- Documented per-statement credential parameters for Google Cloud Storage. #4606
- Clarified the accepted values for the `--duration` flag of `cockroach workload`. #4610

### Contributors

This release includes 36 merged PRs by 16 authors.

## v19.1.0-rc.1

Release Date: April 2, 2019

In addition to bug fixes and various enterprise, SQL, and Admin UI enhancements, with this release, we also want to highlight the following feature:

- Prefer the nearest secondary index: Given multiple identical indexes that have different locality constraints using replication zones, the cost-based optimizer will now prefer the index that is closest to the gateway node that is planning the query. In a properly configured geo-distributed cluster, this can lead to performance improvements due to improved data locality and reduced network traffic. This feature enables scenarios where reference data such as a table of postal codes can be replicated to different regions, and queries will use the copy in the same region.
- Encryption at Rest: This feature, which provides transparent encryption of a node's data on the local disk, was introduced as an experimental in CockroachDB v2.1. With this release, it is no longer considered experimental and is ready for production use.

### Enterprise edition changes

- `CHANGEFEED`s now support TLS connections to Kafka. #35510
- `CHANGEFEED`s now support SASL/PLAIN authentication when connecting to a Kafka sink. #35800
- `CHANGEFEED`s using Kafka now log information to help debug connection issues. #35661

### SQL language changes

- The cost-based optimizer now picks lookup-joins less frequently. #35561
- CockroachDB now reports uses of CTEs (`WITH ...`) and subqueries in diagnostics reporting, to guide future product planning. #35650
- It is now possible to specify a `HASH` / `MERGE` / `LOOKUP` join hint with cross joins (`CROSS <hint> JOIN`). #35700
- The output of `EXPLAIN` now uses `hash-join` or `merge-join` instead of `join`. #35688
- Added an `EXPLAIN (opt, env)` option, which provides all relevant information for the planning of a query. #35802
- `transaction deadline exceeded` errors are now returned to the client with a retryable code. #35284
- Regular SQL errors that indicate erroneous SQL and for which CockroachDB does not yet populate a well-defined PostgreSQL error code will now be reported with code `XXUUU` instead of code `XX000`. #35896
- Removed "experimental" from the names of the two existing automatic statistics cluster settings, and added two new cluster settings to control the target number of stale rows per table that will trigger a statistics refresh. #36085
- Renamed the `experimental_reorder_joins_limit` session variable to `reorder_joins_limit`. #36085
- Changed `SHOW JOBS` to no longer display automatic statistics jobs. `SHOW AUTOMATIC JOBS` can now be used instead to view automatic statistics jobs. #36112
- The cost-based optimizer will now try to select the index having a leaseholder preference that is closest. #36123
- Computed columns are now evaluated after rounding any decimal values in input columns. #36128
- Changed the generation algorithm for the OID column of tables in `pg_catalog`. As with previous CockroachDB releases, we guarantee that the OID values are consistent between `pg_catalog` tables (so that tables can be joined together), but we do not guarantee that they are stable across CockroachDB versions. Avoid storing them in client apps. #33697

### Command-line changes

- The output of `cockroach debug zip` now contains more information. #36026

### Admin UI changes

- Improved progress reporting for `CREATE STATISTICS` jobs. #35684
- The Queries per second metric in the Summary bar now summarizes only the query types displayed in the SQL Queries graph and Node Map. #35905
- The Jobs screen no longer shows automatic statistics by default. To see these jobs, you must now select Auto-Statistics Creation from the Type menu. #36112

### Bug fixes

- Increased speed of automatic statistic jobs on clusters with low load. #35698
- `CHANGEFEED`s connected to a slow sink now error instead of using unbounded amounts of memory. #35745
- Removed historical log entries from Raft snapshots that could lead to failed snapshots. #35701
- Fixed a bug in `RESTORE` where some unusual range boundaries in interleaved tables caused an error. #36005
- Fixed an error that occurred when creating statistics on tables with an inverted index. #35982
- Fixed a panic that occurred when comparing a value to the result of an `EXISTS`. #36038
- Fixed an error caused by incorrect calculation of null counts in `VALUES` clauses. #35997
- Reduced the occurrence of `ASYNC_WRITE_FAILURE` transaction retry errors, especially for the first insert into a newly-created table. #36104
- Fixed panics with the message "unexpected non-pending txn in augmentMetaLocked" caused by distributed queries encountering multiple errors. #36041
- `CHANGEFEED`s with `changefeed.push.enabled = true` (which is the default) no longer fail when run for longer than the garbage collection window of the source data and a range split occurred. They also now emit dramatically fewer duplicates. #35981
- Fixed panics caused by certain window functions that operate on tuples. #36124
- Prevented deadlocks when cancelling distributed queries in some cases. #36122
- Fixed a planning error that occurred with some `IN` expressions containing a list of constant and non-constant items. #36134
- Reduced risk of data unavailability during AZ/region failure. #36133
- Fixed a planning error that occurred when using set operations with multiple columns and many null values. #36169

### Performance improvements

- Improved performance of the TPC-C benchmark by pre-calculating statistics and injecting them during `IMPORT`. #35940
- Reduced the default frequency of automatic statistics refreshes. #35992
- Improved the selectivity estimation of range predicates during query optimization. #36093

### Build changes

- Go 1.11.6 is now the minimum required version necessary to build CockroachDB. #35909

### Doc updates

- Added a library of common Cluster Topology Patterns. #4235
- Documented how reads and writes are affected by the replicated and distributed nature of data in CockroachDB. #4543
- Corrected the syntax for per-replica replication zone constraints. #4569
- Added more thorough documentation on CockroachDB dependencies. #4567

### Contributors

This release includes 104 merged PRs by 23 authors. We would like to thank the following contributors from the CockroachDB community:

- Dong Liang (first-time contributor)

## v19.1.0-beta.20190318

Release Date: March 18, 2019

In addition to bug fixes and various general, enterprise, SQL, and Admin UI enhancements, this release includes several major highlights:

- Managed CockroachDB Console: Paid managed CockroachDB customers can now sign into their organization's account, view the connection string details, add and edit thier list of allowed IPs on the management console.
- GSSAPI with Kerberos Authentication: CockroachDB now supports the Generic Security Services API (GSSAPI) with Kerberos authentication, which lets you use an external enterprise directory system that supports Kerberos, such as Active Directory. This feature requires an Enterprise License.
- Query Optimizer Hints: The cost-based optimizer now supports hint syntax to force the use of a merge, hash, or lookup join. This let you override the cost-based optimizer's join algorithm selection in cases where you have information about your data that the cost-based optimizer does not yet have.
- Correlated Subqueries: Most correlated subqueries are decorrelated and processed by the cost-based-optimizer. However, for those that cannot be decorrelated, CockroachDB now emits an "apply" operator that executes a sub-plan for every row in its input. This allows CockroachDB to execute a large number of additional correlated subqueries that were not able to be executed in v2.1.

### General changes

- The cluster settings `timeseries.storage.10s_resolution_ttl` and `timeseries.storage.30m_resolution_ttl` have been renamed to `timeseries.storage.resolution_10s.ttl` and `timeseries.storage.resolution_30m.ttl` for ease of use in SQL clients. Any value set using the previous setting name in existing clusters is migrated over to the new name; subsequent changes using the old name will be ignored. #34248

### Enterprise edition changes

- Added the `debug encryption-active-key` command. #35234
- The `changefeed.min_high_water` metric has been deprecated in favor of `changefeed.max_behind_nanos`, which is easier to alert on. The Changefeed dashboard in the Admin UI now contains a graph of this metric. #35257
- Added the `rocksdb.encryption.algorithm` per-store metric, which describes the encryption cipher in use. #35506
- In exchange for increased correctness confidence, `CHANGEFEED`s using `changefeed.push.enabled` (the default) now take slightly more resources on startup and range rebalancing/splits. #35470

### SQL language changes

- Changed the default set of column statistics created by CREATE STATISTICS to include up to 100 regular table columns in addition to all indexed columns. #35192
- Added the ability to pause all automatic statistics jobs by pausing the currently running job. #35243
- Automatic statistics are now enabled by default. #35291
- CockroachDB now supports many more correlated subqueries. #34546
- Schema changes now trigger automatic statistics collection for the affected table. #35252
- The `pg_catalog.current_setting()` and `pg_catalog.set_config()` built-in functions are now supported for compatibility with PostgreSQL. Note that only session-scoped configuration changes remain supported (`set_config(_, _, false)`). #35121
- The `RENAME COLUMN` command can now be used alongside other table commands in a single `ALTER TABLE` statement. This makes it possible to, for example, atomically add a computed column based on an existing column, and rename the columns so that the computed column "replaces" the original column. #35091
- CockroachDB now supports `ALTER TABLE ... RENAME CONSTRAINT`. Only indexes that are not depended on by views can be renamed. #35091
- `SHOW JOBS` now returns an extra `statement` column, which is populated when the description is not the statement. #35439
- `SHOW QUERIES` and `SHOW SESSIONS` now omit internal queries and sessions by default. Use `SHOW ALL QUERIES` or `SHOW ALL SESSIONS` to include internal queries in the output. #35504
- CockroachDB now starts emitting changefeed events immediately for sinkless changefeeds (an experimental feature). The `results_buffer_size` connection string parameter is no longer needed for this purpose. #35529
- CockroachDB now provides usable comments with optional documentation URLs for the virtual tables in `pg_catalog`, `information_schema`, and `crdb_internal`. Use `SHOW TABLES [FROM ...] WITH COMMENT` to read. Note that `crdb_internal` tables remain an experimental feature subject to change without notice. #34764
- CockroachDB now reports usage frequency of various SQL scalar operators in telemetry, when telemetry is enabled, so as to guide future optimizations of query performance. #35616
- CockroachDB now reports how the `SERIAL` pseudo-type is expanded in table column definitions, when telemetry is enabled. #35656

### Admin UI changes

- `CREATE STATISTICS` jobs no longer generate events by default. #35425
- Queries issued internally by CockroachDB are now displayed under a single "(internal)" application name entry in the drop-down menu on the Statements page. #35503
- Additional types of transaction restart errors are now tracked on the Distributed dashboard. #35438
- Added "Statistics Creation" as a job type on the Jobs page. #35651

### Bug fixes

- Fixed a planning bug that caused incorrect aggregation results on multi-node aggregations with implicit, partial orderings on the inputs to the aggregations. #35221
- Fixed a panic that occurred when evaluating certain binary expressions containing operands with different types. #35247
- Prevented a situation in which snapshots would be refused repeatedly over long periods of time, with error messages such as "aborting snapshot because raft log is too large" appearing in the logs, and often accompanied by under-replicated ranges in the UI. #35136
- `BACKUP` to `nodelocal` now writes files atomically. #34937
- Fixed a crash on `SET TRANSACTION AS OF SYSTEM TIME` with invalid expressions. #35316
- The experimental `CHANGEFEED` cloud storage sinks now strip secrets from the job description in the Admin UI and `SHOW JOBS` output. #35257
- Fixed a nil pointer dereference in `debug zip` when one or more nodes in the cluster are down. #35366
- Window functions are now correctly planned when `UNION ALL` is present in the subquery. #35430
- Fixed panics that could occur in some cases involving joins of the results of mutations. #35482
- CockroachDB now correctly returns an error when window functions include window definitions that contain other window functions. #35369
- CockroachDB now properly applies column width and nullability constraints on the result of conflict resolution in `UPSERT` and `INSERT ON CONFLICT`. #35371
- Improved telemetry for error codes. #35431
- CockroachDB now properly preserves the automatically generated name of a newly created index in `system.event_log` when the name is not specified in the `CREATE INDEX` statement. #35534
- CockroachDB now properly reports `bigint` in `information_schema.sequences.type`, for compatibility with PostgreSQL. #35577
- CockroachDB now properly reports the composite foreign key match type in `information_schema.referential_constraints`. #35575
- Subtracting 0 from a JSON array now correctly removes its first element. #35617
- Fixed a "column not in input" crash when `INSERT / UPDATE / UPSERT ... RETURNING` is used inside a clause that requires an ordering. #35644
- Fixed an error when executing some set operations containing only nulls in one of the input columns. #35321
- Fixed an on-disk inconsistency that could result from a crash during a range merge. #35626

### Build changes

- Go 1.11.5 is now the minimum required version necessary to build CockroachDB. #35536
- CockroachDB will provisionally refuse to build with Go 1.12, as this is known to produce incorrect code inside CockroachDB. #35638
- Release Docker images are now built on Debian 9.8. #35517

### Doc updates

- Updated the `PARTITION BY RANGE` example for geo-partitioning. #4503
- The Docs landing page now provides quick links into various areas of the CockroachDB documentation. #4476
- Documented the `BIT` data type. #4454
- Documented the `bytea_output` session variable, and fixed the documentation on bytes/string conversions. #4452
- Updated Configure Replication Zones documentation to reflect that unset variables in a replication zone now inherit their values from the parent zone. #4446

### Contributors

This release includes 157 merged PRs by 29 authors. We would like to thank the following contributors from the CockroachDB community:

- Jaewan Park

## v19.1.0-beta.20190304

Release Date: March 4, 2019

### Enterprise edition changes

- Added a GSS auth method configurable by the `server.host_based_authentication.configuration` cluster setting. This supports the new ability to use an external enterprise directory system like Active Directory for authentication in a CockroachDB cluster. Detailed usage guidance is coming soon. #34772

### SQL language changes

- CockroachDB now supports the syntax `TIME(6)`, `TIMESTAMP(6)` and `TIMESTAMPTZ(6)` / `TIMESTAMP(6) WITH TIME ZONE`, for compatibility with PostgreSQL. Only the value `6` is supported, which is also the default in PostgreSQL. When used for a table column definition, the precision is not stored, and it is not possible to distinguish types with and without specified precisions in the introspection metadata. #35128
- `CHECK` constraints can now be applied to columns when they are first added to a table with `ALTER TABLE ... ADD COLUMN`. #35018
- CockoachDB no longer supports `AS OF SYSTEM TIME` interval expressions less than 1 microsecond in the past. #34547
- When the JSON `?` operator is used to compare a JSON string and a string that are equal, CockroachDB now returns `true`, for compatibility with PostgreSQL. #35005
- Specific implementations of join can now be forced by inserting `HASH`, `MERGE`, or `LOOKUP` between the type of join (`INNER | LEFT | RIGHT | FULL`) and the `JOIN` keyword. #35183
- CockroachDB now supports `SHOW SEQUENCES` to list the sequences in a given database or the current database, alongside `SHOW TABLES`, which was already able to list both tables and views. #35215
- Added the `sql.stats.experimental_automatic_collection.fraction_idle` cluster setting to control the throttling of automatic statistics. #34928

### Admin UI changes

- Added a debug page that breaks down CPU usage by query (some restrictions apply). #35147

### Bug fixes

- The columns `confupdtype`, `confdeltype` and `confmatchtype` in `pg_constraint` now report the foreign key constraint parameters properly, for compatibility with PostgreSQL clients that use them. #35052
- Fixed a panic that could occur when using `logspy` tracing in some circumstances. #34936
- Fixed a panic related to cached plans. #35027
- Fixed `CREATE STATISTICS` to run at the correct timestamp when it is specified with `AS OF SYSTEM TIME`. #35139
- CockroachDB again properly reports when a database used during `PREPARE` does not exist any more when `EXECUTE` is used. #35151
- The logical plans collected for display in the web UI now hide the details of which key ranges are scanned in table lookups. #34902
- Fixed a panic that could occur via certain patterns of folding `CASE` statements containing `NULL` values. #35188
- Fixed a bug that would return errors when handling valid `UPDATE`s during periods of an index creation schema change. #35157

### Performance improvements

- Increased write throughput for workloads that write large numbers of intents by coalescing intent resolution requests across transactions. #34803
- Reduced write-amplification during bulk-loading (`IMPORT` and `RESTORE`). #34886
- Increased the rebalancing and up-replication default rate from 2MB to 8MB. #35100
- Reduced the impact of bulk data ingestion on foreground traffic by controlling RocksDB flushes. #34800

### Doc updates

- Added much more guidance on troubleshooting cluster setup and troubleshooting SQL behavior. #4223
- Added a summary of Enterprise features. #4418
- Documented CockroachDB's partial support for the Intellij IDEA. #4391
- Clarified the guidance on preparing to decommission nodes. #4406

### Contributors

This release includes 89 merged PRs by 18 authors. We would like to thank the following contributors from the CockroachDB community:

- David López (first-time contributor)
- lanzao (first-time contributor)

## v19.1.0-beta.20190225

Release Date: February 25, 2019

Since our initial launch, Cockroach Labs has used semantic versioning in our release cycle guidelines. Two years, one major release, and n-patch fixes later, we're making the switch to Calendar Versioning. This means subscribers to our release notes will see quite the jump in today's version numbering, from last week's 2.1.5 to today's 19.1 beta. You can read more about the switch here.

### General changes

- Records for completed jobs are cleaned up automatically after two weeks. #34725
- `SHOW JOBS` now returns only running and recently finished jobs. Older jobs can still be inspected via the `crdb_internal.jobs` table. #34829

### Enterprise edition changes

- `nodelocal://` storage paths for `BACKUP`, `RESTORE`, and `IMPORT` may include a node-ID in the Host part of the URI. It is not currently used (any node can get sent work and will look in its local IO directory) but will likely be required in the future. #34797
- `CHANGEFEED`s targeting cloud sinks now partition files into date folders. #34813
- The new `kv.rangefeed.concurrent_catchup_iterators` cluster setting limits the number of rangefeed catchup iterators a store will allow concurrently before queueing. #34890
- The `CHANGEFEED` `experimental_avro` format now supports SQL columns of type `DATE`, `TIME`, `UUID`, `INET`, and `JSONB`. #34918

### SQL language changes

- Virtual tables in `pg_catalog` and `information_schema` now support `COMMENT ON` like regular tables. #33697

### Bug fixes

- Fixed a bug that could cause a Raft log to grow very large, which in turn could prevent replication changes. #34502
- Prevented down nodes from obstructing log truncation on ranges they are a member of. This problem could cause replication to fail due to an overly large Raft log. #34712
- Fixed a panic when subtracting an array containing null from a JSON datum. #34757
- Fixed a panic during some `UNION ALL` operations with projections, filters, or renders directly on top of the `UNION ALL`. #34762
- Fixed a panic when the subquery in `UPDATE SET (a,b) = (...subquery...)` returns no rows. #34804
- Fixed a rare panic ("close of closed channel") when shutting down a server. #34823
- Fixed a deadlock during `IMPORT` and `RESTORE` that caused all writes on a node to be stopped. #34830
- Fixed a panic during planning of certain complex join queries. #34843
- Fixed a panic when `CREATE STATISTICS` is run on clusters containing nodes with different versions of CockroachDB. #34842
- Fixed a bug where servers would endlessly try to refresh table statistics on dropped tables. #34884
- CockroachDB now only lists tables in `pg_catalog.pg_tables`, for compatibility with PostgreSQL. #34857
- Fixed a panic when using `EXPLAIN ANALYZE` with certain mutation queries. #34991

### Performance improvements

- Subqueries used with `EXISTS` or as a scalar value now avoid fetching more rows than needed to decide the outcome. #34801

### Doc updates

- Documented the built-in `ycsb` workload. #4343

### Contributors

This release includes 102 merged PRs by 22 authors. We would like to thank the following contributors from the CockroachDB community:

- Jaewan Park

## v2.2.0-alpha.20190211

Release Date: February 11, 2019

In addition to SQL language enhancements, general usability improvements, performance improvements, and bug fixes, this release includes several major highlights:

- Follower Reads: Enterprise users can now reduce read latencies by allowing queries to perform historical reads of the closest replica of a given piece of data rather than reading from the more distant "leaseholder" replica. To enable follower reads on a query, use the `experimental_follower_read_timestamp()` built-in function in conjunction with the `AS OF SYSTEM TIME` clause.
- Cost-Based Optimizer: The cost-based optimizer now supports almost all read-only queries (except window functions) and almost all mutations (e.g., `CREATE TABLE AS`, `INSERT`, `UPDATE`, `UPSERT`, `DELETE`). In addition, the cost-based optimizer now reorders up to 4 joins in a query to attempt to find the most performant ordering (via the new `experimental_reorder_joins_limit` session variable) and takes advantage of automatic statistics without impacting foreground traffic. Note that statistics are created by default on all indexed columns when a user upgrades to this version. Finally, a query plan cache now saves a portion of the planning time for frequent queries used in the cost-based optimizer.
- Change Data Capture: Enterprise users can now create `CHANGEFEED`s that deliver table updates as JSON files to cloud storage endpoints like Google Storage or AWS S3. In addition, all CockroachDB users can now use the core implementation of change data capture, via the new `EXPERIMENTAL CHANGEFEED FOR` statement, to consumes table updates over a streaming Postgres connection. Finally, all `CHANGEFEEDS` now use a new "push" mechanism called rangefeeds to deliver data with increased reliability and lower latency.

### Backward-incompatible changes

- The `CHANGEFEED` `experimental_avro` format is now backward- and forward-compatible with adjacent schemas for the same table. #34095

### General changes

- Go 1.11.4 is now the minimum required version necessary to build CockroachDB. #33668
- Increased the maximum length of queries in crash reports, to make debugging easier. #34479

### Enterprise edition changes

- `CHANGEFEED`s now experimentally support writing to cloud storage, for easy use with analytics databases. #33647 #34193
- The `CHANGEFEED` `envelope=row` option is now deprecated and will be removed in the Fall 2019 release. The default envelope for new changefeeds is now `wrapped`. #34309
- `CHANGEFEED`s now operate on an end-to-end "push" model, reducing latency of row changes. Some workloads will also see fewer transaction restarts on tables being watched by `CHANGEFEED`s. #34457
- Added support for standard HTTP proxy environment variables in HTTP and S3 storage. #34067
- Added support for performing sufficiently old historical reads against the closest replicas rather than leaseholders as well as a new `experimental_follower_read_timestamp()` built-in function, which can be used with `AS OF SYSTEM TIME` clauses to generate a timestamp that is likely to be safe for reads from a follower. #33478

### SQL language changes

- `VALIDATE CONSTRAINT` is now compatible with the new `MATCH FULL` and `MATCH SIMPLE` foreign key semantics and is more performant. #34365
- Table data is now validated against a newly added `CHECK` constraint asynchronously after the transaction commits. #32504
- `NULL` values are now supported in int and text arrays in the driver protocol. #33675
- CockroachDB now supports transmitting bit array values using the decimal encoding in the low-level client protocol. #34050
- It is now possible to force a reverse scan of a specific index using `table@{FORCE_INDEX=index,DESC}`. #34075
- Improved the output of `EXPLAIN` for `index-join` and `lookup-join`. #34138
- `FILTER` expressions are now supported by the cost-based optimizer. #34077
- `EXPLAIN (OPT)` now has a much shorter output. `EXPLAIN (OPT,VERBOSE)` and `EXPLAIN (OPT,TYPES)` can be used for more verbose output. #34128
- Using a sequence as a `SELECT` target is now supported by the cost-based optimizer. #33196
- Removed the `2.0-off` and `2.0-auto` modes for the `sql.defaults.distsql` cluster setting. All queries are now run via the newer, distributed SQL engine; queries are still only distributed if appropriate. #34163
- The `experimental_force_lookup_join` session variable has been removed. #34142
- Added the `experimental_reorder_joins_limit` session variable, which defaults to `4` and causes the cost-based optimizer to reorder up to 4 joins in a query to attempt to find the most performant ordering. This behavior can be disabled per-session by setting the `experimental_reorder_joins_limit` session variable to 0. #34549
- Formatting of timestamps as JSON strings has been changed to always use the RFC3339 format instead of Cockroach's customary format. Users can now expect to see a `T` separator instead of a space between the date and time components. #34412
- Introduced a new top-level statement for an experimental version of `CHANGEFEED` that doesn't require an enterprise license and that returns results as a stream over the sql connection. #34386
- The result buffer size can now be controlled on a per-connection basis with the `results_buffer_size` connection string parameter. #34385
- `CREATE STATISTICS` now runs as a job instead of as a regular SQL statement. #34279
- `INT` values are now stored with microsecond precision instead of nanoseconds. Existing intervals with nanoseconds are no longer able to return their nanosecond part. An existing table `t` with nanoseconds in intervals of column `s` can round them to the nearest microsecond with `UPDATE t SET s = s + '0s'`. Note that this could potentially cause uniqueness problems if the interval is a primary key. #34202
- Added support for `AS OF SYSTEM TIME` clauses in `BEGIN TRANSACTION` and `SET TRANSACTION` statements, which enables entire read-only transactions to be run against a historical timestamp. This functionality simplifies performing complex analytics against a consistent snapshot of historical data and eases the burden to use historical reads with ORMs which generally make modifying the syntax of generated `SELECT` statements difficult. #34305
- The behavior of the `now()` built-in function inside of historical `SELECT ... AS OF SYSTEM TIME` queries now reflects the historical timestamp at which the query is being run rather than the current clock time when the statement is executed. #34305
- The `ORDER BY` clause can no longer be used with a `DELETE` statement when there is no `LIMIT` clause present. Sorting the output should instead be done using `SELECT ... FROM [DELETE ...] ORDER BY ...`. #34303
- Enabled automatic statistics collection. #34529
- `DELETE`, `UPDATE`, and `UPSERT` statements are now planned by the cost-based optimizer. #34522
- The value of `information_schema.columns.character_maximum_column` is set to `NULL` for all integer types, for compatibility with PostgreSQL. #34182

### Command-line changes

- The modified time is now set for entries in `cockroach debug zip` output. #33714
- Clarified the informational message printed upon running `cockroach start --join`. #33435

### Admin UI changes

- Added a debug endpoint listing the hottest ranges by QPS on each node/store. #33336
- Improved performance of graph detail tooltips when viewing long timespans (e.g., 1 month) #34032
- `CHANGEFEED` metrics are now exposed in the UI. #34427

### Bug fixes

- Fixed a bug in `RESTORE` that prevented restoring some `BACKUP`s containing previously dropped or truncated interleaved tables. #34413
- Fixed a bug in `cockroach node status` that prevented it from displaying down nodes in the cluster in some circumstances. #34448
- Fixed several related panics in the optimizer related to plan exploration. #34667
- Resolved a cluster degradation scenario that could occur during `IMPORT`/`RESTORE` operations, manifested through a high number of pending Raft snapshots. #33582
- Fixed a bug where some comparison operations with constant inputs were not getting folded during query optimization, causing the optimizer to produce sub-optimal plans. #33597
- Window functions with non-empty `PARTITION BY` and `ORDER BY` clauses are now handled correctly when invoked via the low-level client protocol. #33591
- Fixed a memory leak around `DEALLOCATE` and `DISCARD` statements that could result in panics with the `unexpected <amount> leftover bytes` message. #33423
- Lookup joins now properly preserve their input order even if more than one row of the input corresponds to the same row of the lookup table. #33536
- Fixed a panic that occurred when performing an `INSERT ON CONFLICT` with a `SET UPDATE` that uses values from a subquery. #33553
- Preparing queries with missing placeholders (e.g., `SELECT $2::int`) now results in an error. #33716
- Fixed a goroutine leak that would occur while a cluster was unavailable (or a subset of nodes partitioned away from the cluster) and would cause a resource spike to resolve. #33282
- Fixed panics or incorrect results in some cases when grouping on constant columns (either with `GROUP BY` or `DISTINCT ON`). #34123
- Prevented down-replicating widely replicated ranges when nodes in the cluster are temporarily down. #34126
- Fixed a panic when an internal implementation error prevents proper handling of placeholders (query parameters). #34134
- CockroachDB now enables re-starting a node at an address previously allocated for another node. #34155
- The values reported in `information_schema.columns` for integer columns created prior to CockroachDB v2.1 as `BIT` are now fixed and consistent with other integer types. #34182
- CockroachDB 2.2-alpha releases can once again be built from source on FreeBSD (unsupported platform). #34244
- Fixed a back up in flow creation observed by "no inbound stream connection" caused by not releasing a lock before attempting a possibly blocking operation. #34218
- `CHANGEFEED`s now can be started on tables that have been backfilled by schema changes. #34317
- Fixed a possible panic in `crdb_internal.pretty_key()`. #34480
- `CHANGEFEED`s with `changefeed.push.enabled` set to `true` now resolve timestamps in the presence of inactive ranges. #34550
- Fixed a panic when updating a job that doesn't exist. #34574
- Fixed a panic due to incorrect statistics calculations when all values of a column are NULL. #34578
- Fixed a bug where lease transfers passed through Snapshots could forget to update in-memory state on the new leaseholder, allowing write-skew between read-modify-write operations. #34548

### Performance improvements

- Reduced the network and storage overhead of multi-range transactions. #33566
- A query plan cache now saves a portion of the planning time for frequent queries. #34454
- Transaction record garbage collection requests are now batched on a per range basis to reduce the number of Raft entries in a high-throughput, write-heavy, transactional workload. #34242

### Doc updates

- The new Life of a Distributed Transaction details the path that a query takes through CockroachDB's architecture, starting with a SQL client and progressing all the way to RocksDB (and then back out again). #4281
- Added a warning about cross-store rebalancing not working as expected in 3-node clusters with multiple stores per node. #4320
- Updated the `INT` documentation to include examples of actual min/max integers supported by each type for easier reference. Also added a description of possible compatibility issues caused by 64-bit integers vs., for example, JavaScript runtimes. #4317
- Documented the `sql.metrics.statement_details.plan_collection.period` cluster setting, which controls how often the logical plan for a fingerprint is sampled (5 minutes by default) on the Statements page of the Admin UI. #4316
- Added guidance on removing `UNIQUE` constraints. #4276
- Added a note that when a table that was previously split is truncated, the table must be pre-split again. #4274
- Updated the SQL Performance Best Practices with caveats around interleaving tables. #4273

### Contributors

This release includes 258 merged PRs by 29 authors. We would like to thank the following contributors from the CockroachDB community:

- George Utsin (first-time contributor)
- Txiaozhe (first-time contributor)
- Vijay Karthik

## v2.2.0-alpha.20190114

Release Date: January 14, 2019

### Backward-incompatible changes

- Composite foreign key matching
- Mutation statements

### Composite foreign key matching

We are changing the way composite foreign key matches are evaluated to match the default Postgres behavior. If your schema currently uses composite keys, it may require updates, since this change may affect your foreign key constraints and cascading behavior.

Prior to this change, we were matching composite keys with an incorrect implementation of the `MATCH FULL` method, and we are resolving this by moving all existing composite foreign key matches to a correct implementation of the `MATCH SIMPLE` method. Note that prior to this, there was no option for `MATCH FULL` or `MATCH SIMPLE` and all foreign key matching used the incorrect implementation of `MATCH FULL`.

For a more detailed explanation of the changes, see below.

For matching purposes, composite foreign keys can be in one of 3 states:

- Valid: Keys that can be used for matching foreign key relationships.
- Invalid: Keys that will not be used for matching.
- Unacceptable: Keys that cannot be inserted at all.

The `MATCH FULL` implementation we were using prior to this change allowed composite keys with a combination of `NULL` and non-null values. This meant that we matched on `NULL`s if a `NULL` existed in the referencing column, essentially treating `NULL`s as a valid value. This was incorrect, since `MATCH FULL` requires that if any column of a composite key is `NULL`, then all columns of the key must be `NULL`. In other words, either all must be `NULL`, or none may be.

To resolve this issue, all matches going forward will use the `MATCH SIMPLE` method (this matches the Postgres default). `MATCH SIMPLE` stipulates that:

- Valid composite keys may contain no `NULL` values, and will be used for matching.
- Invalid keys are keys with one or more `NULL` values, and will not be used for matching, including cascading operations.

For more information, see #32693.

#

### Mutation statements

Mutation statements like `UPDATE` and `INSERT` no longer attempt to guarantee mutation or output ordering when an `ORDER BY` clause is present. It is now an error to use `ORDER BY` without `LIMIT` with the `UPDATE` statement. #33087

### SQL language changes

- Added support for configuring authentication via an `hba.conf` cluster setting. #32892
- Added support for collecting table statistics on a default set of columns by calling `CREATE STATISTICS` with no columns specified. #32981
- Added the `default_int_size` session variable and `sql.defaults.default_int_size` cluster setting to control how the `INT` and `SERIAL` types are interpreted. The default value, `8`, causes these types to be interpreted as aliases for `INT8` and `SERIAL8`, which have been the historical defaults for CockroachDB. PostgreSQL clients that expect `INT` and `SERIAL` to be 32-bit values can set `default_int_size` to `4`, which will cause `INT` and `SERIAL` to be aliases for `INT4` and `SERIAL4`. Please note that due to issue #32846, `SET default_int_size` does not take effect until the next statement batch is executed. #32848
- When creating a replication zone, if a field is set to `COPY FROM PARENT`, the field now inherits its value from its parent zone, but any change to the field in the parent zone no longer affects the child zone. #32861
- Cockroach now supports specifying the matching method for composite foreign keys (a foreign key that includes more than one column) as either `MATCH SIMPLE` or `MATCH FULL`. `MATCH SIMPLE` remains the default. `MATCH FULL` differs from `MATCH SIMPLE` by not allowing the mixing of `NULL` and non-`NULL` values. Only all `NULL` values will not be used to validate a foreign key constraint check or cascading action. `MATCH PARTIAL` is still not supported. For more details see issue #20305 or https://www.postgresql.org/docs/11/sql-createtable.html. #32998
- The `string_agg()` aggregate function is now supported by the cost-based optimizer. #33172
- Added support for the `pg_catalog` introspection table `pg_am` for both PostgreSQL versions 9.5 and 9.6, which changed the table significantly. #33252
- Added foreign key checks to kv traces. #33328
- CockroachDB now defines columns `domain_catalog`, `domain_schema` and `domain_name` in `information_schema.columns` (using `NULL` values, since domain types are not yet supported) for compatibility with PostgreSQL clients. #33267
- Attempts to use some PostgreSQL built-in functions that are not yet supported in CockroachDB now cause a clearer error message, and also become reported in diagnostics reporting, if diagnostics reporting is enabled, so as to gauge demand. #33390
- CockroachDB now reports the name (not the value) of unsupported client parameters passed when setting up new SQL sessions in diagnostics reporting, if diagnostics reporting is enabled, to guage demand for additional support. #33264
- CockroachDB now collects statistics for statements executed "internally" (for system purposes). This is meant to facilitate performance troubleshooting. #32215
- CockroachDB now supports associating comments to SQL databases using PostgreSQL's `COMMENT ON DATABASE` syntax. This also provides proper support for pg's `pg_catalog.pg_description` and the `obj_description()` built-in function. #33057
- CockroachDB now supports associating comments to SQL table columns using PostgreSQL's `COMMENT ON COLUMN` syntax. This also provides proper support for pg's `pg_catalog.pg_description` and the `col_description()` built-in function. #33355
- Logical plans are now sampled and stored in statement statistics. #33020
- `SHOW EXPERIMENTAL_RANGES` is faster if no columns are requested from it, like in `SELECT COUNT(*) FROM [SHOW EXPERIMENTAL_RANGES...]`. #33463
- The new `experimental_optimizer_updates` cluster setting controls whether `UPDATE` and `UPSERT` statements are planned by the cost-based optimizer rather than the heuristic planner. Also note that when the setting is set, check constraints are not checked for rows skipped by the `INSERT ... DO NOTHING` clause. #33339

### Admin UI changes

- The Statement Details page now shows sample logical plans for each unique fingerprint. #33483
- SQL queries issued internally by CockroachDB are now visible on the Statements page. They can be filtered using the application name. #32215

### Bug fixes

- Fixed a bug where schema changes could get stuck for 5 minutes when executed immediately after a server restart. #32988
- Fixed a bug with returning dropped unique columns in `DELETE` statements with `RETURNING`. #33438
- Fixed a bug that could cause under-replication or unavailability in 5-node clusters and those using high replication factors. #32949
- Fixed an infinite loop in a low-level scanning routine that could be hit in unusual circumstances. #33063
- CockroachDB no longer reports under-replicated ranges corresponding to replicas that are waiting to be deleted. #32845
- Fixed a possible goroutine leak when canceling queries. #33130
- `CHANGEFEED`s and incremental `BACKUP`s no longer indefinitely hang under an infrequent condition. #32909
- `cockroach node status --ranges` previously listed the count of under-replicated ranges in the `ranges_unavailable` column and the number of unavailable ranges in the `ranges_underreplicated` column. This fixes that mix-up. #32950
- Fixed a panic in the cost-based optimizer during the planning of some queries. #33183
- Cancel requests (via the pgwire protocol) now close quickly with an EOF instead of hanging but still do not cancel the request. #33202
- CockroachDB does not crash upon running `SHOW SESSIONS`, `SHOW QUERIES`, and inspections of some `crdb_internal` tables when certain SQL sessions are issuing internal SQL queries. #33138
- Updated the Zipkin library to avoid deadlock when stopping Zipkin tracing. #33287
- Fixed a panic that could result from not supplying a nullable column in an `INSERT ON CONFLICT ... DO UPDATE` statement. #33245
- Fixed pgwire binary decoding of decimal `NaN` and `NULL` in arrays. #33295
- The `UPSERT` and `INSERT ON CONFLICT` statements now properly check that the user has the `SELECT` privilege on the target table. #33358
- CockroachDB now errors with a fatal exit when data or logging partitions become unresponsive. Previously, the process would remain running, though in an unresponsive state. #32978
- Updated the contextual help for `\h EXPORT` in `cockroach sql` to reflect the actual syntax of the statement. #33460
- `INSERT ON CONFLICT ... DO NOTHING` no longer ignores rows that appear to be duplicate in the `INSERT` operands but are not yet present in the table. These are now properly inserted. #33320
- Prevented a panic with certain queries that use the statement source (square bracket) syntax. #33537
- Previously, CockroachDB did not consider the value of the right operand for `<<` and `>>` operators, resulting in potentially very large results and excessive RAM consumption. This has been fixed to restrict the range of these values to that supported for the left operand. #33221

### Performance improvements

- Cross-range disjunctive scans where the result size can be deduced are now automatically parallelized. #31616
- Limited the concurrency of `BACKUP` on nodes with fewer cores to reduce performance impact. #33277
- Index joins, lookup joins, foreign key checks, cascade scans, zig zag joins, and `UPSERT`s no longer needlessly scan over child interleaved tables when searching for keys. #33350

### Doc updates

- Updated the Production Checklist with more current hardware recommendations and additional guidance on storage, file systems, and clock synch. #4153
- Expanded the SQLAlchemy tutorial to provide code for transaction retries and best practices for using SQLAlchemy with CockroachDB. #4142

### Contributors

This release includes 212 merged PRs by 34 authors. We would like to thank the following contributors from the CockroachDB community:

- Jaewan Park
- Jingguo Yao

## v2.2.0-alpha.20181217

Release Date: December 17, 2018

### General changes

- The default disk size on Kubernetes has been changed from 1 GiB to 100 GiB. #32428
- A new cluster setting (`sql.defaults.conn_results_buffer_size`) can be used to control server-side buffering of results. #32366

### Enterprise edition changes

- Disabled range merges on tables that are being restored or imported into. #32538
- Added timeseries metrics for debugging `CHANGEFEED` performance issues. #32241
- Added the option to supply Google Cloud Storage credentials on a per-statement basis with the query parameter `credentials`. #32544
- It is now possible to use AWS S3 temporary credentials for `BACKUP`/`RESTORE` and `IMPORT`/`EXPORT` using the `AWS_SESSION_TOKEN` parameter in the URL. #32455

### SQL language changes

- Users can customize the auto-retry savepoint name used by the `SAVEPOINT` command by setting the `force_savepoint_restart` session variable. For example, `SET force_savepoint_restart=true; BEGIN; SAVEPOINT foo` will now function as desired. This session variable may also be supplied as part of a connection string to support existing code that assumes that arbitrary savepoint names may be used. #31971
- The names supplied to a `SAVEPOINT` command are now properly treated as SQL identifiers. For example, `SAVEPOINT foo` and `SAVEPOINT FOO` are now equivalent statements. #31971
- It is now an error to run `ALTER TABLE ... DROP STORED` on a column which is not actually a computed, stored column. Previously, this statement would be a successful no-op. #32279
- Many queries containing a correlated `EXISTS` subquery with a generator function can now be decorrelated and executed successfully. Previously, these queries caused a decorrelation error. #31922
- `IMPORT` now uses larger integer sizes when converting unsigned MySQL integer columns to their signed cockroach counterparts. #32481
- An `ALTER TABLE` statement to add a foreign key constraint now automatically creates the necessary index if the referencing table is empty and the index does not already exist. #32234
- Queries involving `COLLATE` expressions are now supported by the cost-based optimizer. #32500
- Some categories of `SELECT` queries that return 0 or 1 rows (namely, queries by a PK, a unique index, or LIMIT 1 queries) are now guaranteed to not return retryable errors when running as implicit transactions (i.e., outside of a `BEGIN...COMMIT` block). #32401
- Added support for `AS OF SYSTEM TIME` with the `CREATE STATISTICS` statement. #32643
- CockroachDB now accepts ordinary string values for placeholders of type `BPCHAR`, for compatibility with PostgreSQL clients that use them. #32654
- CockroachDB now supports associating comments to SQL tables using PostgreSQL's `COMMENT ON TABLE` syntax. This also provides proper support for pg's `pg_catalog.pg_description` and built-in function `obj_description()`. #32442
- The `SHOW TABLES` statement now supports printing out table comments using the optional phrase `WITH COMMENT`, e.g `SHOW TABLES FROM mydb WITH COMMENT`. #32442
- The `INT` type is now treated as an alias for `INT8`. #32831
- Added an `experimental_optimize_updates` flag, which uses the cost-based optimizer to plan `UPDATE` statements when set to true. #32774

### Command-line changes

- `cockroach sql` and other commands that print query results and query execution latency will now exclude the time required to prepare the display client-side from the latency measurement. #32663
- `cockroach workload` now includes the `kv` and `ycsb` generators. #32719
- Added the `cockroach debug merge-logs` command to combine logs from multiple nodes. #32790

### Admin UI changes

- All existing uses of the Loading component now properly surface data errors. Previously, data errors weren't consistently surfaced. #32464
- The Node map now uses an `equirectangular` projection. #32617

### Bug fixes

- Fixed a panic on `UPDATE RETURNING *` during a schema change. #32188
- Fixed a panic when expression contains both a correlated and uncorrelated subquery. #32443
- Fixed a panic on `UPSERT` in the middle of a schema change adding a non-nullable column. #32585
- Fixed an error when configuring `NOT NULL` computed columns. #32585
- Fixed a deadlock when using `ALTER TABLE VALIDATE CONSTRAINT` in a transaction with a schema change. #32772
- Prevented non-superusers from seeing other user's sessions and queries via the `ListSessions` and `ListLocalSessions` status server API methods. #32253
- Avoided occasional unnecessary Raft snapshots after range splits. #31875
- `CHANGEFEED`s emitting into Kafka now more quickly notice new partitions. #32297
- Ensured that space in the temporary storage directory is reclaimed more promptly. #32385
- `CHANGEFEED`s with the `experimental_avro` option now work with column `WIDTH`s and `PRECISION`s. #32474
- CockroachDB now properly rejects queries that use an invalid function (e.g., an aggregation) in the `SET` clause of an `UPDATE` statement. #32505
- Prevented `VALUES` clauses from returning incorrect results for certain special OID values. #32494
- CockroachDB now reports an unimplemented error when a `WHERE` clause is used after `INSERT ... ON CONFLICT`. #32556
- Fixed an issue where calling `CREATE STATISTICS` on a large table could cause the server to crash due to running out of memory. #32614
- CockroachDB now properly handles foreign key cascading actions `SET DEFAULT` and `SET NULL` in `SHOW CREATE` and `cockroach dump`. #32589
- Fixed a node data loss bug that occurs when a disk becomes temporarily full. #32605
- Fixed a panic caused by `WITH ORDINALITY` in some cases. #32596
- Dates no longer have a time component in their text encoding over the wire. #32144
- Intervals now match Postgres in their text encoding over the wire. #32144
- Intervals no longer sometimes lose 1ns of precision. This only happened rarely due to floating point inaccuracy. #32144
- Corrected the `pgwire` encoding for arrays and tuples. #32144
- Corrected the binary decimal encoding for `NaN`. #32144
- Prevented a panic when running certain subqueries that get planned in a distributed fashion. #32652
- Fixed a panic that could occur during or after a data import on Windows. #32664
- Lookup joins now properly preserve ordering for outer joins. Prior to this fix, `LEFT JOIN` queries under specific conditions could produce results which did not respect the `ORDER BY` clause. #32317
- CockroachDB now again enables admin users, including `root`, to list all user sessions besides their own. #32629
- Fixed a panic involving `json_agg` and window functions. #32716
- CockroachDB no longer panics when encountering an internal error related to invalid entries in the output of `SHOW SESSION`s. #32713
- Resolved a cluster degradation scenario that could occur during `IMPORT`/`RESTORE` operations, manifested through a high number of pending Raft snapshots. #32594
- CockroachDB now properly evaluates `CHECK` constraints after a row conflict in `INSERT ... ON CONFLICT` when the `CHECK` constraint depends on a column not assigned by `DO UPDATE SET`. #32779
- CockroachDB now properly records statistics for sessions where the value of `application_name` is given by the client during initialization instead of `SET`. #32754
- `cockroach workload run` no longer includes data-only generators #32720
- Fixed a bug where metadata about contended keys was inadvertently ignored, allowing for a failure in transaction cycle detection and transaction deadlocks in rare cases. #32773
- Fixed a bug where `SCRUB` would erroneously report that index keys were out of order. #32908

### Performance improvements

- Removed locking when reading physical time. #32225
- CockroachDB now users a faster randomness source to generate transaction IDs. #32238
- Implemented more efficient execution for some queries with `GROUP BY` or `DISTINCT ON` and an `ORDER BY` clause where an index with a suitable ordering is not available. #32307
- CockroachDB now rewrites the Raft entry cache to optimize for access patterns, reduce lock contention, and reduce memory footprint. #32618
- Re-enabled usage of RocksDB FlushWAL, which is a minor performance improvement for synchronous RocksDB write operations. #32674
- Replaced the Replica latching mechanism with a new optimized data structure that improves throughput, especially under heavy contention. #32865

### Build changes

- `ncurses` is now linked statically so that the cockroach binary no longer requires a particular version of the `ncurses` shared library to be available on deployment machines. #32959

### Doc updates

- Updated the Performance Tuning and TPC-C Benchmarking tutorials to clarify that the `--advertise-addr` flag must be set uniquely for each node. #4164
- Fixed a method in the Build a C# (.NET) App with CockroachDB code samples. #4161
- Expanded the Build a Rust App with CockroachDB tutorial to cover secure clusters. #4127

### Contributors

This release includes 265 merged PRs by 38 authors. We would like to thank the following contributors from the CockroachDB community:

- Jaewan Park (first-time contributor)
- Joe Harlow (first-time contributor)
- Mayank Oli
- shakeelrao (first-time contributor)

## v2.2.0-alpha.20181119

Release Date: November 19, 2018

### Backward-incompatible changes

- CockroachDB no longer supports the `B'abcde'` notation to express byte array literals. This notation now expresses bit array literals like in PostgreSQL. The `b'...'` notation remains for byte array literals. #28807
- The normalized results of certain timestamp + duration operations involving year or month durations have been adjusted to agree with the values returned by PostgreSQL. #31146
- The `CHANGEFEED` `experimental-avro` option has been renamed `experimental_avro`. #31838
- Timezone abbreviations, such as `EST`, are no longer allowed when parsing or converting to a date/time type. Previously, an abbreviation would be accepted if it were an alias for the session's timezone. #31758

### General changes

- Load-based splitting is now enabled by default. In conjunction, the `range_min_bytes` setting in the `.default` replication zone is set to a higher value to prevent ranges from unnecessarily being considered for merging. #31413
- Added a Kubernetes configuration that shows how to use certificates generated outside of the Kubernetes-orchestrated CockroachDB cluster. #27921
- Added a Fluentd configuration for external logging of a Kubernetes-orchestrated CockroachDB cluster. #26685

### SQL language changes

- The `EXPERIMENTAL_RELOCATE` statement no longer temporarily increases the number of replicas in a range more than one above the range's replication factor, preventing rare edge cases of unavailability. #29684
- The output of `SHOW JOBS` now reports ongoing jobs first in start time order, then completed jobs in finished time order. The `running_status` column becomes `NULL` when the status cannot be determined. #30917
- The output of `SHOW ZONE CONFIGURATIONS` now only shows the zone name and the SQL representation of the config. #30985
- The range log and system events logs now automatically purge records older than 30 and 90 days, respectively. This can be adjusted via the `server.rangelog.ttl` and `server.eventlog.ttl` cluster settings. #30913
- In cases such as `'2018-01-31'::TIMESTAMP + '1 month'`, where an intermediate result of February 31st needs to be normalized, previous versions of CockroachDB would advance to March 3. Instead, CockroachDB now "rounds down" to February 28th to agree with the values returned by PostgreSQL. This change also affects the results of the `generate_sequence()` function when used with timestamps. #31146
- Updated the output of `SHOW ZONE CONFIGURATIONS`. Also, unset fields in zone configurations now inherit parent values. #30611
- If diagnostics reporting is enabled, attempts to use `CREATE/DROP SCHEMA`, `DEFERRABLE`, `CREATE TABLE (LIKE ...)`, and `CREATE TABLE ... WITH` are now collected as telemetry to gauge demand for these currently unsupported features. #31635
- If diagnostics reporting is enabled, the name of SQL built-in functions are now collected upon evaluation errors. #31677
- If diagnostics reporting is enabled, attempts by client apps to use the unsupported "fetch limit" parameter (e.g., via JDBC) are now collected as telemetry to gauge support for this feature. #31637
- The `IMPORT format (file)` syntax is deprecated in favor of `IMPORT format file`. Similarly, `IMPORT TABLE ... FROM format (file)` is deprecated in favor of `IMPORT TABLE ... FROM format file`. #31263
- For compatibility with PostgreSQL, it is once again possible to use the keywords `FAMILY`, `MINVALUE`, `MAXVALUE`, `INDEX`, and `NOTHING` as table names, and the names "index" and "nothing" are once again accepted in the right-hand side of `SET` statement assignments. #31731
- Renamed the first column name returned by `SHOW STATISTICS` to `statistics_name`. #31927
- CockroachDB now accepts a wider variety of date, time, and timestamp formats. #31758
- The new `experimental_vectorize` session setting, when enabled, causes columnar operators to be planned instead of row-by-row processors, when possible. #31354
- CockroachDB now supports the `BIT` and `VARBIT (BIT VARYING)` bit array data types like PostgreSQL. Currently, only the bit array literal notation with a capital B (e.g., `B'10001'`) is supported; the notation with a small `b` (e.g., `b'abcd'`) continues to denote byte arrays as in previous versions of CockroachDB. #28807
- Added the `array_to_json` built-in function. #29818
- Statements involving the dropping or truncating of tables, such as `DROP DATABASE`, `DROP TABLE`, and `TRUNCATE`, are now considered jobs and, as such, can be tracked via `SHOW JOBS` and the Jobs page of the Admin UI. #29993

### Command-line changes

- The `cockroach cert create-client` now offers the `--also-generate-pkcs8-key` flag for writing a client key in PKCS#8 format. #29008
- The client-side option `smart_prompt` now controls whether `cockroach sql` and `cockroach demo` use the current transaction state to offer a multi-line entry at the start of new transactions. #31630
- The `cockroach sql` and `cockroach demo` commands now recognize the commands `exit` and `quit` to terminate the shell. #31915
- The `cockroach debug estimate-gc` command now allows users to specify TTL period, with a default of 24 hours. #31402

### Admin UI changes

- Improved the layout of the Cluster Overview page for large clusters with many nodes and ranges. #31512
- Added the current node ID to the Advanced Debugging page to help identify the current node when viewing the web UI through a load balancer. #31835
- The Non-Table Cluster Data section of the Databases page now includes all non-table data types. Previously, this section only showed Time Series data. #31830

### Bug fixes

- Hash functions with `NULL` input now return `NULL`. #29822
- Generated sequences now respect the `statement_timeout` session variable. #31083
- `IS OF (...)` expressions no longer report arrays with different element types as being the same. #31393
- Fixed a bug where Raft proposals could get stuck if forwarded to a leader who could not itself append a new entry to its log. #31408
- The `confkey` column of `pg_catalog.pg_constraint` no longer includes columns that were not involved in the foreign key reference. #31610
- Fixed a small memory leak when running distributed queries. #31736
- Fixed a bug in the cost-based optimizer that sometimes prevented passing ordering requirements through aggregations. #31754
- Fixed a bug that caused transactions to unnecessarily return a "too large" error. #31733
- `CHANGEFEED`s now escape Kafka topic names, when necessary. #31596
- Fixed a bug that would incorrectly cause JSON field access equality comparisons to be true when they should be false. #31751
- Fixed a bug that sometimes caused invalid results or an "incorrectly ordered stream" error with streaming aggregations. #31825
- Fixed a mismatch between lookup join planning and execution, which could cause queries to fail with the error "X lookup columns specified, expecting at most Y". #31792
- Prevented a performance degradation related to overly aggressive Raft log truncations that could occur during `RESTORE` or `IMPORT` operations. #31914
- `EXPLAIN ANALYZE` plans no longer show the processor with ID 0's stats in the Response box. #31941
- Fixed rare deadlocks during `IMPORT`, `RESTORE`, or `BACKUP`. #31963
- Fixed a panic caused by incorrectly encoded Azure credentials. #31984
- The cost-based optimizer no longer chooses the wrong index for a scan because of incorrect selectivity estimation. #31937
- Prepared statements that bind temporal values now respect the session's timezone setting. Previously, bound temporal values were always interpreted as though the session time zone were UTC. #31758
- Prevented a stall in the processing of Raft snapshots when many snapshots are requested at the same time. #32053
- `CHANGEFEED`s now spend dramatically less time flushing Kafka writes. #32060
- Fixed a bug that caused some queries with `DISTINCT ON` and `ORDER BY` with descending columns to return an error incorrectly. #31976
- Fixed a bug that caused queries with `GROUP BY` or `DISTINCT ON` to return incorrect results or an "incorrectly ordered stream" error. Also improved performance of some aggregations by utilizing streaming aggregation in more cases. #31976
- Fixed bit array wire encoding in binary format. #32091
- Fixed a bug that caused transactions to appear partially committed. CockroachDB was sometimes claiming to have failed to commit a transaction when some (or all) of its writes were actually persisted. #32166
- Prevented long stalls that can occur in contended transactions. #32211
- The graphite metrics sender now collects and sends only the latest data point instead of all data points since startup. #31829

### Performance improvements

- Improved the performance of `AS OF SYSTEM TIME` queries by letting them use the table descriptor cache. #31716
- Within a transaction, when performing a schema change after the table descriptor has been modified, accessing the descriptor should be faster. #30934
- Improved the performance of index data deletion. #31326
- The cost-based optimizer can now determine more keys in certain cases involving unique indexes, potentially resulting in better plans. #31662
- Reduced the amount of allocated memory by pooling allocations of `rocksDBBatch` and `RocksDBBatchBuilder` objects. #30523
- Cache zone configuration values to avoid repetitive deserialization. #30143

### Contributors

This release includes 998 merged PRs by 50 authors. We would like to thank the following contributors from the CockroachDB community:

- Jan Owsiany (first-time contributor)
- M-srivatsa (first-time contributor)
- Mayank (first-time contributor)
- Mayank Oli (first-time contributor)
- Mo Firouz (first-time contributor)
- Sankt Petersbug (first-time contributor)
- Vijay Karthik
- changangela (first-time contributor)
- hueypark (first-time contributor)
- neeral