March 25, 2020
A denial-of-service (DoS) vulnerability is present in CockroachDB v20.1.0 - v20.1.10 due to a bug in protobuf. This is resolved in CockroachDB v20.1.11 and later releases. When upgrading is not an option, users should audit their network configuration to verify that the CockroachDB HTTP port is not available to untrusted clients. We recommend blocking the HTTP port behind a firewall.
For more information, including other affected versions, see Technical Advisory 58932.
In addition to various updates, enhancements, and bug fixes, this beta release includes the following major highlights:
- SELECT FOR UPDATE: CockroachDB now supports
SELECT FOR UPDATE
for ordering transactions. UseSELECT FOR UPDATE
to lock the rows returned by a selection query, to control concurrent access to one or more rows of a table. - SQL savepoints: CockroachDB now fully supports SQL savepoints. New syntax for savepoints includes
SAVEPOINT <foo>
,RELEASE SAVEPOINT <foo>
, andROLLBACK TO SAVEPOINT <foo>
. To inspect the current stack of active savepoints, useSHOW SAVEPOINT STATUS
. - Hash-sharded indexes: CockroachDB now supports new syntax for defining hash-sharded indexes. Hash-sharded indexes improve write performance to indexes on sequential keys. To define a hash-sharded index, use
CREATE INDEX ... USING HASH WITH BUCKET_COUNT = <number of buckets>
. - RBAC now under BSL: All role-based access control (RBAC) features (
CREATE ROLE
,ALTER ROLE
,DROP ROLE
,GRANT ROLE
,REVOKE ROLE
) are now BSL features and available to non-enterprise users. - Improved vectorized execution: Vectorized execution now supports hash joins, merge joins, and most window functions. By default, the
vectorized
session variable is set toauto
, which uses vectorized execution for all queries except those including unorderedDISTINCT
clauses or calls to thepercent_rank
orcume_dist
window functions. To turn vectorized execution on for all operations, setvectorized
toon
. - Statement tracing in the Admin UI: Statement diagnostic information is now available in the Admin UI. When viewing a statement fingerprint in the Admin UI, you can now trigger a trace on the next query execution matching that statement fingerprint.
Get future release notes emailed to you:
Downloads
Docker image
$ docker pull cockroachdb/cockroach-unstable:v20.1.0-beta.3
Backward-incompatible changes
- The
GRANT
andREVOKE
statements now require that the requesting user already have the target privileges themselves. For example,GRANT SELECT ON t TO foo
requires that the requesting user already have theSELECT
privilege ont
. #45697 - During the upgrade process from 19.2 to 20.1, almost all schema changes will now be disallowed on 20.1 nodes until the upgrade has been finalized, as part of ensuring consistency while the cluster undergoes a significant, backward-incompatible change in how schema changes are executed. Attempting these schema changes will return an error to the client. #45990
- To ensure consistency for schema changes throughout the upgrade process to 20.1, schema changes initiated in 19.2 now cannot be adopted, paused, or resumed from 20.1 nodes until an internal migration is run. #46214
Security updates
Identity management changes
- All role-based access control (RBAC) features (
CREATE ROLE
, [ALTER ROLE
],DROP ROLE
,GRANT ROLE
,REVOKE ROLE
) are now available to non-enterprise users. All RBAC features are now BSL features. #46042 USER
s andROLE
s are now the same (which is PostgreSQL behavior). This meansCREATE
/ALTER
/DROP
ROLE
/USER
can be used interchangeably. #44968- The validation rule for principal names was extended to support periods and thus allow domain name-like principals. For reference, the validation rule is currently the regular expression
^[\p{Ll}0-9_][---\p{Ll}0-9_.]*$
, and limited to a size of 63 UTF-8 bytes (larger usernames are rejected with an error); for comparison, PostgreSQL allows many more characters and truncates at 63 characters silently. #45575 - Usernames can now contain periods, for compatibility with certificate managers that require domain names to be used as usernames. #45575
- User and role principals can now be prevented from logging in using the
NOLOGIN
attribute, which can be set using theCREATE USER/ROLE
orALTER USER/ROLE
. When using theCREATE ROLE
syntax,NOLOGIN
is enabled by default whereas when usingCREATE USER
, it is not. #45541 - The
CREATEROLE
option can now be granted to users/roles usingCREATE USER/ROLE
orALTER USER/ROLE
. This delegates the permission to create additional roles. #44232 - Any role created prior to v20.1 will be able to log into clusters started with
--insecure
, unless/until they are given theNOLOGIN
attribute. For secure clusters, roles cannot log in by virtue of not having a password nor a client certificate. #45541
Authentication changes
- CockroachDB now offers the ability to SQL client connection events (connection established and connection terminated) and SQL client authentication events (authentication method selection, authentication method application, authentication method result, and session termination) to a distinct
cockroach-auth.log
file in each node's main log directory. To enable SQL client connection logging, set theserver.auth_log.sql_connections.enabled
cluster setting. To enable SQL client authentication event logging, set the newserver.auth_log.sql_sessions.enabled
cluster setting cluster setting. Note that this feature is experimental; as such, the interface and output are subject to change. #45193 - The password field (used exclusively for password-based authentication) can now be configured to have an expiration date using the
VALID UNTIL
attribute, which can be set withALTER USER/ROLE
. Note that the attribute sets an expiration date for the password, not the user account. This is consistent with PostgreSQL. #45541 - Client and node certificates are now allowed to specify the principal in either the SubjectCommonName field or the SubjectAlternateNames field. Previously, the principal could only be specified in the SubjectCommonName field. This facilitates the use of Amazon Certificate Manager (ACM) and other Cloud-based certificate management tools. #45819
Authorization changes
- Admin users can now grant
ZONECONFIG
to non-admin users on specific SQL objects (databases/tables). When set, the user is authorized to modify that object's zone configuration and decide data placement on specific nodes or groups thereof. #45201 - The
GRANT
statement has been changed to be more like a capability-based system: it can only propagate privileges that the requesting user already has. Previously, it could be used to grant any other bit to any user, even to the requesting user. Note that the pseudo-privilegeALL
includesGRANT
, soGRANT ALL
, in effect, preserves the previous behavior: it grantsGRANT
and every over privileges, so all privileges can be re-granted transitively. #45697 - It is now possible for operators to disable the use of implicit credentials when accessing external cloud storage services for various bulk operations (e.g,
BACKUP
,IMPORT
, etc.). The use of implicit credentials can be disabled by using the--external-io-disable-implicit-credentials
flag. #45969
Security bug fixes
- All users can now view any comments on any object (bypassing other privileges), but modifying comments require write privilege on the target object. Previously, any user could modify any database/table/view/index comment via direct SQL updates to
system.comments
. This was unintended and a form of privilege escalation, and is now prevented. The privileges required for theCOMMENT
statement,pg_description
,col_description()
,obj_description()
, andshobj_description()
are operating as in PostgreSQL and are unaffected by this change.#45712 - The
--external-io-dir=disabled
now applies tonodelocal upload
requests. #45858 - The non-authenticated
/health
HTTP endpoint was previously exposing the private IP address of the node, which can be privileged information in some deployments. This has been corrected. Deployments using automation to retrieve a node build details and address details should use/_status/details/local
instead and use a valid admin authentication cookie. #45119
Enterprise edition changes
- CDC to cloud-storage sinks now supports optional
gzip
compression. #45326 BACKUP
can be re-run with the same destination path to automatically append an incremental backup to that path. #45255RESTORE
now allows usingAS OF SYSTEM TIME
to pick a target backup from a larger list of incremental backups. #45368- Changefeeds now have new options to control the types of schema change events the changefeed should respond to (
schema_change_events
), and the behavior to take when such an event occurs (schema_change_policy
). This functionality allows users to halt changefeeds upon schema changes or skip over the logical backfill that is performed by default. #45652 - Two new
CHANGEFEED
options,initial_scan
andno_initial_scan
, have been added. Theinitial_scan
can be used only if no cursor had been specified (indicating the desire to start theCHANGEFEED
fromnow()
). The new options allow clients to override this default behavior and create changefeeds from the present without an initial scan, or from a point in time with one. You cannot specify both options simultaneously. #45663 BACKUP
will no longer fail if the GC window for a table is exceeded while backing the table up. #45859- Incremental
BACKUP
can quickly skip unchanged data, making frequent incremental backups 10-100x faster, depending on data size and frequency. #46108
Storage changes
- Improved the ability of garbage collection to process ranges exhibiting abnormally large numbers of transaction records and/or abort span entries. #45444
- Improved a debug message that is printed when a range is unavailable (i.e., unable to accept writes). #45580
- The timing of garbage collection for historical data is defined by the
gc.ttlseconds
variable in the applicable zone configuration. However, in practice, data is not garbage collected immediately after the TTL passes. The newkv.gc_ttl.strict_enforcement
cluster setting makes sure thatAS OF SYSTEM TIME
queries older than the TTL, but before GC has happened, return an error. #45826 - A bug in the range metrics collection would fail to correctly identify a range that had lost quorum, causing it to not be reported via the "unavailable ranges" metric. This is now fixed. #45253
- Range garbage collection will now trigger based on a large abort span, adding defense-in-depth against ranges growing large (and eventually unstable). #45573
- Fixed a bug that could cause requests to a quiesced range to hang in the KV replication layer. This bug would cause the message "have been waiting ... for proposing" to appear. even though no loss of quorum occurred. #46045
SQL changes
SQL language additions
- CockroachDB now supports string and byte array literals using the dollar-quoted notation, as documented here. #44130
- CockroachDB now supports expanding all columns of a tuple using the
.*
notation, for example:SELECT (t).* FROM (SELECT (1,'b',2.3) AS t)
. This is a CockroachDB-specific extension. #45609 - CockroachDB now supports accessing the Nth column in a column with tuple type using the syntax
(...).@N
, for example:SELECT (t).@2 FROM (SELECT (1,'b',2.3) AS t)
. This is a CockroachDB-specific extension. #45609 - Duplicate rows in the input to an
INSERT..ON CONFLICT DO NOTHING
statement will now be ignored rather than triggering an error. #45443 - SQL savepoints are now supported.
SAVEPOINT <foo>
,RELEASE SAVEPOINT <foo>
, andROLLBACK TO SAVEPOINT <foo>
now work.SHOW SAVEPOINT STATUS
can be used to inspect the current stack of active savepoints. #45566 CockroachDB still considers the name
cockroach_restart
special inSAVEPOINT
s. A savepoint defined with the namecockroach_restart
is a "restart savepoint" and has different semantics than standard savepoints:- Restart savepoints must be opened immediately when the transaction starts. Opening a restart savepoint after other statements have been executed is not allowed. In contrast, standard savepoints can be opened after other statements have already been executed.
- After a successful
RELEASE
, a restart savepoint does not allow further use of the transaction.COMMIT
must immediately follow the RELEASE. - Restart savepoints cannot be nested. Issuing
SAVEPOINT cockroach_restart
two times in a row only creates a single savepoint marker. This can be seen withSHOW SAVEPOINT STATUS
. IssuingSAVEPOINT cockroach_restart
afterROLLBACK TO SAVEPOINT cockroach_restart
reuses the marker instead of creating a new one. In contrast, twoSAVEPOINT
statements with a standard savepoint name, or aSAVEPOINT
statement immediately after aROLLBACK
, create two distinct savepoint markers.
Note: The session variable
force_savepoint_restart
still works and causes every savepoint name to become equivalent tocockroach_restart
with the special semantics described above. #46194- Restart savepoints must be opened immediately when the transaction starts. Opening a restart savepoint after other statements have been executed is not allowed. In contrast, standard savepoints can be opened after other statements have already been executed.
SELECT FOR UPDATE
now hooks into a new leaseholder-only locking mechanism. This allows the feature to be used to improve performance of transactions that read, modify, and write contended to rows. Similarly,UPDATE
statements now use this new mechanism by default, meaning that their performance under contention is improved. This is only enabled forUPDATE
statements that can push their filter all the way into their key-value scan. To determine whether anUPDATE
statement is implicitly usingSELECT FOR UPDATE
locking, look for alocking strength
field in theEXPLAIN
output for the statement. #45701The statement
CREATE SCHEMA IF NOT EXISTS
is now accepted, and ignored, if it targets one of the pre-defined schemas (public
,pg_temp
,pg_catalog
, etc.) #42703Added the
every
aggregate function. #46059The
ceil
andfloor
built-in functions now accept integer inputs. #46166
Query planning changes
- CockroachDB previously allowed
TIMESTAMP
/TIMESTAMPTZ
andTIME
/TIMETZ
to be converted toTIMESTAMP(0)
/TIMESTAMPTZ(0)
, but this does not actually change any of the precision within it. CockroachDB now prohibits converting any precision ofTIMESTAMP
/TIMESTAMPTZ
/TIME
/TIMETZ
to a lower precision value. #45314 - Operators on two arrays with different element types now fail at type-check time instead of evaluation time. #45260
- Improved the error message for the unsupported interaction between correlated subqueries and
WITH
clauses #45227 UPSERT
andINSERT..ON CONFLICT
statements now (occasionally) need to do an extra check to ensure that they never update the same row twice. This may adversely affect performance in cases where the optimizer cannot statically prove the extra check is unnecessary. #45372- The optimizer now considers the likely number of rows an operator will need to provide, and might choose query plans based on this. In particular, the optimizer might prefer lookup joins over alternatives in some situations where all rows of the join will probably not be needed. #45604
- JSONB columns can now used in
GROUP BY
andDISTINCT ON
clauses. #45229 - The inverted index implementation now supports indexing array columns. This permits accelerating containment queries (
@>
and<@
) on array columns by adding an index to them. #45157 EXPLAIN BUNDLE
can now be used to run a query and collect execution information in a support bundle, which can be downloaded via the Admin UI. #45735EXPLAIN BUNDLE
now works when the client driver prepares the statement. #46111- Renamed
experimental_optimizer_foreign_keys
session variable andsql.defaults.optimizer_foreign_keys.enabled
cluster setting to remove the experimental prefix. #46174 - Fixed the
"negative limit hint"
internal query error. #45879 - Fixed query errors in cases where a CTE was used inside a recursive CTE. #45877
- 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. #46153 - Improvements in session settings reporting in the
EXPLAIN (OPT,ENV)
output. #46212
Execution changes
- The new
diagnostics.sql_stat_reset.interval
cluster setting controls the rate at which SQL statement statistics are refreshed. Additionally, the settingdiagnostics.forced_stat_reset.interval
was renamed todiagnostics.forced_sql_stat_reset_interval
. #45082 UPDATE
statements now acquire locks using theFOR UPDATE
locking mode during their initial row scan, which improves performance for contended workloads. This behavior is configurable using theenable_implicit_select_for_update
session variable and thesql.defaults.implicit_select_for_update.enabled
cluster setting. #45159- Hash joins and sorts are now run using the vectorized engine when
vectorize=auto
(default configuration). #45582 - CockroachDB now collects separate sets of metrics for usage of
SAVEPOINT
: one set for regular SQL savepoints and one set for uses dedicated to CockroachDB's client-side transaction retry protocol. #45566 - Vectorized distributed flows and disk spilling now support the
INTERVAL
type. #45776 - Queries with
MERGE
join can now run via the vectorized engine whenvectorize
is set toauto
. #45784 - Hash aggregation is now supported in
vectorize=auto
mode. #45832 - Added telemetry reporting for usages of inverted and hash-sharded indexes. #46060
- The statement tag returned to the client upon success for
CREATE USER
,ALTER USER
, andDROP USER
now include the word "ROLE" instead of "USER", for compatibility with PostgreSQL. These three statements are now aliases forCREATE ROLE
,ALTER ROLE
,DROP ROLE
. #46042 experimental_on
option forvectorize
session variable has been renamed toon
. The only things that will not run withauto
, but will run withon
, are unorderedDISTINCT
and two window functions (percent_rank
andcume_dist
). The two options are otherwise identical. #46080NOTICE
commands can now be sent by CockroachDB servers using the Postgres client/server protocol. These notices will print when using the CockroachDB CLI. These notices can be disabled using the cluster settingsql.notices.enabled = false
. #45679- Fixed an internal error that could occur when
NULLIF
was called with one null argument. #45354 - Fix a bug where
EXPERIMENTAL SCRUB TABLE
on a timestamp/timestamptz key does not work. #45410 - Significantly reduced the amount of memory allocated while scanning tables with a large average row size. #45323
- Some vectorized execution plans that used lookup joins with decimals would previously return incorrect results. This is now fixed. #45536
- Previously, drivers that did not truncate trailing zeroes for decimals in the binary format end up having inaccuracies of up to 10^4 during the decode step. Fixed the error by truncating the trailing zeroes as appropriate. This fixes known incorrect decoding cases with Postgres in Elixir. #45613
- Previously, an internal error could occur in CockroachDB when executing queries via the vectorized engine in queries that contained unordered synchronizers. This has been fixed. #45690
- Fixed a bug where the distinct operation on
ARRAY[NULL]
andNULL
could sometimes return an incorrect result and omit some tuples. #45229 - Previously, CockroachDB could crash when computing window functions with the
RANGE
mode of framing when one of the bounds was either'offset PRECEDING'
or'offset FOLLOWING'
and when there wereNULL
values in the single column fromORDER BY
clause. Additionally, also inRANGE
mode, bounds'0 PRECEDING'
and'0 FOLLOWING'
could be handled incorrectly. This is now fixed. #44666 - Verify column is now visible before accessing its datums. #45801
- Expected errors from the vectorized execution engine are no longer mistakenly annotated as unexpected errors. #45673
- Mixed type comparison or binary expressions that could have previously returned wrong results in the vectorized execution engine now fall back to using the row execution engine. #45724
- Fixed decimal rounding errors in the vectorized execution engine. #45950
- Fixed a bug where various session variables whose value would display as "
on
" or "off
" could not be set to the values "on
" or "off
", onlytrue
orfalse
. #46163 - Fixed a bug that caused transactions that have performed schema changes to deadlock after they restart. #46170
Updates to schema change / DDL statements
- It is now possible to create a table and then add or alter a primary key within the same transaction. #46015
- The
ALTER TABLE .. ADD PRIMARY KEY ...
command can now be used when the target table has the default rowid primary key. #45514 - Fixed a bug where a table without a primary key and a column named
rowid
would throw an error when being created. #45507 - The use of schema changes when a primary key change is in progress is now disabled. This includes the following: (1) running a primary key change in a transaction and then starting another schema change in the same transaction, and (2) starting a primary key change on one connection and then starting a schema change on the same table on another connection while the initial primary key change is currently executing. #45397
- CockroachDB has now disabled primary key changes when a concurrent schema change is executing on the same table, or if a schema change has been started on the same table in the current transaction. #45513
- You can now drop a primary key as long as you add another primary key within the same transaction. This feature is intended to be used when you do not want the existing primary key to be rewritten as a secondary index by
ALTER PRIMARY KEY
. #44511 - The experimental variable gating around usages of online primary key changes is now removed. #45753
- Previously, when a database was renamed, any table referencing a sequence would be blocked from being able to rename the table. This is to block cases where if the table's reference to the sequence contains the database name, and the database name changes, we have no way of overwriting the table's reference to the sequence in the new database. However, if no database name is included in the sequence reference, we should continue to allow the database to rename, as is implemented with this change. #45502
- Previously, renaming a database with dependent views returned a misleading error message that implies it was a dependent view on a dependent table. Now the error message generically says
cannot rename relation ... as it depends on relation ...
instead. #45427 - Long-running transactions which attempt to
TRUNCATE
can now be pushed and will commit in cases where they previously could fail or retry forever. #44091 - It is now possible to create inverted indexes on columns whose names are mixed-case. #45621
Updates to Bulk I/O statements
- Improved error messages when importing MySQL dump data. #45958
nodelocal://
URIs now require a node ID be specified in the hostname field. The special node ID of'self'
is equivalent to the old behavior of when the node ID was unspecified. #45764- Fixed cases where target column specifications in
IMPORT INTO
were ignored. #45747 IMPORT
now correctly handles columns named with reserved keywords and/or other special characters. #45944- Google storage client is now resilient to transient connection errors. #46000
- The creation of a database and table between incremental cluster backups is now allowed. #46066
- Better error reporting when importing data. #46165
Changes to background job management
- Schema changes are now scheduled and run fully like other jobs: they now can be canceled, paused, and resumed. Some other UI differences come with this implementation change; notably, all schema changes now have an associated job, failed schema changes are now rolled back within the "Reverting" phase of the same job, and GC for dropped indexes and tables is deferred to a later job. #45870
- Non-running
jobs
are now considered for adoption in randomized order instead of in a determistic order by creation time, to avoid potential deadlocks when schema change jobs need to execute in a specific order. This is a preemptive change, not a bug fix, but it affects all jobs. #45870 - On new clusters, the internal
system.jobs
table now uses the defaultzoneconfig
andTTL
(25h). #45767 - The cleanup job spawned by
ALTER .. PRIMARY KEY
in some cases cannot be cancelled. #45595 - Introduced a temporary table cleanup job that runs once every periodically per cluster. It removes any temporary schemas and their related objects that did not get removed cleanly when the connection closed. This period can be changed by the cluster setting
sql.temp_object_cleaner.cleanup_interval
, which defaults to 30 minutes. #45669 - Previously, after deleting an index, table, or database, the relevant schema change job would change its running status to waiting for GC TTL. The schema change and the GC process are now decoupled into two jobs. #45962
- Fixed a bug where, in some rare cases, a job was not cancellable when in state "Reverting". #45320
- When considering if a job should be orphaned, CockroachDB use to take the conservative approach when a descriptor ID pointing to non-existent descriptor was found. This caused jobs to hang forever and be garbage collected. CockroachDB now disregards these IDs when considering if a job has still work to do. #45353
- Logs emitted from jobs are now tagged with the job ID to improve visibility and aid debugging. #45728
IMPORT INTO
jobs which are canceled or fail can no longer get stuck in an unrecoverable state if data from the previous state of the table had expired relative to the GC TTL. #44739CHANGEFEED
jobs that take a long time to perform backfills will no longer encounter failures due to garbage collection, so long as they begin before the data has expired. #45778
Updates to APIs and introspection
- Telemetry reporting has been added for the commands
SHOW INDEXES
,SHOW QUERIES
,SHOW JOBS
, andSHOW CONSTRAINTS
. #45897 SHOW USERS
andSHOW ROLES
are now the same, asUSERS
is now an alias forROLES
.SHOW USERS
andSHOW ROLES
now match PostgreSQL\du
command.SHOW ROLES
now displays three columns:username
,options
, andmember_of
. #45827- HTTP endpoints now report status
403 (Forbidden)
instead of500 (Internal server error)
when the authenticated user has insufficient privileges to use the endpoint. #45325 - The end point
/_status/job/{job_id}
will now display status info about a job. #45094 - The pprof endpoints now allow downloading the binary profiles. To do so, attach
?download=true
to the URL. #45790 - Improved the debuggability of C++-level issues by providing access to thread stack traces via a new
/debug/threads
endpoint, which is exposed on the Admin UI advanced debug page. Now include thread stack traces in the info collected bydebug zip
. Thread stack traces are currently only available on Linux. #45321 - Accesses to
/health
using a non-root authentication token no longer hang when a node is currently under load, or if a system range is unavailable. #45119 - Statement diagnostics traces now contain processor statistics. #46132
Command-line changes
Changes to operational workflows
- Hostnames from the
cockroach start --join
flag can now be resolved as SRV record. This simplifies cluster deployment in Kubernetes. #45815 - The
--decommission
flag forcockroach quit
is now deprecated. It will be removed altogether in a next stable release. Deployments should usecockroach node decommission
followed by eithercockroach quit
or an equivalent form of server shut down. #45903 - The
--socket
flag forcockroach start
is now deprecated in favor of--socket-dir
. CockroachDB now automatically chooses a name for the socket in the specified directory based on the configured port number.--socket
will be removed in a later version. #45931 - Added the
--cert-principal-map
flag tocockroach start
, which specifies a comma-separated list ofcert-principal
:db-principal
mappings that map the principals found in certificates to DB principals. This allows the usage of "node" and "root" certificates where the common name contains dots or a host name, which allows such certificates to be generated by certificate authorities that place restrictions on the contents of the common name field. #45819
Configuration changes
- Added a new
default
option for the--storage-engine
flag that respects the engine used last. #45512
Usability improvements
- Some CLI commands now provide more details and/or a hint when they encounter an error. #45575
- CockroachDB now refuses to start if named time zones are not properly configured. It is possible to override this behavior for testing purposes, with the understanding that doing so will cause incorrect SQL results and other inconsistencies, using the environment variable
COCKROACH_INCONSISTENT_TIME_ZONES
. #45640 - The
cockroach sql
andcockroach demo
client commands now display out-of-band server notices at the end of execution. #46144 #46124 - When some result rows have already been received from the server when an error is encountered, the CockroachDB SQL shell now presents both the result rows and the error in the output, regardless of the selected table formatter. Previously, only the error was reported with some formatters, or both with other formatters. #45872
- Added the flag
--disable-demo-license
to provide another option to disablecockroach demo
from attempting to acquire a demo license. #46126 - The parameter
--set
forcockroach sql
andcockroach demo
is now able to override all client-side options, as advertised. #46118 - Fixed a bug that caused
cockroach demo -e
to display aconnection refused
error. #46126
Change to troubleshooting facilities
- The
cockroach debug zip
output now contains hex representation of marshaled jobs payload and progress as well table descriptors. This allows you to copy this string and unmarshal it when debugging. #45721 - CockroachDB will now dump the stacks of all goroutines upon receiving
SIGQUIT
prior to terminating. This feature is intended for use while troubleshooting misbehaving nodes. #36378
Admin UI changes
- Removed mention of RocksDB from the Read Amplification, SSTables, Compactions/Flushes, and Compaction Queue graphs. #45398
- The display options are now saved separately for each authenticated user. Note: When upgrading to a version with this change, all current display customizations for admin users are lost. #45127
- Customizations of the Admin UI are again properly saved across sessions. #45127
- Refactored redux data flow in enqueue range. #45667
- Increased enqueue range timeout to an hour to prevent operations from timing out before completion. #45667
- The Admin UI now reports a clearer message when a non-admin user uses an admin-only feature. #45122
- Added the Statement Diagnostics History page. #45799
- You can now access the Activate Diagnostics dialog from the Statements page, through the Activate link. #45799
- Added a Release Notes subscription form on the Cluster Overview page. #45143
- The jobs status filter now includes "running", which was previously omitted by mistake. #45937
Performance improvements
- Importing an Avro file is now faster. #45269
- Improved the execution plans of foreign key checks for
UPSERT
andINSERT .. ON CONFLICT
in some cases (in particular multi-region). #45520 - Importing delimited data now has improved throughput. #45543
- Improved the selectivity estimation of some predicates containing
OR
, leading to better plan selection by the optimizer. #45732 - Improved cardinality estimation in the optimizer for relations with a small number of rows. This leads to the optimizer choosing a better query plan in some cases. #45771
crdb_internal.jobs
now loads less data into memory. #45914
Doc updates
- Upgraded the search on the docs site. #6692
- Added docs for
--storage-engine
flag on node start, which can bepebble
,rocksdb
, ordefault
, which makes the--storage-engine
flag sticky for future runs when no engine is specified. #6769 - Added examples of
COMMENT ON TABLE
inSHOW CREATE TABLE
output toCOMMENT ON
,SHOW TABLES
, andSHOW CREATE
. #6789 - Added the "Duplicate Indexes" Youtube video to the Duplicate Indexes Topology doc. #6796
- Updated the
cockroach demo
doc to include new flags. #6841
Contributors
This release includes 385 merged PRs by 42 authors. We would like to thank the following contributors from the CockroachDB community:
- Andrii Vorobiov
- Artem Barger
- Damien Hollis (first-time contributor)
- Jaewan Park
- Ziheng Liu (first-time contributor)
- pohzipohzi (first-time contributor)