# What's New in v2.0

CockroachDB v2.0 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 v2.0

- For key feature enhancements in v2.0 and other upgrade considerations, refer to the notes for v2.0.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.

Get future release notes emailed to you:

Thanks!

## v2.0.7

Release Date: December 10, 2018

### Docker image

    $ docker pull cockroachdb/cockroach:v2.0.7

### Bug fixes

- Fixed a security vulnerability in which data could be leaked from a cluster, or tampered with in a cluster, in secure mode. #30823
- Fixed a bug where queries could get stuck for seconds or minutes, usually following node restarts. #31350
- CockroachDB no longer crashes due to a `SIGTRAP` error soon after startup on macOS Mojave. #31522
- Fixed bug causing transactions to unnecessarily hit a "too large" error. #31827
- Fixed a bug causing transactions to appear partially committed. Occasionally, CockroachDB claimed to have failed to commit a transaction when some (or all) of its writes were actually persisted. #32223
- Fixed a bug where entry application on Raft followers could fall behind entry application on the leader, causing stalls during splits. #32601
- CockroachDB now properly rejects queries that use an invalid function (e.g., an aggregation) in the `SET` clause of an `UPDATE` statement. #32507

### Build changes

- CockroachDB can now be built from source on macOS 10.14 (Mojave). #31310

### Contributors

This release includes 11 merged PRs by 6 authors.

## v2.0.6

Release Date: October 1, 2018

### Security bug fix

- Fixed a vulnerability in which TLS certificates were not validated correctly for internal RPC interfaces. This vulnerability could allow an unauthenticated user with network access to read and write to the cluster. #30821

### Command-line changes

- The `cockroach zone` command is now compatible with CockroachDB v2.1. However, note that `cockroach zone` is also deprecated in CockroachDB v2.1 in favor of `ALTER ... CONFIGURE ZONE` and `SHOW ZONE CONFIGURATION` statements to update and view replication zones. #29632

### Bug fixes

- The Jobs page now sorts by Creation Time by default instead of by User. #30429
- Fixed out-of-memory errors caused by very large raft logs. #28398 #28526
- Fixed a rare scenario where the value written for one system key was seen when another system key was read, leading to the violation of internal invariants. #28798
- Fixed a memory leak when contended queries time out. #29100
- Fixed a bug causing index creation to fail under rare circumstances. #29203
- Fixed a panic that occurred when not all values were present in a composite foreign key. #30154
- The `ON DELETE CASCADE` and `ON UPDATE CASCADE` foreign key actions no longer cascade through `NULL`s. #30129
- Fixed the occasional improper processing of the `WITH` operand with `IMPORT`/`BACKUP`/`RESTORE` and common table expressions. #30199
- Transaction size limit errors are no longer returned for transactions that have already committed. #30309
- Fixed a potential infinite loop when the merge joiner encountered an error or cancellation. #30380
- This release includes the following fixes to the `cockroach sql` command:
  - The command now properly prints a warning when a `?` character is mistakenly used to receive contextual help in a non-interactive session, instead of crashing. #28325
  - The command now works properly even when the `TERM` environment variable is not set. #28614
  - The commands are now properly able to customize the prompt with `~/.editrc` on Linux. #28614
  - The commands once again support copy-pasting special unicode character from other documents. #28614

### Performance improvements

- Greatly improved the performance of catching up followers that are behind when Raft logs are large. #28526

### Contributors

This release includes 26 merged PRs by 12 authors.

## v2.0.5

Release Date: August 13, 2018

### SQL language changes

- The binary Postgres wire format is now supported for `INTERVAL` values. #28135

### Bug fixes

- `IMPORT` no longer silently converts `rn` characters in CSV files into `n`. #28225
- Fixed a bug that could cause the row following a deleted row to be skipped during `BACKUP`. #28196
- Limited the size of "batch groups" when committing a batch to RocksDB to avoid rare scenarios in which multi-gigabyte batch groups are created, which can cause a server to run out of memory when replaying the RocksDB log at startup. #28009
- Prevented unbounded growth of the Raft log caused by a loss of quorum. #27868
- CockroachDB now properly reports an error when a query attempts to use `ORDER BY` within a function argument list, which is an unsupported feature. #25147

### Doc updates

- Added a Performance Tuning tutorial that demonstrates essential techniques for getting fast reads and writes in CockroachDB, starting with a single-region deployment and expanding into multiple regions. #3378
- Expanded the Production Checklist to cover a detailed explanation of network flags and scenarios and updated production deployment tutorials to encourage the use of `--advertise-host` on node start. #3352
- Expanded the Kubernetes tutorials to include setting up monitoring and alerting with Prometheus and Alertmanager. #3370
- Updated the OpenSSL certificate tutorial to allow multiple node certificates with the same subject. #3423

### Contributors

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

- neeral

## v2.0.4

Release Date: July 16, 2018

### SQL Language Changes

- `CHECK` constraints are now checked when updating a conflicting row in `INSERT ... ON CONFLICT DO UPDATE` statements. #26699
- An error is now returned to the user instead of panicking when trying to add a column with a `UNIQUE` constraint when that column's type is not indexable. #26728

### Command-Line Changes

- CockroachDB now computes the correct number of replicas on down nodes. Therefore, when decommissioning nodes via the `cockroach node decommission` command, the `--wait=all` option no longer hangs indefinitely when there are down nodes. As a result, the `--wait=live` option is no longer necessary and has been deprecated. #27158

### Bug Fixes

- Fixed a typo on Node Map screen of the Admin UI. #27129
- Fixed a rare crash on node decommissioning. #26717
- Joins across two interleaved tables no longer return incorrect results under certain circumstances when the equality columns aren't all part of the interleaved columns. #26832
- Successes of time series maintenance queue operations are no longer counted as errors in the Metrics dashboard of the Admin UI. #26820
- Prevented a situation in which ranges repeatedly fail to perform a split. #26944
- Fixed a crash that could occur when distributed `LIMIT` queries were run on a cluster with at least one unhealthy node. #26953
- Failed `IMPORT`s now begin to clean up partially imported data immediately and in a faster manner. #26986
- Alleviated a scenario in which a large number of uncommitted Raft commands could cause memory pressure at startup time. #27024
- The pg-specific syntax `SET transaction_isolation` now supports settings other than `SNAPSHOT`. This bug did not affect the standard SQL `SET TRANSACTION ISOLATION LEVEL`. #27047
- The `DISTINCT ON` clause is now reported properly in statement statistics. #27222
- Fixed a crash when trying to plan certain `UNION ALL` queries. #27233
- Commands are now abandoned earlier once a deadline has been reached. #27215
- Fixed a panic in `IMPORT` when creating a table using a sequence operation (e.g., `nextval()`) in a column's DEFAULT expression. #27294

### Doc Updates

- Added a tutorial on benchmarking CockroachDB with TPC-C. #3281
- Added `systemd` configs and instructions to deployment tutorials. #3268
- Updated the Kubernetes tutorials to reflect that pods aren't "Ready" before init. #3291

### Contributors

This release includes 22 merged PRs by 17 authors. We would like to thank the following contributors from the CockroachDB community, with special thanks to first-time contributors Emmanuel.

- Emmanuel
- neeral

## v2.0.3

Release Date: June 18, 2018

### General Changes

- The new `compactor.threshold_bytes` and `max_record_age` cluster settings can be used to configure the compactor. #25458
- The new `cluster.preserve_downgrade_option` cluster setting makes it possible to preserve the option to downgrade after performing a rolling upgrade to v2.1. #25811

### SQL Language Changes

- Prevented `DROP TABLE` from using too much CPU. #25852

### Command-Line Changes

- The `cockroach sql` command no longer prompts for a password when a certificate is provided. #26232
- The `cockroach quit` command now prints warning messages to the standard error stream, not to standard output. #26163

### Bug Fixes

- Prevented the internal gossip network from being partitioned by making it much less likely that nodes in the network could forget about each other. #25521
- Prevented spurious `BudgetExceededErrors` for some queries that read a lot of JSON data from disk. #25719
- Fixed a crash in some cases when using a `GROUP BY` with `HAVING`. #25654
- Fixed a crash caused by inserting data into a table with computed columns that reference other columns that weren't present in the `INSERT` statement. #25807
- `UPSERT` is now properly able to write `NULL` values to every column in tables containing more than one column family. #26181
- Fixed a bug where a long-running query running from one day to the next would not always produce the right value for `current_date()`. #26413
- Fixed a bug where `cockroach quit` would erroneously fail even though the node already successfully shut down. #26163
- Rows larger than 8192 bytes are now supported by the "copy from" protocol. #26641
- Trying to "copy from stdin" into a table that doesn't exist no longer drops the connection. #26641
- Previously, expired compactions could stay in the queue forever. Now, they are removed when they expire. #26659

### Performance Improvements

- The performance impact of dropping a large table has been substantially reduced. #26615

### Doc Updates

- Documented special syntax forms of built-in SQL functions and conditional and function-like operators, and updated the SQL operator order of precedence. #3192
- Added best practices on understanding and avoiding transaction contention and a related FAQ. #3156
- Improved the documentation of `AS OF SYSTEM TIME`. #3155
- Expanded the manual deployment guides to cover running a sample workload against a cluster. #3149
- Added FAQs on generating unique, slowly increasing sequential numbers and the differences between `UUID`, sequences, and `unique_rowid()`. #3104

### Contributors

This release includes 19 merged PRs by 14 authors.

## v2.0.2

Release Date: May 21, 2018

### General Changes

- The header of new log files generated by `cockroach start` will now include the cluster ID once it has been determined. #24982
- The cluster ID is now reported with tag `[config]` in the first log file, not only when log files are rotated. #24982
- Stopped spamming the server logs with "error closing gzip response writer" messages. #25108

### SQL Language Changes

- Added more ways to specify an index name for statements that require one (e.g., `DROP INDEX`, `ALTER INDEX ... RENAME`, etc.), improving PostgreSQL compatibility. #24817
- Clarified the error message produced upon accessing a virtual schema with no database prefix (e.g., when `database` is not set). #24809
- `STORED` is no longer a reserved keyword and can again be used as an unrestricted name for databases, tables and columns. #24864
- Errors detected by `SHOW SYNTAX` are now tracked internally like other SQL errors. #24900
- `IMPORT` now supports hex-encoded byte literals for `BYTES` columns. #25063
- Collated strings can now be used in `WHERE` clauses on indexed columns. #25175
- The Level and Type columns of `EXPLAIN (VERBOSE)` results are now hidden; if they are needed, they can be `SELECT`ed explicitly. #25206

### Admin UI Changes

- Added RocksDB compactions/flushes to storage graphs. #25457

### Bug Fixes

- It is once again possible to use a simply qualified table name in qualified stars (e.g., `SELECT mydb.kv.* FROM kv`) for compatibility with CockroachDB v1.x. #24842
- Fixed a scenario in which a node could deadlock while starting up. #24831
- Ranges in partitioned tables now properly split to respect their configured maximum size. #24912
- Some kinds of schema change errors that were stuck in a permanent loop now correctly fail. #25015
- When adding a column, CockroachDB now verifies that the column is referenced by no more than one foreign key. Existing tables with a column that is used by multiple foreign key constraints should be manually changed to have at most one foreign key per column. #25079
- CockroachDB now properly reports an error when using the internal-only functions `final_variance()` and `final_stddev()` instead of causing a crash. #25218
- The `constraint_schema` column in `information_schema.constraint_column_usage` now displays the constraint's schema instead of its catalog. #25220
- Fix a panic caused by certain queries containing `OFFSET` and `ORDER BY`. #25238
- `BEGIN; RELEASE SAVEPOINT` now returns an error instead of causing a crash. #25251
- Fixed a rare `segfault` that occurred when reading from an invalid memory location returned from C++. #25361
- Fixed a bug with `IS DISTINCT FROM` not returning `NULL` values that pass the condition in some cases. #25339
- Restarting a CockroachDB server on Windows no longer fails due to file system locks in the store directory. #25439
- Prevented the consistency checker from deadlocking. This would previously manifest itself as a steady number of replicas queued for consistency checking on one or more nodes and would resolve by restarting the affected nodes. #25474
- Fixed problems with `IMPORT` sometimes failing after node decommissioning. #25307
- Fixed a bug causing `PREPARE` to hang when run in the same transaction as a `CREATE TABLE` statement. #24874

### Build Changes

- Build metadata, like the commit SHA and build time, is properly injected into the binary when using Go 1.10 and building from a symlink. #25062

### Doc Updates

- Improved the documentation of the `now()`, `current_time()`, `current_date()`, `current_timestamp()`, `clock_timestamp()`, `statement_timestamp()`, `cluster_logical_timestamp()`, and `age()` built-in functions. #25383 #25145

### Contributors

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

- Garvit Juniwal
- Jingguo Yao

## v2.0.1

Release Date: April 23, 2018

### General Changes

- The new `server.clock.persist_upper_bound_interval` cluster setting can be used to guarantees monotonic wall time across server restarts. #24624
- The new `server.clock.forward_jump_check_enabled` cluster setting can be used to cause nodes to panic on clock jumps. #24606
- Prevented execution errors reporting a missing `libtinfo.so.5` on Linux systems. #24531

### Enterprise Edition Changes

- It is now possible to `RESTORE` views when using the `into_db` option. #24590
- The new `jobs.registry.leniency` cluster setting can be used to allow long-running `IMPORT` jobs to survive temporary node saturation. #24505
- Relaxed the limitation on using `BACKUP` in a mixed version cluster. #24515

### SQL Language Changes

- Improved the error message returned on object creation when no current database is set or only invalid schemas are in the `search_path`. #24812
- The `current_schema()` and `current_schemas()` built-in functions now only consider valid schemas, like PostgreSQL does. #24758
- The experimental SQL features `SHOW TESTING_RANGES` and `ALTER ... TESTING_RELOCATE` have been renamed `SHOW EXPERIMENTAL_RANGES` and `ALTER ... EXPERIMENTAL_RELOCATE`. #24699
- `ROLE`, `VIRTUAL`, and `WORK` are no longer reserved keywords and can again be used as unrestricted names. #24665 #24549

### Command-Line Changes

- When `cockroach gen haproxy` is run, if an `haproxy.cfg` file already exists in the current directory, it now gets fully overwritten instead of potentially resulting in an unusable config. #24336

### Bug Fixes

- Fixed a bug when using fractional units (e.g., `0.5GiB`) for the `--cache` and `--sql-max-memory` flags of `cockroach start`. #24388
- Fixed the handling of role membership lookups within transactions. #24334
- Fixed a bug causing some lookup join queries to report incorrect type errors. #24825
- `ALTER INDEX ... RENAME` can now be used on the primary index. #24777
- Fixed a panic involving inverted index queries using the `->` operator. #24596
- Fix a panic involving inverted index queries over `NULL`. #24566
- Fixed a bug preventing inverted index queries that have a root with a single entry or element but multiple children overall. #24376
- `JSONB` values can now be cast to `STRING` values. #24553
- Prevented executing distributed SQL operations on draining nodes. #23916
- Fixed a panic caused by a `WHERE` condition that requires a column to equal a specific value and at the same time equal another column. #24517
- Fixed a panic caused by passing a `Name` type to `has_database_privilege()`. #24270
- Fixed a bug causing index backfills to fail in a loop after exceeding the GC TTL of their source table. #24427
- Fixed a panic caused by null config zones in diagnostics reporting. #24526

### Performance Improvements

- Some `SELECT`s with limits no longer require a second low-level scan, resulting in much faster execution. #24796

### Contributors

This release includes 39 merged PRs by 16 authors. Special thanks to Vijay Karthik from the CockroachDB community.

## v2.0.0

Release Date: April 4, 2018

With the release of CockroachDB v2.0, we’ve made significant performance improvements, expanded our PostgreSQL compatibility by adding support for JSON (among other types), and provided functionality for managing multi-regional clusters in production.

- Read more about these changes in the v2.0 blog post.
- Check out a summary of the most significant user-facing changes.
- Then upgrade to CockroachDB v2.0.

### Summary

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

- Enterprise Features
- Core Features
- Backward-Incompatible Changes
- Known Limitations
- Documentation Updates

### Enterprise Features

These new features require an enterprise license. You can register for a 30-day trial license.

Feature | Description
--- | ---
Table Partitioning | Table partitioning gives you row-level control of how and where your data is stored. This feature can be used to keep data close to users, thereby reducing latency, or to store infrequently-accessed data on slower and cheaper storage, thereby reducing costs.
Node Map | The Node Map in the Admin UI visualizes the geographical configuration of a multi-region cluster by plotting the node localities on a world map. This feature provides real-time cluster metrics, with the ability to drill down to individual nodes to monitor and troubleshoot cluster health and performance.
Role-Based Access Control | Roles simplify access control by letting you assign SQL privileges to groups of users rather than to individuals.
Point-in-time Backup/Restore (Beta) | Data can now be restored as it existed at a specific point-in-time within the revision history of a backup. This is a beta feature. It is currently undergoing continued testing. Please file a Github issue with us if you identify a bug.

### Core Features

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

### SQL

Feature | Description
--- | ---
JSON Support | The `JSONB` data type and inverted indexes give you the flexibility to store and efficiently query semi-structured data.
Sequences | Sequences generate sequential integers according to defined rules. They are generally used for creating numeric primary keys.
SQL Audit Logging (Experimental) | SQL audit logging gives you detailed information about queries being executed against your system. This feature is especially useful when you want to log all queries that are run against a table containing personally identifiable information (PII). This is an experimental feature. Its interface and output are subject to change.
Common Table Expressions | Common Table Expressions (CTEs) simplify the definition and use of subqueries. They can be used in combination with `SELECT` clauses and `INSERT`, `DELETE`, `UPDATE` and `UPSERT` statements.
Computed Columns | Computed columns store data generated from other columns by an expression that's included in the column definition. They are especially useful in combination with table partitioning, `JSONB` columns, and secondary indexes.
Foreign Key Actions | The `ON UPDATE` and `ON DELETE` foreign key actions control what happens to a constrained column when the column it's referencing (the foreign key) is deleted or updated.
Virtual Schemas | For PostgreSQL compatibility, CockroachDB now supports a three-level structure for names: database name > virtual schema name > object name. The new `SHOW SCHEMAS` statement can be used to list all virtual schemas for a given database.
`IMPORT` | The `IMPORT` statement now imports tabular data in a fully distributed fashion, and import jobs can now be paused, resumed, and cancelled.
`INET` | The `INET` data type stores an IPv4 or IPv6 address.
`TIME` | The `TIME` data type stores the time of day without a time zone.

### Operations

Feature | Description
--- | ---
Node Readiness Endpoint | The new `/health?ready=1` endpoint returns an `HTTP 503 Service Unavailable` status response code with an error when a node is being decommissioned or is in the process of shutting down and is therefore not able to accept SQL connections and execute queries. This is especially useful for making sure load balancers do not direct traffic to nodes that are live but not "ready", which is a necessary check during rolling upgrades.
Node Decommissioning | Nodes that have been decommissioned and stopped no longer appear in Admin UI and command-line interface metrics.
Per-Replica Constraints in Replication Zones | When defining a replication zone, unique constraints can be defined for each affected replica, meaning you can effectively pick the exact location of each replica.
Replication Zone for "Liveness" Range | Clusters now come with a pre-defined replication zone for the "liveness" range, which contains the authoritative information about which nodes are live at any given time.
Timeseries Data Controls | It is now possible to reduce the amount of timeseries data stored by a CockroachDB cluster or to disable the storage of timeseries data entirely. The latter is recommended only when using a third-party tool such as Prometheus for timeseries monitoring.

### Backward-Incompatible Changes

Change | Description
--- | ---
Replication Zones | Positive replication zone constraints no longer work. Any existing positive constraints will be ignored. This change should not impact existing deployments since positive constraints have not been documented or supported for some time.
Casts from `BYTES` to `STRING` | Casting between these types now works the same way as in PostgreSQL. New functions `encode()` and `decode()` are available to replace the former functionality.
`NaN` Comparisons | `NaN` comparisons have been redefined to be compatible with PostgreSQL. `NaN` is now equal to itself and sorts before all other non-NULL values.
`DROP USER` | It is no longer possible to drop a user with grants; the user's grants must first be revoked.
Cluster Settings | The obsolete `kv.gc.batch_size` cluster setting has been removed.
Environment Variables | The `COCKROACH_METRICS_SAMPLE_INTERVAL` environment variable has been removed. Users that relied on it should reduce the value for the `timeseries.resolution_10s.storage_duration` cluster setting instead.
Sequences | As of the v1.2-alpha.20171113 release, how sequences are stored in the key-value layer changed. Sequences created prior to that release must therefore be dropped and recreated. Since a sequence cannot be dropped while it is being used in a column's `DEFAULT` expression, those expressions must be dropped before the sequence is dropped, and recreated after the sequence is recreated. The `setval()` function can be used to set the value of a sequence to what it was previously.
Reserved Keywords | `ROLE`, `VIRTUAL`, and `WORK` have been added as reserved keywords and are no longer allowed as identifiers.

### Known Limitations

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

### Documentation Updates

Topic | Description
--- | ---
Production Checklist | This topic now provides cloud-specific hardware, security, load balancing, monitoring and alerting, and clock synchronization recommendations as well as expanded cluster topology guidance. Related deployment tutorials have been enhanced with much of this information as well.
Monitoring and Alerting | This new topic explains available tools for monitoring the overall health and performance of a cluster and critical events and metrics to alert on.
Common Errors | This new topic helps you understand and resolve errors you might encounter, including retryable and ambiguous errors for transactions.
SQL Performance | This new topic provides best practices for optimizing SQL performance in CockroachDB.
SQL Standard Comparison | This new topic lists which SQL standard features are supported, partially-supported, and unsupported by CockroachDB.
Selection Queries | This new topic explains the function and syntax of queries and operations involved in reading and processing data in CockroachDB, alongside more detailed information about ordering query results, limiting query results, subqueries, and join expressions.

## v2.0-rc.1

Release Date: April 2, 2018

This is the first release candidate for CockroachDB v2.0. All known bugs have either been fixed or pushed to a future release, with large bugs documented as known limitations.

- Improved the Node Map to provide guidance when an enterprise license or additional configuration is required. #24271
- Bug fixes and stability improvements.

### Admin UI Changes

- Improved the Node Map to provide guidance when an enterprise license or additional configuration is required. #24271
- Added the available storage capacity to the Cluster Overview metrics. #24254

### Bug Fixes

- Fixed a bug in `RESTORE` that could lead to missing rows if the `RESTORE` was interrupted. #24089
- New nodes running CockroachDB v2.0 can now join clusters that contain nodes running v1.1. #24257
- Fixed a crash in `cockroach zone ls` that would happen if a table with a zone config on it had been deleted but not yet garbage collected. (This was broken in v2.0 alphas, not in v1.1.) #24180
- Fixed a bug where zooming on the Node Map could break after zooming out to the maximum extent. #24183
- Fixed a crash while performing rolling restarts. #24260
- Fixed a bug where privileges were sometimes set incorrectly after upgrading from an older release. #24393

### Contributors

This release includes 11 merged PRs by 10 authors. We would like to thank all contributors from the CockroachDB community, with special thanks to first-time contributor Vijay Karthik.

## v2.0-beta.20180326

Release Date: March 26, 2018

### General Changes

- A CockroachDB process now flushes its logs upon receiving `SIGHUP` instead of `SIGUSR1` as it did earlier. This is aimed to simplify the automation of process monitoring, test, and backup tools. #23783
- Information about zone config usage is now included in diagnostic reports. #23750

### Enterprise Edition Changes

- Added the `cloudstorage.timeout` cluster setting for import/export operations. #23776

### SQL Language Changes

- SQL features introduced in CockroachDB v2.0 cannot be used in clusters that are not upgraded fully to v2.0. #24013
- Added an `escape` option to the `encode()` and `decode()` built-in functions. #23781
- Introduced a series of PostgreSQL-compatible, privilege-related built-in functions. #23839
- Added the `pg_language` table to the `pg_catalog` virtual schema. #23839
- Added the `anyarray` type to the `pg_type` virtual schema. #23836
- Retryable errors on schema change operations are now less likely to be returned to clients; more operations are retried internally. #24050

### Command-Line Changes

- Client commands now report a warning if the connection URL is specified by the `--url` as well as some other command-line flag. If you use the `--url` flag, other flags can fill in pieces missing from the URL.
- Added per-node heap profiles to the `debug zip` command output. #23858

### Admin UI Changes

- More debug pages are now locked down by the `server.remote_debugging.mode` cluster setting. #24022
- The Network Diagnostics report no longer crashes when the latencies are very small or on a single node cluster. #23868
- Fixed the flicker in the Node Map as data is being reloaded. #23757
- Fixed the text overflowing past the table cell boundaries on the Jobs page. #23748
- Updated the labels for the Snapshots graph on the Replication dashboard to be more specific. #23742
- Fixed a bug where graphs would not display on clusters with large numbers of nodes. #24045
- Decommissioned nodes no longer appear in the node selection dropdown on the Metrics page. #23800
- Fixed a condition where a persistent trailing dip could appear in graphs for longer time periods. #23874

### Bug Fixes

- Redacted string values in debug API responses. #24070
- Old replicas are now garbage collected in a more timely fashion after a node has been offline for a long time (this bug only exists in recent v2.0 alpha/beta releases, not in v1.1). #24066
- Fixed a bug where some inverted index queries could return incorrect results. #23968
- Fixed the behavior of the `@>` operator with arrays and scalars. #23969
- Inverted indexes can no longer be hinted for inappropriate queries. #23989
- Enforced minimum privileges for the `admin` role. #23935
- A panic is now avoided if the SQL audit log directory does not exist when the node is started. #23928
- Supported Postgres syntax for `USING GIN`. #23910
- Fixed a bug where `INSERT`/`DELETE`/`UPDATE`/`UPSERT` may lose updates if run using `WITH` or the `[ ... ]` syntax. #23895
- Made sure that all built-in functions have a unique Postgres OID for compatibility. #23880
- Fixed an error message generated by the experimental SCRUB feature. #23845
- Fixed a bug where `CREATE VIEW` after `ALTER TABLE ADD COLUMN` would fail to register the dependency on the newly added column. #23845
- Fixed crashes or incorrect results when combining an `OUTER JOIN` with a `VALUES` clause that contains only `NULL` values on a column (or other subqueries which result in a `NULL` column). #23838
- Fixed rare nil pointer exception in rebalance target selection. #23807
- The `cockroach zone set` command will now automatically retry if it encounters an error while setting zone configurations. #23782
- Fixed a bug where closing a connection in the middle of executing a query sometimes crashed the server. #23761
- Fixed a bug where expressions could be mistakenly considered equal, despite their types being different. #23722
- Fixed a bug where the `RANGE COUNT` metric on the Cluster Overview page of the Admin UI could significantly undercount the number of ranges. #23746
- The client URL reported upon `cockroach start` now does not include the option `application_name`. #23894

### Performance Improvements

- Improved cluster performance during overload scenarios. #23884

### Doc Updates

- Added a local cluster tutorial demonstrating JSON Support. #2716
- Added full documentation for the `VALIDATE CONSTRAINT` statement. #2730

### Contributors

This release includes 64 merged PRs by 23 authors. We would like to thank the following contributors from the CockroachDB community, with special thanks to first-time contributors Bob Vawter.

## v2.0-beta.20180319

Release Date: March 19, 2018

In this release, we’ve improved CockroachDB’s ability to run in orchestrated environments and closed several Postgres capability gaps.

- Better `/health` behavior to support orchestrated deployments. #23551

### SQL Language Changes

- `NO CYCLE` and `CACHE 1` are now supported options during sequence creation. #23518
- `ISNULL` and `NOTNULL` are now accepted as alternatives to `IS NULL` and `IS NOT NULL`. #23518

### Command-Line Changes

- Changed the `server.drain_max_wait` cluster setting to `server.shutdown.query_wait` #23629
- The generated HAProxy config generated by `cockroach gen haproxy` has been extended with readiness checks. #23590

### Admin UI Changes

- Implemented a spinner on the Logs page instead of saying "No Data" while loading. #23556
- Now using monospace font and rendering new lines on the Logs page. Also, packed lines together more tightly. #23556
- Moved the Clock Offset graph from the Distributed dashboard to the Runtime dashboard. Now displaying each node's clock offset independently rather than aggregating them together. #23627
- When reporting anonymous usage details, locality tier names are now redacted. #23588
- Clicking on the entire node component is now allowed in the Node Map, not just the visible elements. #23536
- The Node Map now shows how long a node has been dead. #23404
- Correct liveness status text now displays on nodes in the Node Map. #23404

### Bug Fixes

- Fixed a bug in which the usable capacity of nodes was not added up correctly in the Admin UI. #23695
- An `ARRAY` can now be used with the PostgreSQL binary format. #23467
- Fixed a panic when a query would incorrectly attempt to use an aggregation or window function in `ON CONFLICT DO UPDATE`. #23658
- `CREATE TABLE AS` can now be used with scalar subqueries. #23470
- Connection attempts to former members of the cluster and the associated spurious log messages are now prevented. #23605
- Fixed a panic when executing `INSERT INTO ... SELECT` queries where the number of columns targeted for insertion does not match the number of columns returned by the `SELECT`. #23642
- Reduced the risk that a node in the process of crashing could serve inconsistent data. #23616
- Fixed a correctness bug where some `ORDER BY` queries would not return the correct results under concurrent transactional load. #23602
- `RETURNING NOTHING` now properly detects parallel statement execution opportunities against statements that contain data-modifying statements in subqueries. #23524
- The `/health` HTTP endpoint is now accessible before a node has successfully become part of an initialized cluster, meaning that it now accurately reflects the health of the process rather than the ability of the process to serve queries. This has been the intention all along, but it didn't work until the node had joined a cluster or had `cockroach init` run on it. #23551
- Fixed a panic that could occur with certain types of casts. #23535
- Prevented a hang while crashing when `stderr` is blocked. #23484
- Fixed panics related to distributed execution of queries with `REGCLASS` casts. #23482
- Fixed a panic with computed columns. #23435
- Added prevention against potential consistency issues when a node is stopped and restarted in rapid succession. #23339
- Decommissioning a node that has already been terminated now works in all cases. Success previously depended on whether the gateway node "remembered" the absent decommissioned node. #23378

### Build Changes

- Go 1.10 is now the minimum required version necessary to build CockroachDB. #23494

### Doc Updates

- Documented the `SPLIT AT` statement, which forces a key-value layer range split at a specified row in a table or index. #2704
- Various updates to the `IMPORT` documentation. #2676
- Various updates to the `SHOW TRACE` documentation. #2674
- Clarified the upgrade path for rolling upgrades. #2627
- Added more detailed documentation on ordering query results with `ORDER BY`. #2658
- Documented inverted indexes for `JSONB` data. #2608

### Contributors

This release includes 48 merged PRs by 21 authors.

## v2.0-beta.20180312

Release Date: March 12, 2018

In this release, we’ve enhanced our debug pages to support graphing custom metrics, improved handling of large deletes, and fixed several bugs.

- Custom graph debug page #23227
- Improve handling of large deletes #23289

### Build Changes

- Binaries are now built with Go 1.10 by default. #23311

### General Changes

- Logging data is now flushed to files every second to aid troubleshooting and monitoring. Synchronization to disk is performed separately every 30 seconds. #23231
- Disabling diagnostics reporting also disables new version notification checks. #23007
- Removed the `diagnostics.reporting.report_metrics` cluster setting, which is duplicative with the `COCKROACH_SKIP_ENABLING_DIAGNOSTIC_REPORTING` environment variable. #23007
- All internal error messages are now logged when logging is set to a high enough verbosity. #23127

### SQL Language Changes

- Improved handling of large `DELETE` statements. They are now either allowed to complete or exited with an error message indicating that the transaction is too large to complete. #23289
- The `pg_catalog` virtual tables, as well as the special casts `::regproc` and `::regclass`, can now only be queried by clients that set a current database. #23148

### Command-Line Changes

- When a node spends more than 30 seconds waiting for an `init` command or to join a cluster, a help message now gets prints to `stdout`. #23181

### Admin UI Changes

- Added a new debug page that allows users to create a "custom" graph displaying any combination of metrics. #23227
- In the geographical map on the homepage of the Admin UI enterprise version, node components now link to Note Details page. #23283
- Removed the Keys Written per Second per Store graph. #23303
- Added the Lead Transferee field to the Range Debug page. #23241

### Bug Fixes

- Fixed a correctness bug where some `ORDER BY` queries would not return the correct results. #23541
- The Admin UI no longer hangs after a node's network configuration has changed. #23348
- The binary format for `JSONB` values is now supported. #23215
- A node now waits in an unready state for the length of time specified by the `server.shutdown.drain_wait` cluster setting before draining. This helps ensure that load balancers will not send client traffic to a node about to be drained. #23319
- Fixed a panic when using `UPSERT ... RETURNING` with `UNION`. #23317
- Prevented disruptions in performance when gracefully shutting down a node. #23300
- Hardened the cluster version upgrade mechanism. Rapid upgrades through more than two versions could sometimes fail recoverably. #23287
- Fixed a deadlock when tables are rapidly created or dropped. #23288
- Fixed a small memory leak in `IMPORT` CSV. #23259
- Prevented a panic in DistSQL under certain error conditions. #23201
- Added a readiness endpoint (`/health?ready=1`) for better integration with load balancers. #23247
- Fixed a zero QPS scenario when gracefully shutting down a node. #23246
- Secondary log files (e.g., the SQL execution log) are now periodically flushed to disk, in addition to the flush that occurs naturally when single log files are full (`--log-file-max-size`) and when the process terminates gracefully. Log file rotation is also now properly active for these files. #23231
- Previously, the `ranges` column in the `node status` command output only included ranges whose raft leader was on the node in question. It now includes the count of all ranges on the node, regardless of where the raft leader is. #23180
- Fixed a panic caused by empty `COCKROACH_UPDATE_CHECK_URL` or `COCKROACH_USAGE_REPORT_URL` environment variables. [#23008][#23008]
- Prevented stale reads caused by the system clock moving backwards while the `cockroach` process is not running. #23122
- Corrected the handling of cases where a replica fails to retrieve the last processed timestamp of a queue. #23127
- Fixed a bug where the liveness status would not always display correctly on the single-node page in the Admin UI. #23193
- Fixed a bug that showed incorrect descriptions on the Jobs page in the Admin UI. #23256

### Doc Updates

- Updated the GCE deployment tutorial with guidance on increasing the backend timeout setting for TCP Proxy load balancers. #2687
- Documented read refreshing in the CockroachDB architecture documentation. #2684
- Updated the explanation of automatic retries. #2680
- Documented changes to the built-in replication zone. #2677
- Updated the `information_schema` documentation to cover new views. #2675 #2673 #2672 #2668 #2662 #2654 #2637
- Clarified the target of the `cockroach init` command. #2670
- Added details about how to monitor clock offsets. #2663
- Documented how to perform a rolling upgrade on a Kubernetes-orchestrated cluster. #2661
- Updated the Azure deployment tutorial with correct network security rule guidance. #2653
- Improved the documentation of the `cockroach node status` command. #2639
- Clarified that the `DROP COLUMN` statement now drops `CHECK` constraints. #2638
- Added details about disk space usage after deletes and select performance on deleted rows. #2635
- Clarified that `DROP INDEX .. CASCADE` is required to drop a `UNIQUE` index. #2633
- Updated the `EXPLAIN` documentation to identify all explainable statements, cover the new output structure, and better explain the contents of the `Ordering` column. #2632 #2682
- Defined "range lease" in the CockroachDB architecture overview. #2625
- Added an FAQ on preparing for planned node maintenance. #2600

### Contributors

This release includes 44 merged PRs by 21 authors.

## v2.0-beta.20180305

Release Date: March 5, 2018

This week's release includes:

- Improved support for large delete statements.
- Reduced disruption during upgrades and restarts.
- Reduced occurrence of serializable transaction restarts.

Warning:
This release has a bug that may result in incorrect results for certain queries using `JOIN` and `ORDER BY`. This bug will be fixed in next week's beta.

### Backwards-Incompatible Changes

- Sequences are now supported in enterprise `BACKUP`/`RESTORE` jobs.

  This changes how sequences are stored in the key-value storage layer, so existing sequences must be dropped and recreated. Since a sequence cannot be dropped while it is being used in a column's `DEFAULT` expression, those expressions must be dropped before the sequence is dropped, and recreated after the sequence is recreated. The `setval()` function can be used to set the value of a sequence to what it was previously. #21684

- Positive constraints in replication zone configs no longer work. Any existing positive constraints will be ignored. This change should not impact existing deployments since positive constraints have not been documented or supported for some time. #22906

### Build Changes

- CockroachDB now builds with go 1.9.4 and higher. #22608

### General Changes

- Diagnostics reports now include information about changed settings and statistics on types of errors encountered during SQL execution. #22705, #22693, #22948

### Enterprise Edition Changes

- Revision history `BACKUP`/`RESTORE` is no longer considered experimental. #22679
- Revision history `BACKUP`/`RESTORE` now handles schema changes. #21717
- CockroachDB now checks that a backup actually contains the requested restore time. #22659
- Improved `BACKUP`'s handling of tables after `TRUNCATE`. #21895
- Ensured that only the backups created by the same cluster can be used in incremental backups. #22474
- Avoided extra internal copying of files during `RESTORE`. #22281
- Added a geographical map to the homepage of the Admin UI enterprise version, showing the location of nodes and localities in the cluster. The map is annotated with several top-level metrics: storage capacity used, queries per second, and current CPU usage, as well as the liveness status of nodes in the cluster. [#22763][#22763]

### SQL Language Changes

- The type determined for constant `NULL` expressions is renamed to `unknown` for better compatibility with PostgreSQL. #23150
- Deleting multiple rows at once now consumes less memory. #23013
- Attempts to modify virtual schemas with DDL statements now fail with a clearer error message. #23041
- The new `SHOW SCHEMAS` statement reveals which are the valid virtual schemas next to the physical schema `public`. #23041
- CockroachDB now recognizes the special syntax `SET SCHEMA <name>` as an alias for `SET search_path = <name>` for better compatibility with PostgreSQL. #23041
- `current_role()` and `current_catalog()` are supported as aliases for the `current_user()` and `current_database()` built-in functions for better compatibility with PostgreSQL. #23041
- CockroachDB now returns the correct error code for division by zero. #22948
- The GC of table data after a `DROP TABLE` statement now respects changes to the GC TTL interval specified in the zone config #22903
- The full names of tables/view/sequences are now properly logged in the system event log. #22848
- CockroachDB now recognizes the syntax `db.public.tbl` in addition to `db.tbl` for better compatibility with PostgreSQL. The handling of the session variable `search_path`, as well as that of the built-in functions `current_schemas()` and `current_schema()`, is now closer to that of PostgreSQL. Thus `SHOW TABLES FROM` can now inspect the tables of a specific schema (for example, `SHOW TABLES FROM db.public` or `SHOW TABLES FROM db.pg_catalog`). `SHOW GRANTS` also shows the schema of the databases and tables. #22753
- Users can now configure auditing per table and per access mode with `ALTER TABLE`. #22534
- SQL execution logs enabled by the cluster setting `sql.trace.log_statement_execute` now go to a separate log file. This is an experimental feature meant to aid troubleshooting CockroachDB. #22534
- Added the `string_to_array()` built-in function. #22391
- Added the `constraint_column_usage` table and roles-related tables to the `information_schema` database. #22323 #22242
- `IMPORT` no longer requires the experimental setting. #22531
- Computed columns and `CHECK` constraints now correctly report column names in the case of a type error. #22500
- The output of `JSON` data now matches that of PostgreSQL. #22393
- Allowed `IMPORT` jobs to be paused. `IMPORT` jobs now correctly resume instead of being abandoned if the coordinator goes down. #22291
- Removed the `into_db` option in `IMPORT`. The database is now specified as part of the table name. #21813
- Changed computed column syntax and improved related error messages. #22429
- Implemented additional `INET` column type operators such as `contains` and `contained by`, binary operations, and addition/subtraction.
- Implemented the following operators for `INET` column types: `<<`, `<<=`, `>>`, `>>=`, `&&`, `+`, `-`, `^`, `|`, `&`. These operators are compatible with PostgreSQL 10 and are described in Table: 9.36 of the PostgreSQL documentation. #21437
- CockroachDB now properly rejects incorrectly-cased SQL function names with an error. #22365
- Allowed `DEFAULT` expressions in the `CREATE TABLE` of an `IMPORT` CSV. The expressions are not evaluated (data in the CSV is still required to be present). This change only allows them to be part of the table definition. #22307
- Added the `#-` operator for `JSON`. #22375
- The `SET transaction_isolation` statement is now supported for better PostgreSQL compatibility. #22389
- Allowed creation of computed columns. #21823
- Avoided extra internal copying of files during `IMPORT`. #22281
- Casts between array types are now allowed when a cast between the parameter types is allowed. #22338
- Scalar functions can now be used in `FROM` clauses. #22314
- Added privilege checks on sequences. #22284
- The `ON DELETE SET DEFAULT`, `ON UPDATE SET DEFAULT`, `ON DELETE SET NULL`, and `ON UPDATE SET NULL` foreign key constraint actions are now fully supported. #22220 #21767 #21716
- The `ON DELETE CASCADE` and `ON UPDATE CASCADE` foreign key constraint actions can now also contain `CHECK` constraints. #22535
- JSON inverted indexes can now be specified in a `CREATE TABLE` statement. #22217
- When a node is gracefully shut down, planning queries are avoided and distributed queries are allowed the amount of time specified by the new `server.drain_max_wait` cluster setting before the node is drained and stopped. #20450
- Collated string are now supported in IMPORT jobs. #21859
- The new `SHOW GRANTS ON ROLE` statement and `pg_catalog.pg_auth_members` table lists role memberships. #22205 #21780
- Role memberships are now considered in permission checks. #21820

### Command-Line Changes

- Replication zone constraints can now be specified on a per-replica basis, meaning you can configure some replicas in a zone's ranges to follow one set of constraints and other replicas to follow other constraints. #22906
- Per-replica constraints no longer have to add up to the total number of replicas in a range. If you do not specify all the replicas, then the remaining replicas will be allowed on any store. #23081
- `cockroach sql` now reminds the user about `SET database = ...` and `CREATE DATABASE` if started with no current database set. #23089
- Error messages displayed while connecting to a server with an incompatible version have been improved. #22709
- The `--cache` and `--max-sql-memory` flags of `cockroach start` now also support decimal notation to support a fraction of total available RAM size, e.g., `--cache=.25` is equivalent to `--cache=25%`. This simplifies integration with system management tools. #22460
- When printing tabular results as CSV or TSV, no final row count is emitted. This is intended to increase interoperability with external tools. #20835
- The `pretty` formatter does not introduce special unicode characters in multi-line table cells, for better compatibility with certain clients. To disambiguate multi-line cells from multiple single-line cells, a user can use `WITH ORDINALITY` to add a row numbering column. #22324
- Allowed specification of arbitrary RocksDB options. #22401
- Debug commands now open RocksDB in read-only mode. This makes them faster and able to run in parallel. #21778
- The `cockroach dump` command now outputs `CREATE SEQUENCE` statements before the `CREATE TABLE` statements that use them. #21774
- For better compatibility with `psql`'s extended format, the table formatter `records` now properly indicates line continuations in multi-line rows. #22325
- The `cockroach sql` client-side option `show_times` is now always enabled when output goes to a terminal, not just when `display_format` is set to `pretty`. #22326
- When formatting `cockroach sql` results with `--format=sql`, the row count is now printed in a SQL comment at the end. #22327
- When formatting `cockroach sql` results with `--format=csv` or `--format=tsv`, result rows that contain special characters are now quoted properly. #19306

### Admin UI Changes

- Decommissioned nodes are no longer included in cluster stats aggregates. #22711
- Time series metrics dashboards now show their own title rather than the generic "Cluster Overview". #22746
- The URLs for Admin UI pages have been reorganized to provide more consistent structure to the site. Old links will redirect to the new location of the page. #22746
- Nodes being decommissioned are now included in the total nodes count until they are completely decommissioned. #22690
- Added new graphs for monitoring activity of the time series system. #22672
- Disk usage for time series data is now visible on the Databases page. #22398
- Added a ui-clean task. #22552
- Added an icon to indicate when descriptions in the Jobs table are shortened and expandable. #22221
- Added "compaction queue" graphs to the Queues dashboard. #22218
- Added Raft snapshot queue metrics to the Queue dashboard. #22210
- Dead nodes are now displayed before live nodes on the Nodes List page. #22222
- Links to documentation in the Admin UI now point to the docs for v2.0. #21894

### Bug Fixes

- Fixed an issue where Admin UI graph tooltips would continue to display zero values for nodes which had long been decommissioned. #22626
- Fixed an issue where Admin UI graphs would occasionally have a persistent "dip" at the leading edge of data. #22570
- Fixed an issue where viewing Admin UI graphs for very long time spans (e.g., 1 month) could cause excessive memory usage. #22392
- Fixed padding on the Node Diagnostics page of the Admin UI. #23019
- Corrected the title of the decommissioned node list, which was mistakenly updated to say "Decommissioning". #22703
- Fixed a bug in `cockroach dump` output with `SEQUENCES`. #22619
- Fixed a bug that created uneven distribution of data (or failures in some cases) during `IMPORT` of tables without an explicit primary key. #22542
- Fixed a bug that could prevent disk space from being reclaimed. #23153
- Replication zone configs no longer accept negative numbers as input. #23081
- Fixed the occasional selection of sub-optimal rebalance targets. #23081
- `cockroach dump` is now able to dump sequences with non-default parameters. #23062
- Arrays now support the `IS [NOT] DISTINCT FROM` operators. #23090
- `SHOW TABLES` is now again able to inspect virtual schemas. #23041
- The special form of `CREATE TABLE .. AS` now properly supports placeholders in the subquery. #23046
- Fixed a bug where ranges could get stuck in an infinite "removal pending" state and would refuse to accept new writes. #23024
- Fixed incorrect index constraints on primary key columns on unique indexes. #23003
- Fixed a panic when upgrading quickly from v1.0.x to v2.0.x #22971
- Fixed a bug that prevented joins on interleaved tables with certain layouts from working. #22935
- The service latency tracked for SQL statement now includes the wait time of the execute message in the input queue. #22881
- The conversion from `INTERVAL` to `FLOAT` now properly returns the number of seconds in the interval. #22894
- Fixed incorrect query results when the `WHERE` condition contains `IN` expressions where the right-hand side tuple contains `NULL`s. #22735
- Fixed incorrect handling for `IS (NOT) DISTINCT FROM` when either side is a tuple that contains `NULL`. #22718
- Fixed incorrect evaluation of `IN` expressions where the left-hand side is a tuple, and some of the tuples on either side contain `NULL`. #22718
- Expressions stored in check constraints and computed columns are now stored de-qualified so that they no longer refer to a specific database or table. #22667
- Fixed a bug where reusing addresses of decommissioned nodes could cause issues with Admin UI graphs. #22614
- `IMPORT` jobs can no longer be started if the target table already exists. #22627
- Computed columns can no longer be added to a table after table creation. #22653
- Allowed `UPSERT`ing into a table with computed columns. #22517
- Computed columns are now correctly disallowed from being foreign key references. #22511
- Various primitives that expect table names as argument now properly reject invalid table names. #22577
- `AddSSTable` no longer accidentally destroys files in the log on success. #22551
- `IsDistinctFrom` with `NULL` placeholder no longer returns incorrect results. #22433
- Fixed a bug that caused incorrect results for joins where columns that are constrained to be equal have different types. #22549
- Implemented additional safeguards against RPC connections between nodes that belong to different clusters. #22518
- The `/health` endpoint now returns a node as unhealthy when draining or decommissioning. #22502
- Aggregates that take null arguments no return the correct results. #22507
- Fixed empty plan columns of `sequenceSelectNode`. #22495
- Disallowed any inserts into computed columns. #22470
- Tables with computed columns will produce a meaningful dump. #22402
- `cockroach sql` no longer produces an error anymore when an empty statement is entered at the interactive prompt. #22449
- The `pg_typeof()` function now returns the correct type for the output of `UNION ALL` even when the left sub-select has a `NULL` column. #22438
- `<TYPE> <value>` literal casts now work correctly for all fixed-length types. #22397
- Errors from DDL statements sent by a client as part of a transaction, but in a different query string than the final commit, are no longer silently swallowed. #21829
- Fixed a bug in cascading foreign key actions. #21799
- Tabular results where the column labels contain newline characters are now rendered properly. #19306
- Fixed a bug that prevented long descriptions in the Admin UI Jobs table from being collapsed after being expanding. #22221
- Fixed a bug that prevented using `SHOW GRANTS` with a grantee but no targets. #21864
- Fixed a panic with certain queries involving the `REGCLASS` type. #22310
- Fixed the behavior and types of the `encode()` and `decode()` functions. #22230
- Fixed a bug that prevented passing the same tuple for `FROM` and `TO` in `ALTER TABLE ... SCATTER`. #21830
- Fixed a regression that caused certain queries using `LIKE` or `SIMILAR TO` with an indexed column to be slow. #21842
- Fixed a stack overflow in the code for shutting down a server when out of disk space #21768
- Fixed Windows release builds. #21793
- Fixed an issue with the wire-formatting of `BYTES` arrays. #21712
- Fixed a bug that could lead to a node crashing and needing to be reinitialized. #21771
- When a database is created, dropped, or renamed, the SQL session is blocked until the effects of the operation are visible to future queries in that session. #21900
- Fixed a bug where healthy nodes could appear as "Suspect" in the Admin UI if the web browser's local clock was skewed. #22237
- Fixed bugs when running DistSQL queries across mixed-version (1.1.x and 2.0-alpha) clusters. #22897

### Performance Improvements

- Improved a cluster's ability to continue operating when nearly out of disk space on most nodes. #21866
- Disk space is more aggressively freed up when the disk is almost full. #22235
- Experimentally enabled some joins to perform a lookup join and increase join speed for cases where the right side of the join is much larger than the left. #22674
- Supported distributed execution of `INTERSECT` and `EXCEPT` queries. #22442
- Reduced cancellation time of DistSQL aggregation queries. #22684
- Unnecessary value checksums are no longer computed, speeding up database writes. #22487
- Reduced unnecessary logging in the storage layer. #22516
- Improved the performance of distributed sql queries. #22471
- Distributed execution of `INTERSECT ALL` and `EXCEPT ALL` queries is now supported. #21896
- Allowed `-` in usernames, but not as the first character. #22728
- A `COMMIT` reporting an error generated by a previous parallel statement (i.e., `RETURNING NOTHING`) no longer leaves the connection in an aborted transaction state. Instead, the transaction is considered completed and a `ROLLBACK` is not necessary. #22683
- Significantly reduced the likelihood of serializable restarts seen by clients due to concurrent workloads. #21140
- Reduced disruption from nodes recovering from network partitions. #22316
- Improved the performance of scans by copying less data in memory. #22309
- Slightly improved the performance of low-level scan operations. #22244
- When a range grows too large, writes are now be backpressured until the range is successfully able to split. This prevents unbounded range growth and improves a clusters ability to stay healthy under hotspot workloads. #21777
- The `information_schema` and `pg_catalog` databases are now faster to query. #21609
- Reduced the write amplification of Raft replication. #20647

### Doc Updates

- Added cloud-specific hardware recommendations. #2312
- Added a detailed listing of SQL standard features with CockroachDB's level of support. #2442
- Added docs on the `INET` data type. #2439
- Added docs on the `SHOW CREATE SEQUENCE` statement. #2406
- Clarified that password creation is only supported in secure clusters. #2567
- Added docs on production monitoring tools and the critical events and metrics to alert on. #2564
- Added docs on the `JSONB` data type. #2561
- Added docs on the `BETWEEN SYMMETRIC` operator. #2551
- Updated docs on supporting castings for `ARRAY` values. #2549
- Various improvements to docs on the built-in SQL client. #2544

### Contributors

This release includes 430 merged PRs by 37 authors. We would like to thank all contributors from the CockroachDB community, with special thanks to first-time contributors noonan, Mark Wistrom, pocockn, and 何羿宏.

## v2.0-alpha.20180129

Release Date: January 29, 2018

### General Changes

- CockroachDB now uses gRPC version 1.9.2 #21600

### Enterprise Changes

- Failed `RESTORE` cleanup no longer causes the `RESTORE` job to perpetually loop if external storage fails or is removed. #21559
- Non-transactional `BACKUP` and `RESTORE` statements are now disallowed inside transactions. #21488

### SQL Language Changes

- Reduced the size of `system.rangelog` entries to save disk space. #21410
- Prevented adding both a cascading referential constraint action and a check constraint to a column. #21690
- Added `json_array_length` function that returns the number of elements in the outermost `JSON` or `JSONB` array. #21611
- Added `referential_constraints` table to the `information_schema`. The `referential_constraints` table contains all foreign key constraints in the current database. #21615
- Replaced `BOOL` columns in the `information_schema` with `STRING` columns to conform to the SQL specification. #21612
- Added support for inverted indexes for `JSON`. #20941
- `DROP SEQUENCE` cannot drop a `SEQUENCE` that is currently in use. #21364
- The `IMPORT` function now does not require the `temp` directory and no longer creates a `RESTORE` job. Additionally, the `TRANSFORM_ONLY` option for `IMPORT` has been renamed to `TRANSFORM` and now takes an argument specifying the target directory. #21490

### Command-Line Changes

- `cockroach start --background` now returns earlier for nodes awaiting the `cockroach init` command, facilitating use of automated scripts. #21682
- Command-line utilities that print results with the `pretty` format now use consistent horizontal alignment for every row of the result. #18491

### Admin UI Changes

- The Command Queue debug page now displays errors correctly. #21529
- The Problem Ranges debug page now displays all problem ranges for the cluster. #21522

### Bug Fixes

- Fixed a crash caused by `NULL` placeholder in comparison expressions. #21705
- The `EXPLAIN (VERBOSE)` output now correctly shows the columns and properties of each query node (instead of incorrectly showing the columns and properties of the `root`). #21527
- Added a mechanism to recompute range stats automatically over time to reflect changes in the underlying logic. #21345

### Performance Improvements

- Multiple ranges can now split at the same time, improving our ability to handle hotspot workloads. #21673
- Improved performance for queries that do not read any columns from the key component of the row. #21571
- Improved performance of scans by reducing efforts for non-required columns. #21572
- Improved efficiency of the key decoding operation. #21498
- Sped up the performance of low-level delete operations. #21507
- Prevented the jobs table from growing excessively large during jobs table updates. #21575

### Contributors

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

- Constantine Peresypkin
- 何羿宏

Special thanks to first-time contributors Andrew Kimball, Nathaniel Stewart, Constantine Peresypkin and Paul Bardea.

## v2.0-alpha.20171218

Release Date: December 18, 2017

### SQL Language Changes

- Added support for read-only transactions via PostgreSQL-compatible syntax. #20547
  - `SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY/READ WRITE`
  - `SET TRANSACTION READ ONLY/READ WRITE`
  - `SET default_transaction_read_only`
  - `SET transaction_read_only`
- For compatibility with PostgreSQL, the return type of the `date_trunc(STRING,TIME)` function was changed from `TIME` to `INTERVAL`, and the return type of the `date_trunc(STRING,DATE)` function was changed from `DATE` to `TIMESTAMPTZ`. #20467

### Bug Fixes

- Fixed a bug preventing CockroachDB from starting when the filesystem generates a `lost+found` directory in the Cockroach data directory. #20565
- Fixed the over-counting of memory usage by aggregations. #20585
- Fix a panic when using the `date_trunc(STRING,TIMESTAMP)` or `date_trunc(STRING,DATE)` function during queries that run with the distributed execution engine. #20467
- Fixed a bug where the `date_trunc(STRING,TIMESTAMP)` function would return a `TIMESTAMPTZ` value. #20467
- Fixed a race condition that would result in some queries hanging after cancellation. #20088
- Fixed a bug allowing privileges to be granted to non-existent users. #20438

### Performance Improvements

- Queries that use inequalities using tuples (e.g., `(a,b,c) < (x,y,z)`) are now slightly better optimized. #20484
- `IS DISTINCT FROM` and `IS NOT DISTINCT FROM` clauses are now smarter about using available indexes. #20346

## v1.2-alpha.20171211

Release Date: December 11, 2017

### General Changes

- Alpha and beta releases are now published as Docker images under the name cockroachdb/cockroach-unstable. #20331

### SQL Language Changes

- The protocol statement tag for `CREATE TABLE ... AS ...` is now `SELECT`, like in PostgreSQL. #20268
- OIDs can now be compared with inequality operators. #20367
- The `CANCEL JOB` statement now supports canceling `IMPORT` jobs. #20343
- `PAUSE JOB`/`RESUME JOB`/`CANCEL JOB` statements can now be used within SQL transactions. #20185
- Added a cache for the internal `system.table_statistics` table. #20212
- The `intervalstyle` session variable is now supported for PostgreSQL compatibility. #20274
- The `SHOW [KV] TRACE` statement now properly extracts file/line number information when analyzing traces produced in debug mode. Also, the new `SHOW COMPACT [KV] TRACE` statement provides a more compact view on the same data. #20093
- Some queries using `IS NOT NULL` conditions are now better optimized. #20436
- Views now support `LIMIT` and `ORDER BY`. #20246

### Command-Line Interface Changes

- Reduced temporary disk space usage for the `cockroach debug compact` command. #20460
- The `cockroach node status` and `cockroach node ls` commands now support a timeout. #20308

### Admin UI Changes

- The Admin UI now sets the `Last-Modified` header when serving assets to permit browser caching. This improves page load times, especially on slow connections #20429.

### Bug Fixes

- Removed the possibility for OOM errors during distributed `IMPORT` from csv. #20506
- Fixed a crash triggered by some corner-case queries containing `ORDER BY`. #20489
- Added missing Distributed SQL flows to the exported `sql.distsql.flows.active` and `sql.distsql.flows.total` metrics and the "Active Flows for Distributed SQL Queries" admin UI graph. #20503
- Fixed an issue with stale buffer data when using the binary format for `ARRAY` values. #20461
- The `cockroach sql` shell now better reports the number of rows inserted by a `CREATE TABLE ... AS ...` statement. Note, however, that the result are still formatted incorrectly if the `CREATE TABLE ... AS ...` statement creates zero rows in the new table. #20268
- Self-referencing tables can now reference a non-primary index without manually adding an index on the referencing column. #20325
- Fixed an issue where spans for descending indexes were displaying incorrectly and updated `NOT NULL` tokens from `#` to `!NULL`. #20318
- Fixed `BACKUP` jobs to correctly resume in all conditions. #20185
- Fix various race conditions with jobs. #20185
- It is no longer possible to use conflicting `AS OF SYSTEM TIME` clauses in different parts of a query. #20267
- Fixed a panic caused by dependency cycles with `cockroach dump`. #20255
- Prevented context cancellation during lease acquisition from leaking to coalesced requests. #20424

### Performance Improvements

- Improved handling of `IS NULL` conditions. #20366
- Improved p99 latencies for garbage collection of previous versions of a key, when there are many versions. #20373
- Smoothed out disk usage under very write heavy workloads by syncing to disk more frequently. #20352
- Improved garbage collection of very large transactions and large volumes of abandoned write intents. #20396
- Improved table scans and seeks on interleaved parent tables by skipping interleaved children rows at the end of a scan. #20235
- Replaced the interval tree structure in `TimestampCache` with arena-backed concurrent skiplist. This reduces global locking and garbage collection pressure, improving average and tail latencies. #20300

### Doc Updates

- Added an introduction to CockroachDB video. #2234
- Clarified that we have tested the PostgreSQL-compatible drivers and ORMs featured in our documentation enough to claim beta-level support. This means that applications using advanced or obscure features of a driver or ORM may encounter incompatibilities. If you encounter problems, please open an issue with details to help us make progress toward full support. #2235

## v1.2-alpha.20171204

Release Date: December 4, 2017

### General Changes

- CockroachDB now uses RocksDB version 5.9.0. #20070

### Build Changes

- Restored compatibility with older x86 CPUs that do not support SSE4.2 extensions. #19909

### SQL Language Changes

- The `TIME` data type is now supported. #19923
- The `IMPORT` command now tolerates empty CSV files and supports `201` and `204` return codes from HTTP storage. #19861 #20027
- `nodelocal://` paths in `IMPORT` now default to relative within the "extern" subdirectory of the first store directory, configurable via the new `--external-io-dir` flag. #19865
- Added `AWS_ENDPOINT` and `AWS_REGION` parameters in S3 URIs to specify the AWS endpoint or region for `IMPORT`. The endpoint can be any S3-compatible service. #19860
- For compatibility with PostgreSQL:
  - The `time zone` session variable (with a space) has been renamed `timezone` (without a space), and `SET TIMEZONE` and `SHOW TIMEZONE` are now supported alongside the existing `SET TIME ZONE` and `SHOW TIME ZONE` syntax. Also, `SET TIMEZONE =` can now be used as an alternative to `SET TIMEZONE TO`. #19931
  - The `transaction_read_only` session variable is now supported. It is always set to `off`. #19971
  - The `transaction isolation level`, `transaction priority`, and `transaction status` session variables have been renamed `transaction_isolation`, `transaction_priority`, and `transaction_status`. #20264
- `SHOW TRACE FOR SELECT` now supports `AS OF SYSTEM TIME`. #20162
- Added the `system.table_statistics` table for maintaining statistics about columns or groups of columns. These statistics will eventually be used by the query optimizer. #20072
- The `UPDATE` and `DELETE` statements now support `ORDER BY` and `LIMIT` clauses. #20069
  - For `UPDATE`, this is a MySQL extension that can help with updating the primary key of a table (`ORDER BY`) and control the maximum size of write transactions (`LIMIT`).
  - For `DELETE`, the `ORDER BY` clause constrains the deletion order, the output of its `LIMIT` clause (if any), and the result order of its `RETURNING` clause (if any).
- On table creation, `DEFAULT` expressions no longer get evaluated. #20031

### Command-Line Interface Changes

- The `cockroach node status` command now indicates if a node is dead. #20192
- The new `--external-io-dir` flag in `cockroach start` can be used to configure the location of `nodelocal://` paths in `BACKUP`, `RESTORE`, and `IMPORT`. #19725

### Admin UI Changes

- Updated time series axis labels to show the correct byte units. #19870
- Added a cluster overview page showing current capacity usage, node liveness, and replication status. #19657

### Bug Fixes

- Fixed how column modifiers interact with `ARRAY` values. #19499
- Enabled an RPC-saving optimization when the `--advertise-host` is used. #20006
- It is now possible to drop a column that is referenced as a foreign key when it is the only column in that reference. #19772
- Fixed a panic involving the use of the `IN` operator and improperly typed subqueries. #19858
- Fixed a spurious panic about divergence of on-disk and in-memory state. #19867
- Fixed a bug allowing duplicate columns in primary indexes. #20238
- Fixed a bug with `NaN`s and `Infinity`s in `EXPLAIN` outputs. #20233
- Fixed a possible crash due to statements finishing execution after the client connection has been closed. #20175
- Fixed a correctness bug when using distributed SQL engine sorted merge joins. #20090
- Fixed a bug excluding some trace data from `SHOW TRACE FOR <statement>`. #20081
- Fixed a case in which ambiguous errors were treated as unambiguous and led to inappropriate retries. #20073
- Fixed a bug leading to incorrect results for some queries with `IN` constraints. #20036
- Fixed the encoding of indexes that use `STORING` columns. #20001
- `IMPORT` checkpoints are now correctly cleaned up. #20211
- Fixed a bug that could cause system overload during cleanup of large transactions. #19538
- On macOS, the built-in SQL shell (`cockroach sql`) once again properly supports window resizing. #20148, #20153
- `PARTITION BY` multiple columns with window functions now works properly. #20151
- Fixed a bug so deleting chains of 2 or more foreign key references is now possible. #20050
- Prometheus vars are now written outside the metrics lock. #20194

### Enterprise Edition Changes

- Enterprise `BACKUP`s no longer automatically include the `system.users` and `system.descriptor` tables. #19975
- Added `AWS_ENDPOINT` and `AWS_REGION` parameters in S3 URIs to specify the AWS endpoint or region for `BACKUP`/`RESTORE`. The endpoint can be any S3-compatible service. #19860
- `RESTORE DATABASE` is now allowed only when the backup contains a whole database. #20023
- Fixed `RESTORE` being resumed with `skip_missing_foreign_keys` specified. #20092
- `BACKUP`/`RESTORE` jobs now support `201` and `204` return codes from HTTP storage. #20027
- `BACKUP` now checks that all interleaved tables are included (as required by `RESTORE`). #20206
- Marked `revision_history` `BACKUP`/`RESTORE` as experimental. #20164
- `nodelocal://` paths in `BACKUP`/`RESTORE` now default to relative within the "extern" subdirectory of the first store directory, configurable via the new `--external-io-dir` flag. #19865

### Doc Updates

- In conjunction with beta-level support for the C# (.NET) Npgsql driver, added a tutorial on building a C# app with CockroachDB. #2236
- Improved Kubernetes guidance:
  - Added a tutorial on orchestrating a secure CockroachDB cluster with Kubernetes, improved the tutorial for insecure orchestrations, and added a local cluster tutorial using `minikube`. #2147
  - Updated the StatefulSet configurations to support rolling upgrades, and added initial documentation. #19995
- Added performance best practices for `INSERT` and `UPSERT` statements. #2199
- Documented how to use the `timeseries.resolution_10s.storage_duration` cluster setting to truncate timeseries data sooner than the default 30 days. #2210
- Clarified the treatment of `NULL` values in `SELECT` statements with an `ORDER BY` clause. #2237

### New RFCs

- `SELECT FOR UPDATE` #19577
- SQL Optimizer Statistics #18399
- SCRUB Index and Physical Check Implementation #19327

## v1.2-alpha.20171113

Release Date: November 13, 2017

### Backwards-Incompatible Changes

- Redefined `NaN` comparisons to be compatible with PostgreSQL. `NaN` is now equal to itself and sorts before all other non-NULL values. #19144

- It is no longer possible to drop a user with grants; the user's grants must first be revoked. #19095

### Build Changes

- Fixed compilation on the 64-bit ARM architecture. #19795

- NodeJS 6+ and Yarn 1.0+ are now required to build CockroachDB. #18349

### SQL Language Changes

- `SHOW GRANTS` (no user specified) and `SHOW GRANTS FOR <user>` are now supported. The former lists all grants for all users on all databases and tables; the latter does so for a specified user. #19095

- `SHOW GRANTS` statements now report the database name for tables. #19095

- `CREATE USER` statements are no longer included in the results of `SHOW QUERIES` statements. #19095

- The new `ALTER USER ... WITH PASSWORD ...` statement can be used to change a user's password. #19095

- `CREATE USER IF NOT EXISTS` is now supported. #19095

- New foreign key constraints without an action specified for `ON DELETE` or `ON UPDATE` now default to `NO ACTION`, and existing foreign key constraints are now considered to have both `ON UPDATE` and `ON DELETE` actions set to `NO ACTION` even if `RESTRICT` was specified at the time of creation. To set an existing foreign key constraint's action to `RESTRICT`, the constraint must be dropped and recreated.

  Note that `NO ACTION` and `RESTRICT` are currently equivalent and will remain so until options for deferring constraint checking are added. #19416

- Added more columns to `information_schema.table_constraints`. #19466

### Command-Line Interface Changes

- On node startup, the location for temporary files, as defined by the `--temp-dir` flag, is printed to the standard output. #19272

### Admin UI Changes

- Decommissioned nodes no longer cause warnings about staggered versions. #19547

### Bug Fixes

- Fixed a bug causing redundant log messages when running `SHOW TRACE FOR`. #19468

- `DROP INDEX IF EXISTS` now behaves properly when not using `table@idx` syntax. #19390

- Fixed a double close of the merge joiner output. #19794

- Fixed a panic caused by placeholders in `PREPARE` statements. #19636

- Improved error messages about Raft progress in the replicate queue. #19593

- The `cockroach dump` command now properly supports `ARRAY` values. #19498

- Fixed range splitting to work when the first row of a range is larger than half the configured range size. #19339

- Reduced unnecessary log messages when a cluster becomes temporarily unbalanced, for example, when a new node joins. #19494

- Using `DELETE` without `WHERE` and `RETURNING` inside `[...]` no longer causes a panic. #19822

- SQL comparisons using the `ANY`, `SOME`, or `ALL` operators with sub-queries and cast expressions work properly again. #19801

- On macOS, the built-in SQL shell (`cockroach sql`) once again properly supports window resizing and suspend-to-background. #19429

- Silenced an overly verbose log message. #19504

- Fixed a bug preventing large, distributed queries that overflow onto disk from completing. #19689

- It is not possible to `EXECUTE` inside of `PREPARE` statements or alongside other `EXECUTE` statements; attempting to do so no longer causes a panic. #19809 #19720

- The admin UI now works when a different `--advertise-host` is used. #19426

- An improperly typed subquery used with `IN` no longer panics. #19858

- It is now possible to `RESTORE` using an incremental `BACKUP` taken after a table was dropped. #19601

- Fixed an always-disabled crash reporting setting. #19554

- Prevented occasional crashes when the server is shut down during startup. #19591

- Prevented a potential Gossip deadlock on cluster startup. #19493

- Improved error handling during splits. #19448

- Some I/O errors now cause the server to shut down. #19447

- Improved resiliency to S3 quota limits by retrying some operations during `BACKUP`/`RESTORE`/`IMPORT`

- Executing `TRUNCATE` on a table with self-referential foreign key constraints no longer creates broken foreign key backward references. #19322

### Performance Improvements

- Improved memory usage for certain queries that use limits at multiple levels. #19682

- Eliminated some redundant Raft messages, improving write performance for some workloads by up to 30%. #19540

- Trimmed the wire size of various RPCs. #18930

- Table leases are now acquired in the background when frequently used, removing a jump in latency when they expire. #19005

### Enterprise Edition Changes

- When an enterprise `RESTORE` fails or is canceled, partially restored data is now properly cleaned up. #19578

- Added a placeholder during long-running `BACKUP` and `IMPORT` jobs to protect against accidentally using it by concurrent operations. #19713

### Doc Updates

- New RFCs:
  - Inverted indexes #18992
  - `JSONB` encoding #19062
  - SQL Sequences #19196
  - Interleaved table JOINs #19028
  - SQL consistency check command #18675
- Documented how to increase the system-wide file descriptors limit on Linux. #2139
- Clarified that multiple transaction options in a single `SET TRANSACTION` statement can be space-separated as well as comma-separated. #2139
- Added `e'\\x` to the list of supported hexadecimal-encoded byte array literals formats. #2134
- Clarified the FAQ on auto-generating unique row IDs. #2128
- Corrected the aliases and allowed widths of various `INT` types. #2116
- Corrected the description of the `--host` flag in our insecure cloud deployment tutorials. #2117
- Minor improvements to the CockroachDB Architecture Overview page. #2103 #2104 #2105

## v1.2-alpha.20171026

Release Date: October 26, 2017

### Backwards-Incompatible Changes

- Casts from `BYTES` to `STRING` have been changed and now work the same way as in PostgreSQL. New functions `encode()` and `decode()` are available to replace the former functionality. #18843

### General Changes

- CockroachDB now requires Go 1.9. #18459
- Release binaries now link against `libtinfo` dynamically. Building CockroachDB from source now requires `libtinfo` (or `ncurses`) development packages. #18979
- Building the web UI now requires Node version 6 and Yarn version 0.22.0 or newer. #18830
- Most dependencies have been updated to their latest versions. #17490
- Release docker images are now based on Debian 8.9. #18748

### SQL Language Changes

- `DROP DATABASE` now defaults to `CASCADE`, restoring the 1.0 (and PostgreSQL-compatible) behavior. #19182
- The `INET` column type and related functions are now supported. #18171 #18585
- The `ANY`, `SOME`, and `ALL` functions now support subquery and tuple operands. #18094 #19266
- `current_schemas(false)` behaves more consistently with PostgreSQL. #18108
- `SET CLUSTER SETTING` now supports prepared statement placeholders. #18377
- `SHOW CLUSTER SETTINGS` is now only available to `root`. #19031
- A new cluster setting `cloudstorage.gs.default.key` can be used to store authentication credentials to be used by `BACKUP` and `RESTORE`. #19018
- The `RESTORE DATABASE` statement is now supported. #19182
- `IMPORT` now reports progress incrementally. #18677
- `IMPORT` now supports the `into_db` option. #18899
- The `date_trunc()` function is now available. #19297
- New function `gen_random_uuid()` is equivalent to `uuid_v4()` but returns type `UUID` instead of `BYTES`. #19379
- The `extract` function now works with `TIMESTAMP WITH TIME ZONE` in addition to plain `TIMESTAMP` and `DATE`. #19045
- `TIMESTAMP WITH TIME ZONE` values are now printed in the correct session time zone. #19081
- PostgreSQL compatibility updates: The `pg_namespace.aclitem` column has been renamed to `nspacl`. `pg_class` now has a `relpersistence` column. New functions `pg_encoding_to_char`, `pg_get_viewdef`, and `pg_get_keywords`. The `pg_tablespace` table is now available. The type name `"char"` (with quotes) is recognized as an alias for `CHAR`. Session variable `server_version_num` is now available. #18530 #18618 #19127 #19150 #19405

### Command-Line Interface Changes

- A new flag `--temp-dir` can be used to set the location of temporary files (defaults to a subdirectory of the first store). #18544
- Many bugs in the interactive SQL shell have been fixed by switching to `libedit` for command-line input. The `normalize_history` option has been removed. #18531 #19125
- New command `cockroach load show` displays information about available backups. #18434
- `cockroach node status` and `cockroach node ls` no longer show nodes that are decommissioned and dead. #18270
- The `cockroach node decommission` command now has less noisy output. #18458

### Bug Fixes

- Fixed issues when `meta2` ranges split, lifting the ~64TB cluster size limitation. #18709 #18970
- More errors now return the same error codes as PostgreSQL. #19103
- `ROLLBACK` can no longer return a "transaction aborted" error. #19167
- Fixed a panic in `SHOW TRACE FOR SELECT COUNT(*)`. #19006
- Escaped backslashes are now supported in `regexp_replace` substitution strings. #19168
- `extract(quarter FROM ts)` now works correctly. #19298
- The node liveness system is now more robust on a heavily-loaded cluster. #19279
- Added debug logging when attempting to commit a non-existent intent. #17580

### Performance Improvements

- New cluster setting `timeseries.resolution_10s.storage_duration` can be used to reduce the storage used by built-in monitoring. #18632
- Foreign key checks are now performed in batches. #18730
- Raft ready processing is now batched, increasing performance of uncontended single-range write workloads. #19056 #19164
- The leaseholder cache is now sharded to improve concurrency and uses less memory. #17987 #18443
- Finding split keys is now more efficient. #18649 #18718
- `STDDEV` and `VARIANCE` aggregations can now be parallelized by the distributed SQL engine. #18520
- Store statistics are now updated immediately after rebalancing. #18425 #19115
- Raft truncation is now faster. #18706
- Replica rebalancing is now prioritized over lease rebalancing. #17595
- `IMPORT` and `RESTORE` are more efficient. #19070
- Restoring a backup no longer creates an extra empty range. #19052
- Improved performance of type checking. #19078
- The replica allocator now avoids adding new replicas that it would immediately try to undo. #18364
- Improved performance of the SQL parser. #19068
- Cache strings used for stats reporting in prepared statement. #19240
- Reduced command queue contention during intent resolution. #19093
- Transactions that do not use the client-directed retry protocol and experience retry errors are now more likely to detect those errors early instead of at commit time. #18858
- Commands that have already exceeded their deadline are now dropped before proposal. #19380
- Reduced the encoded size of some internal protocol buffers, reducing disk write amplification. #18689 #18834 #18835 #18828 #18910 #18950
- Reduced memory allocations and GC overhead. #18914 #18927 #18928 #19136 #19246