February 1, 2021
Get future release notes emailed to you:
Downloads
Docker image
$ docker pull cockroachdb/cockroach-unstable:v21.1.0-alpha.2
Backward-incompatible changes
- The payload fields for certain event types in
system.eventlog
have been changed and/or renamed. Note that the payloads insystem.eventlog
were an undocumented, reserved feature so no guarantee was made about cross-version compatibility to this point. The list of changes includes (but is not limited to):TargetID
has been renamed toNodeID
fornode_join
.TargetID
has been renamed toTargetNodeID
fornode_decommissioning
/node_decommissioned
/node_recommissioned
.NewDatabaseName
has been renamed toNewDatabaseParent
forconvert_to_schema
.grant_privilege
andrevoke_privilege
have been removed; they are replaced bychange_database_privilege
,change_schema_privilege
,change_type_privilege
, andchange_table_privilege
. Each event only reports a change for one user/role, so theGrantees
field was renamed toGrantee
.- Each
drop_role
event now pertains to a single user/role. #57737
- The connection and authentication logging enabled by the cluster settings
server.auth_log.sql_connections.enabled
andserver.auth_log.sql_sessions.enabled
was previously using a text format which was hard to parse and integrate with external monitoring tools. This has been changed to use the standard notable event mechanism, with standardized payloads. The output format is now structured; see the generated reference documentation for details about the supported event types and payloads. #57839 - The logging format for SQL audit, execution, and query logs has changed from a crude space-delimited format to JSON. To opt out of this new behavior and restore the pre-v21.1 logging format, you can set the cluster setting
sql.log.unstructured_entries.enabled
totrue
. #59110
Security updates
- The entropy of the auto-generated user account password for
cockroach demo
shell has been lowered, to ensure that the passwords are short and easy to copy over. This makes the password easy to brute-force and thus removes any remaining protection there may have been to the confidentiality ofdemo
sessions. (The reason why a password remains, as opposed to no password whatsoever, is to prevent accidental misuse of the HTTP service by other applications running on the same machine.) Since the required shortness erases any pretense of security, the algorithm has been simplified to remove usage of a cryptographic PRNG altogether. #58305 - When using a SQL proxy, by default CockroachDB only knows about the network address of the proxy. That peer address is then used for logging, authentication rules, etc. This is undesirable, as security logging and authentication rules need to operate on the actual (final) client address instead. CockroachDB can now be configured to solve this problem (conf mechanism detailed below). When so configured, a SQL proxy can inform the CockroachDB server of the real address of the client via a server status parameter called
crdb:remote_addr
. The value must be the IP address of the client, followed by a colon, followed by the port number, using the standard Go syntax (e.g.,11.22.33.44:5566
for IPv4,[11:22::33]:4455
for IPv6). When provided, this value overrides the SQL proxy's address for logging and authentication purposes. In any case, the original peer address is also logged alongside the client address (overridden or not), via the new logging tagpeer
. Security considerations:- Enabling this feature allows the peer to spoof its address with regard to authentication and thus bypass authentication rules that would otherwise apply to its address, which can introduce a serious security vulnerability if the peer is not trusted. This is why this feature is not enabled by default, and must only be enabled when using a trusted SQL proxy.
- This feature should only be used with SQL proxies which actively scrub a
crdb:remote_addr
parameter received by a remote client, and replaces it by its own. If the proxy mistakenly forwards the parameter as provided by the client, it opens the door to the aforementioned security vulnerability. - Care must be taken in host-based authentication (HBA) rules:
- TLS client cert validation, if requested by a rule, is still performed using the certificate presented by the proxy, not that presented by the client. This means that this new feature is not sufficient to forward TLS client cert authentication through a proxy. (If TLS client cert authentication is required, it must be performed by the proxy directly.)
- The
protocol
field (first column) continues to apply to the connection type between CockroachDB and the proxy, not between the proxy and the client. Only the 4th column (the CIDR pattern) is matched against the proxy-provided remote address override. Therefore, it is not possible to apply different rules to different client address when proxying TCP connections via a unix socket, because HBA rules for unix connections don't use the address column. Also when proxying client SSL connections via a non-SSL proxy connection, or proxying client non-SSL connections via a SSL proxy connection, care must be taken to configure address-based rule matching using the proper connection type. A reliable way to bypass this complexity is to only use thehost
connection type which applies equally to SSL and non-SSL connections. As of this implementation, the feature is enabled using the non-documented environment variableCOCKROACH_TRUST_CLIENT_PROVIDED_SQL_REMOTE_ADDR
. The use of an environment variable is a stop-gap so that this feature can be used in CockroachCloud SQL pods, which do not have access to cluster settings. The environment variable will be eventually removed and replaced by another mechanism. #58381
- Added ability to set region-specific callback URLs in the OIDC config. The
server.oidc_authentication.redirect_url
cluster setting can now accept JSON as an alternative to the basic URL string setting. If a JSON value is set, it must contain aredirect_url
key that maps to an object with key-value pairs where the key is aregion
matching an existing locality setting and the value is a callback URL. #57519
General changes
- CockroachDB now runs fewer threads in parallel if running inside a container with a CPU limit. #57390
- Upgraded the CockroachDB binary to Go 1.15.6. #57713
- The new cluster setting
server.eventlog.enabled
controls whether notable events are also written to the tablesystem.eventlog
. Its default value istrue
. Changing this cluster setting can help recovering partial cluster availability when thesystem.eventlog
table becomes unavailable. Note that even whenfalse
, notable events are still propagated to the logging system, where they can be redirected to files or other log sinks. #57879 - Moved RBAC resources in Kubernetes manifests to
rbac.authorization.k8s.io/v1
. #55065 - Cluster version upgrades, as initiated by
SET CLUSTER SETTING version = <major>-<minor>
, now perform internal maintenance duties that will increase the time that it takes for the command to complete. This delay is proportional to the amount of data currently stored in the cluster. The cluster will also experience a small amount of additional load during this period while the upgrade is being finalized. These changes expand upon our original prototype in #57445. #58088 - Upgraded to v3.9.2 of
protobuf
to consume new changes for Bazel. #58891 - Increased the default value of
sql.tablecache.lease.refresh_limit
to 500 in order to accomodate larger schemas without encounteringRETRY_COMMIT_DEADLINE_EXCEEDED
errors and generally higher latency. #59319
Enterprise edition changes
SQL language changes
- Added a new builtin method to calculate voronoi polygons. #56496
- Added a new builtin method to calculate voronoi lines. #56496
- Previously, timezones had to be entered in the same case as they were stored on the system. Now, timezone names can be case-insensitive provided they match well-known zone names according to Go's
time/tzdata
package. #57250 - Added
LOCALITY REGIONAL BY TABLE IN PRIMARY REGION
syntax for configuring table locality. #57275 - The default value for
vectorize_row_count_threshold
setting has been decreased from 1000 to 0, meaning that, by default, CockroachDB will always use the vectorized engine for all supported queries regardless of the row estimate (unlessvectorize=off
is set). #55713 - Added the ability to
CREATE TABLE
with LOCALITY set. #57419 EXPLAIN
andEXPLAIN ANALYZE
now show counts and durations in a more user-friendly way. #57420EXPORT
can now be used by non-admin
users withSELECT
privilege on the table being exported, unless the destination URI requiresadmin
privileges. #57380CREATE DATABASE ... WITH [PRIMARY] REGIONS
now modifies the zone configurations with the settings as set by the multiregion configuration. #57244SHOW [BACKUP]
is no longeradmin
-only. It depends on the URI construct and the credentials specified in theSHOW [BACKUP]
query. #57412- builtin aggregate function
regr_avgx
is now supported. #57295 - Added support for running
IMPORT
in a mixed-version cluster. #57382 - Introduced
SHOW REGIONS FROM ALL DATABASES
, which shows region metadata for each database in the table. #57500 - Added
collations
table to theinformation_schema
. Thecollations
table contains the collations available in the current database. #57609 - Added
collation_character_set_applicability
table to theinformation_schema
. #57609 LOCALITY
directives onCREATE TABLE
are now persisted onto the database. #57513- Multi-region defined table localities now display on the
SHOW CREATE TABLE
command. #57513 - Arrays in
pg_catalog
tables now are diaplayed in a format that matches PostgreSQL. #56980 - The
SET TRACING
local
option (to only trace messages issued by the local node) was removed. #57567 - Several
SHOW
commands have been adjusted to enforce a particular ordering of the output rows. #57644 - Implemented
regr_avgy
builtin aggregation function. #57583 crdb_internal.tables
andSHOW TABLES
now show locality data on the tables. #57653CREATE TABLE ... LOCALITY ...
statements now modify the zone configurations to be in line with the desired locality. #57654- Added
sql.trace.stmt.enable_thresold
. Similar tosql.trace.txn.enable_threshold
, this logs a trace of any statements that take longer than the specified duration. This new setting allows for more granularity than the transaction threshold since it applies to individual statements and does not include overhead such as communication with a SQL client. #57733 - Added a session setting
experimental_enable_unique_without_index_constraints
and cluster defaultsql.defaults.experimental_enable_unique_without_index_constraints.enabled
to enable the use ofUNIQUE WITHOUT INDEX
syntax. The default value of both settings isfalse
since this feature is not yet fully supported. Use ofUNIQUE WITHOUT INDEX
also depends on all nodes being upgraded to the cluster versionUniqueWithoutIndexConstraints
. #57666 - Implemented builtin function
levenshtein
. #56843 - Added table-view dependency information in
pg_depend
to improve compatibility with PostgreSQL. #57240 - The cluster event logging system has been modernized. In particular, the schema of the entries for the
info
column insystem.eventlog
has been stabilized. #57737 - The
targetID
andreportingID
columns insystem.eventlog
are now deprecated. Their values, for relevant event types, can be found as fields inside theinfo
column instead. #57737 - Added the
soundex()
anddifference()
builtin functions. #57615 - New
EXPLAIN ANALYZE (DISTSQL)
output format.EXPLAIN ANALYZE (DISTSQL)
now only works as a top-level statement (it can no longer be part of a bigger query). #57804 - Added builtin function
ST_OrientedEnvelope
to calculate the mimimum-area rotated rectangle. #57697 - A new
default_transaction_use_follower_reads
session variable is now supported, which configures SQL transactions to perform stale reads from follower replicas. #57851 - Both
ALTER TABLE OWNER
andREASSIGN OWNED BY
now report structured notable events about the ownership changes. Note thatREASSIGN OWNED BY
currently also reports analter_table_owner
for views and sequences that were implicitly reassigned, even though CockroachDB does not yet support theALTER VIEW OWNER
/ALTER SEQUENCE OWNER
statements. #57969 EXPLAIN (DISTSQL)
has a new output schema and format. #57954- Added an overload to
crdb_internal.pb_to_json
to suppress populating default values in fields. #58087 IMPORT INTO
for CSV now supportsnextval
as a default expression of a non-targeted column. #56473- The
EXPLAIN
output for foreign key checks is now labeledconstraint-check
rather thanfk-check
. This change is in preparation for adding support for unique constraint checks, which will use the same label. #58053 - The error message for unique constraint violations now matches the error used by PostgreSQL. For example, the new error message looks like this:
ERROR: duplicate key value violates unique constraint "primary" DETAIL: Key (k)=(1) already exists.
#58053 EXPLAIN ANALYZE
diagrams now contain "network hops" information on streams. #58078- Added support for the
IF NOT EXISTS
prefix toCREATE TYPE
statements. #58173 - Added a
session_variables
table to theinformation_schema
. Thesession_variables
table exposes the session variables. #57837 - Indexing into scalar JSON values using an integer index is now properly supported. #58359
- The
crdb_internal.cluster_id
method now returns the ID of the underlying KV cluster in multi-tenant scenarios rather than the Nil UUID. TheClusterID
is needed for logging and metrics for SQL tenants. #58317 SHOW STATEMENTS
is now an alias ofSHOW QUERIES
. The new syntax is preferred by the SQL parser. #58072- Implemented the
gateway_region
builtin, which returns the region of the connection's current node. #58423 BACKUP
andRESTORE
now use the block-level checksums embedded in their data files instead of collecting / verifying more expensive file-level SHA512 checksums. #58487- Multi-tenant clusters will now send anonymous usage information to the central CockroachDB registration server. #58399
- Added support for
ALTER DATABASE ... ADD REGION
. #58233 - Multiple
SHOW ZONE CONFIGURATION
statements that previously usedFOR
can now also useFROM
(e.g.,SHOW ZONE CONFIGURATION FOR RANGE
). This change standardizes the use ofFROM
forSHOW ZONE CONFIGURATION
. #58740 - Implemented
SHOW REGIONS
, which shows a list of regions along with the databases associated with them. #57618 - Added
ALTER DATABASE ... PRIMARY REGION
. #58725 - Columns implicitly added from hash-sharded indexes will no longer display on
pg_index
andpg_indexes
. #58749 - Added a new
implicit
column tocrdb_internal.index_columns
, which signifies whether the column is implicitly added onto the index throughPARTITION BY
with an implicit column or a hash-sharded index. #58749 - CockroachDB now omits implicit columns or hash-sharded index columns from automatically generated index names. #58898
- Implemented
PARTITION ALL BY
syntax forCREATE TABLE
, which automatically partitions the table, and all indexes, with the same partitioning scheme. #58748 PARTITION ALL BY
tables now display correctly onSHOW CREATE TABLE
. #58928- Creating a table and changing its schema within a transaction no longer schedules a schema change job. #58888
- Implemented geo builtin function
ST_GeneratePoints
. #58288 - Hash aggregation can now spill to disk when it exhausts its memory limit when executed via the vectorized engine. #57817
- Implemented
ALTER DATABASE ... SURVIVE REGION/ZONE FAILURE
. #58937 CREATE INDEX
will now inheritPARTITION BY
clauses fromPARTITION ALL BY
tables. #58988- Implemented the geometry-based builtin functions
ST_LineSubstring({geometry,float8,float8})
. #58125 - Implemented
REGIONAL BY ROW
logic onCREATE TABLE
. This is gated behind the experimental session variableexperimental_enable_implicit_column_partitioning
. #58987 - Added support for
ALTER VIEW
/SEQUENCE OWNER TO
commands. #59049 - Casts to type
unknown[]
are no longer accepted in CockroachDB. Any such casts will fail to parse and return the errorERROR: type "unknown[]" does not exist
. This is consistent with PostgreSQL's behavior. #59136 - Implemented
REGIONAL BY ROW AS ...
, which allows a column of typecrdb_internal_region
to be used as a column forREGIONAL BY ROW
multi-region properties. #59121 - Enabled altering of table locality for tables that are
REGIONAL BY TABLE
toREGIONAL BY TABLE
(but in a different region). #59144 PARTITION ALL BY
statements will now apply for tables when usingALTER PRIMARY KEY
. #59178- Implemented the geometry builtin function
ST_ShiftLongitude
, which is useful for plotting data on a Pacific-centred map. #59234 - Implemented
ALTER TABLE ... SET LOCALITY GLOBAL
for tables starting asREGIONAL BY ROW
. #59256 - Improved the error message when people use set
search_path
incorrectly, or with a schema that legitimately has a comma in its name. #53974 - Creation of interleaved tables and indexes is now disabled by default. They can be re-enabled temporarily by running
SET CLUSTER SETTING sql.defaults.interleaved_tables.enabled=true
. #59248 - CockroachDB now uses a structured logging format for the SQL audit, execution, and query logs. See the generated reference documentation for details. Of note, audit and execution logs now also include information about whether a query plan contains full index scans. Previously, this information was only included in the slow query log. #59110
CREATE INDEX
onREGIONAL BY ROW
tables will now correctly include the implicit partitioning and inherit the correct zone configurations. #59223- Made a minor improvement to
EXPLAIN
output for "render" node. #59313 EXPLAIN ANALYZE
now defaults to the newEXPLAIN ANALYZE (PLAN)
, which shows a text representation of the logical plan, annotated with execution statistics. #57337
Command-line changes
- The logging configuration can now be specified via the
--log
parameter. See the documentation for details. The flags--log-dir
,--log-file-max-size
,--log-file-verbosity
,--log-group-max-size
are now deprecated. #57134 - A new command
cockroch debug check-log-config
prints out the logging configuration that results from the provided combination of--store
,--log
, and other logging-related flags on the command line. #57134 - The events that were previously only stored in
system.eventlog
are now also directed unconditionally to an external logging channel using a JSON format. Refer to the configuration to see how to customize how events are directed to external sinks. Note that the exact external output format (and thus how to detect/parse the events from e.g. log files) is not yet stabilized and remains subject to change. #57737 - Notable events that pertain to SQL schema, user, and privilege changes are now sent on the new
SQL_SCHEMA
,USER_ADMIN
, andPRIVILEGES
logging channels. These can now be redirected to different sinks from the other log entries.- The
SQL_SCHEMA
channel is used to report changes to the SQL logical schema, excluding privilege and ownership changes (which are reported on the separate channelPRIVILEGES
) and zone config changes (which go toOPS
). This includes:- Database, schema, table, sequence, view, and type creation.
- Adding, removing, and changing table columns.
- Changing sequence parameters.
- More generally, changes to the schema that affect the functional behavior of client apps using stored objects.
- The
USER_ADMIN
channel is typically configured in "audit" mode, with event numbering and synchronous writes. It is used to report changes in users and roles, including:- Users added and dropped.
- Changes to authentication credentials, including passwords, validity, etc.
- Role grants and revocations.
- Role option grants and revocations.
- The
PRIVILEGES
channel is typically configured in "audit" mode, with event numbering and synchronous writes. It is used to report data authorization changes, including:- Privilege grants and revocations on database, objects, etc.
- Object ownership changes. #51987
- The
- Logging events that are relevant to cluster operators are now categorized under the new
OPS
andHEALTH
logging channels. These can now be redirected separately from other logging events.- The
OPS
channel is used to report "point" operational events, initiated by user operators or automation:- Operator or system actions on server processes: process starts, stops, shutdowns, and crashes (if they can be logged). Each event includes any command-line parameters and the CockroachDB version.
- Actions that impact the topology of a cluster: node additions, removals, decommissions, etc.
- Cluster setting changes
- Zone configuration changes.
- The
HEALTH
channel is the channel used to report "background" operational events, initiated by CockroachDB for reporting on automatic processes:- Current resource usage, including critical resource usage.
- Node-node connection events, including connection errors and gossip details.
- Range and table leasing events.
- Up- and down-replication.
- Range unavailability. #57171
- The
- Server terminations that are triggered when a node encounters an internal fatal error are now reported on the
OPS
logging channel. The exact text of the error is not reported on theOPS
channel, however, as it may be complex (e.g., when there is a replica inconsistency); and theOPS
channel is typically monitored by tools that just detect irregularities. The text of the message refers instead to the channel where the additional details can be found. #57171 - The notable events
set_zone_config
andremove_zone_config
are now sent to theOPS
logging channel. #57171 - Added a flag to
cockroach debug decode-proto
to suppress populating default values in fields. #58087 - When a SQL notable (structured) event is logged, the payload now attempts to include the session's
application_name
as fieldApplicationName
. This is intended for use when setting up event routing and filtering in external tools. #58130 - It is now possible to set the
format
parameter of any log sink, including file sinks, tojson
,json-compact
,json-fluent
, orjson-fluent-compact
to write entries as structured JSON. Refer to the generated reference documentation for details. #58126 - The DB Console URL printed by
cockroach demo
now automatically logs in the user when pasted into a web browser. #56740 - The URLs generated when
cockroach demo
starts have been made shorter and easier to copy/paste by shortening the generated password. #58305 - When using the JSON output formats for log entries, the server identifiers are now reported as part of each payload once known (either cluster ID + node ID in single-tenant or KV servers, or tenant ID + SQL instance ID in multi-tenant SQL servers). #58128
- Fixed
cockroach demo --global
from crashing withdidn't get expected magic bytes header
. #58466 - Previously, for certain log files, CockroachDB would both flush individual writes (i.e. propagate them from within the
cockroach
process to the OS) and also synchronize writes (i.e. ask the OS to confirm the log data was written to disk). Per-write synchronization was found to be unnecessary and possibly detrimental to performance and operating cost, so it was removed. Now, the log data continues to be flushed, as before, and CockroachDB only requests synchronization periodically (every 30s). #58995 - The parameter
sync-writes
for file sink configurations has been removed. (This is not a backward-incompatible change because the configuration feature is new in v21.1.) #58995 - The parameter
buffered-writes
for file sink configurations has been added. It is set totrue
(writes are buffered) by default and set tofalse
(i.e. avoid buffering and flush every log entry) when theauditable
flag is requested. #58995 - The default output format for
file-group
andstderr
sinks has been changed tocrdb-v2
. This new format is non-ambiguous and makes it possible to reliably parse log files. Refer to the format's documentation for details. Additionally, it prevents single log lines from exceeding a large size; this problem is inherent to thecrdb-v1
format and can preventcockroach debug zip
from retrievingv1
log files. The new format has also been designed so that existing log file analyzers for thecrdb-v1
format can read entries written the new format. However, this conversion may be imperfect. Refer to the new format's documentation for details. In case of incompatibility, users can force the previous format by usingformat: crdb-v1
in their logging configuration. #59087
API endpoint changes
- The notable event
create_statistics
is only reported when the cluster settingsql.stats.post_events.enabled
is enabled. This fact is now also reported in the event log reference documentation. #57877 - The
Timestamp
field of structured notable events is now numeric, and encodes a number of nanoseconds since the Unix epoch. #58070 - The Health API now checks that the SQL server is ready to accept clients when a readiness check is requested. #59350
DB Console changes
- Minor style changes to represent new branding palette. #57130
- Changed the default per-page value on the Transactions page to 20; minor style updates. #57824
- Added a timeseries graph indicating statement denials due to feature flags on the SQL Dashboard of DB Console. #57533
- Updated labels on the Hardware Dashboard to be more accurate. #57224
- Updated the link back to Statements from Statement Details so that it will always link to the Statements list instead of invoking the "back" action on the browser. #57975
- On the Sessions page, every
age
label has been replaced withduration
and everytxn
label has been replaced withtransaction
. The actual metrics remain unchanged. #58616 - Renamed the
CPUs
metric column tovCPUs
in the Node List on the Cluster Overview page. #58495 - Added Open SQL Transactions to the SQL Dashboard and renamed
SQL Queries
toSQL Statements
. Removed references to "Distributed SQL Queries" when metrics really are discussing all SQL queries. #57477
Bug fixes
- Fixed a bug in
RESTORE
where some unusual range boundaries in interleaved tables caused an error. #58219 - Previously, CockroachDB would encounter an internal error when performing a
JSONB - String
operation via the vectorized execution engine. This has been fixed. The bug was introduced in v20.2.0. #57349 - Previously, in rare situations, an automated replication change could result in a loss of quorum. This was possible when a cluster had down nodes and a simultaneous change in replication factor. Note that a change in the replication factor can occur automatically if the cluster is comprised of fewer than five available nodes. Experimentally the likelihood of encountering this issue, even under contrived conditions, was small. #56735
- Fixed an internal error when using aggregates and window functions in an
ORDER BY
for aUNION
orVALUES
clause. #57498 DROP TYPE
and certain other statements that work over SQL scalar types now properly support type names containing special characters. #57354- Fixed a performance regression introduced in v20.2 to reading virtual tables which introspect the schema. #57542
- Removed
system.jobs
full table scan that is expensive in the face of many completed jobs. #57587 - In v20.2.0 we mistakenly permitted users with the
admin
role to drop tables in the system database. This commit revokes that privilege. #57568 - Previously, users could not perform a cluster restore from old backup chains (incrementals on top of fulls) when using the
BACKUP INTO
syntax. #57656 - Fixed a bug that could cause
IMPORT
to incorrectly read files stored on Google Cloud if uploaded using its compression option (gsutil -Z
). #57745 - Fixed a bug where
ST_MakeLine
andST_Collect
did not respect ordering when used over a window clause. #57724 - Fixed a bug where schema change jobs to add foreign keys to existing tables, via
ALTER TABLE
, could sometimes not be successfully reverted (either due to being canceled or having failed). #57598 - Fixed a bug where concurrent addition of a foreign key constraint and drop of a unique index could cause the foreign key constraint to be added with no unique constraint on the referenced columns. #57598
- Adding a primary key constraint to a table without a primary key no longer ignores the name specified for the primary key. #57146
- Previously, when displaying replica counts during the decommissioning process, we were overcounting the replicas displayed for r1. This is no longer the case. #57812
- Fixed a bug whereby tables in schemas other than
public
would not be displayed when runningSHOW TABLES FROM <db>
. #57749 - Fixed a bug where canceled queries reading from virtual tables could cause a crashing panic. #57828
- Fixed an assertion error caused by some DDL statements used in conjunction with common table expressions (
WITH
). #57927 - Previously,
SHOW GRANTS ON DATABASE
did not include privileges that were granted on a database. Now it does. TheSHOW GRANTS ON DATABASE
output no longer includes a column forschema_name
, as these grants are not specific to any schema. #56866 - The
information_schema.schema_privileges
table now includes the correct schema-level privileges for non-user-defined schemas. Previously, all of these schemas were ommitted from the table. #56866 - The
has_schema_privilege
builtin function now works on user-defined schemas when checking for theUSAGE
privilege. #56866 - The
ST_FrechetDistance
builtin function no longer causes aSIGFPE
panic for very small values ofdensifyFrac
(e.g., 1e-20), and returns an error instead. #57966 - CockroachDB now removes a node's status entry when the node is decommissioned, to prevent it from appearing in API calls and UIs, and prevent it from affecting node constraints such as localities and attributes for various operations. #56529
- Fixed a bug which caused type information to be omitted when decoding descriptors using either
crdb_internal.pb_to_json
orcockroach debug decode-proto
. #58087 - Fixed a bug from v21.1.0-alpha.1 where the binary could crash if a running node lost its claim to a job while updating. #58161
- Fixed a bug where multiple invocations of
AddGeometryColumn
affecting the same table would result in only the last invocation applying. #56663 - Previously, CockroachDB could return non-deterministic output when querying the
information_schema.statistics
virtual table (internally used bySHOW INDEXES
)—namely, the implicit columns of the secondary indexes could be in arbitrary order. This is now fixed, and the columns will be in the same order as they are in the primary index. #58191 - Fixed a
column family 0 not found
crash caused by explaining or gathering statement diagnostics on certain queries involving virtual tables. #58208 - Added a safeguard against crashes while running
SHOW STATISTICS USING JSON
, which is used internally for statement diagnostics andEXPLAIN ANALYZE (DEBUG)
. #58221 - Fixed a bug where prior schema changes on a table that failed and could not be fully reverted could prevent the table from being dropped. #57836
- Previously, CockroachDB could crash when performing a
DELETE
operation after an alteration of the primary key when in some cases. This is now fixed. The bug was introduced in v20.1. #58153 - Fixed a bug that could cause incremental backups to a backup in a collection (i.e.,
BACKUP INTO ... IN ...
) on some cloud storage providers to ignore existing incremental backups previously appended to that destination and instead backup incrementally from the base backup in that destination. #58292 - Fixed an internal panic when using the
SHOW STATISTICS USING JSON
statement on a table containingENUM
types. #58251 - A memory leak in the optimizer has been fixed. The leak could have caused unbounded growth of memory usage for a session when planning queries on tables with partial indexes. #58306
- Fixed a bug where primary key changes on tables being watched by changefeeds would be silently ignored. #58140
- The
pg_catalog
metadata tables were using theCHAR
data type for single-byte character columns. Now they use thechar
data type, to match PostgreSQL. This resolves errors that would occur when using some drivers (liketokio-postgres
for Rust) to accesspg_catalog
tables in the binary query format. #58084 - Prepared statements that include enums and use the binary format will no longer result in an error. #58043
- Fixed an internal error that could occur when executing prepared statements with placeholders that delete data from columns referenced by a foreign key with
ON DELETE CASCADE
. #58431 - Fixed a bug which caused errors when querying a table with a disjunctive filter (an
OR
expression) that is the same or similar to the predicate of one of the table's partial indexes. #58434 - Previously, in event log entries for
ALTER TYPE
andDROP TYPE
statements, theTypeName
field did not contain fully qualified names. #58257 - A
CREATE TABLE
statement with indexes with duplicate names will no longer result in an assertion failure. This bug was present since v20.2. #58433 - Previously, event logs were not capturing the qualified table names for
COMMENT ON INDEX
andCOMMENT ON COLUMN
commands. This PR changes the event logs to use the qualified table name. Tests were also added for these changes. #58472 - The
has_${OBJECT}_privilege
built-in methods such ashas_schema_privilege
now additionally check whether the roles of which a user is a direct or indirect member also have privileges on the object. Previously only one user was checked, which was incorrect. This bug has been present since v2.0 but became more prominent in v20.2 when role-based access control was made available in the core version of CockroachDB. #58254 - CockroachDB previously would return an internal error when attempting to execute a hash join on a JSON column via the vectorized engine. Now a more user-friendly error is returned. #57994
- Fixed a panic in protobuf decoding. #58716
- The user authentication flow no longer performs extraneous name lookups. This performance regression was present since v20.2. #58671
- CockroachDB could previously return an internal error when evaluating a binary expression between a Decimal and an Interval that required a cast to a Float when the value is out of range. A more user-friendly error is now returned instead. #58743
- Qualified table name for
alter_table_owner
event log. #58504 - Fixed a bug that caused errors when accessing a tuple column (
tuple.column
syntax) of a tuple that could be statically determined to be null. #58747 - The
indoption
column inpg_catalog.index
is now populated correctly. #58947 - Previously, CockroachDB could encounter an internal error when executing queries with tuples containing null values and enums in a distributed setting. This is now fixed. #58894
- Fixed a nil pointer panic edge case in query setup code. #59002
- Non-ASCII characters in
NAME
results incockroach sql
/demo
(e.g., in the resultsSHOW TABLES
, SHOW CONSTRAINTS) are now displayed without being escaped to octal codes. #56630 - Garbage collection (GC) jobs now populate the
running_status
column forSHOW JOBS
. This bug has been present since v20.1. #58612 - Previously, CockroachDB could encounter an internal error when executing queries with
BYTES
orSTRING
types via the vectorized engine in rare circumstances. This is now fixed. #59028 - Previously, the
substring
function on byte arrays would treat its input as unicode code points, which would cause the wrong bytes to be returned. Now it only operates on the raw bytes. #58265 - Previously, the
substring(byte[])
functions were not able to interpret bytes that had the\
character since it was being treated as the beginning of an escape sequence. This is now fixed. #58265 - Fixed a bug in which some non-conflicting rows provided as input to an
INSERT ... ON CONFLICT DO NOTHING
statement could be discarded, and not inserted. This could happen in cases where the table had one or more unique indexes in addition to the primary index, and some of the rows in the input conflicted with existing values in one or more unique index. This scenario could cause the rows that did not conflict to be erroneously discarded. This has now been fixed. #59147 - Fixed an internal error that could occur when
ARRAY[NULL]
was used in a query due to incorrect typing.ARRAY[NULL]
is now typed asstring[]
if the type cannot be otherwise inferred from the context. This is the same logic that PostgreSQL uses, thus improving compatibility in addition to fixing the internal error. #59136 - Fix a slow / hanging query that can be caused by using large
max_decimal_digits
onST_AsGeoJSON
. #59165 - Queries that attempt to retrieve just the key columns of a single system table row will no longer return erroneous values. #58659
- Fixed a bug in URL handling of HTTP external storage paths on Windows. #59216
- Previously, CockroachDB could crash when executing
ALTER INDEX ... SPLIT/UNSPLIT AT
when more values were provided than are explicitly specified in the index. This has been fixed. #59213 - Fixed a bug where multi-tenancy SQL pods would not successfully initialize the GEOS library. #59259
- Placeholder values are now included alongside statements in structured events. #59110
- Added qualification prefix for user-defined schema names in event logs. #58617
- Added qualification prefix for dropped views in event logs. #59058
- Parsing errors are no longer thrown when importing a
pgdump
file with array data. #58244 - Fixed a crash when creating backup schedules writing to GCS buckets. #57617
- CockroachDB now correctly exports
schedules_BACKUP_*
metrics as well as backup RPO metrics. #57488
Performance improvements
- Previously, CockroachDB when performing an unordered
DISTINCT
operation via the vectorized execution engine would buffer up all tuples from the input, which is a suboptimal behavior when the query has aLIMIT
clause. This has now been fixed. This behavior was introduced in v20.1. Note that the row-by-row engine doesn't have this issue. #57579 - The query optimizer can use filters that constrain columns to multiple constant values to generate lookup joins. For example, a join filter
x.a = y.a AND y.b IN (1, 2)
can be used to generate a lookup join on tabley
assuming that it has an index on(a, b)
or(b, a)
. #57690 - The query optimizer now explores plans with lookup joins on partitioned indexes, resulting in more efficient query plans in some cases. #57690
- Potentially improved performance for
UPDATE
statements where the table has computed columns that don't depend on updated columns. #58188 - CockroachDB now allows the storage engine to compact
sstables
based on reads, on read-heavy workloads. #58247 - Partial indexes with
IS NOT NULL
predicates can be used in cases whereJOIN
filters implicitly imply the predicate. This results in more efficient query plans forJOIN
s and foreign checks. #58204 - Queries that use a geospatial inverted index can now take advantage of vectorized execution for some parts of the query plan, resulting in improved performance. #58241
- Previously, indexed columns of partial indexes were always fetched for
UPDATE
s andUPSERT
s. Now they are only fetched if they are required for maintaining the state of the index. If anUPDATE
orUPSERT
mutates columns that are neither indexed by a partial index nor referenced in a partial index predicate, they will no longer be fetched (assuming that they are not needed to maintain the state of other indexes, including the primary index). #58358 UPDATE
operations on tables with partial indexes no longer evaluate partial index predicate expressions when it is guaranteed that the operation will not alter the state of the partial index. In some cases, this can eliminate fetching the existing value of columns that are referenced in partial index predicates. #58358- The
sum_int
aggregate function is now evaluated more efficiently in a distributed setting. #58345 INSERT ... ON CONFLICT ... DO NOTHING
statements now use anti-joins for detecting conflicts. This simplifies the query plan for these statements, which may result in more efficient execution. #58679- Improved the accuracy of histogram calculations for the following types:
string
/uuid
/inet
family. Additionally, support fortime
/timetz
histogram calculations was also added. This improves optimizer's estimates and results in better query plans in certain instances. #55797 - The optimizer now uses collected histogram statistics to better estimate the cost of JSON and ARRAY inverted index scans, which may lead to more efficient query plans. #59326
Build changes
- CockroachDB now builds on Ubuntu 20.10 and other distros using
gcc-10
. #58895
Doc updates
- The types of logging sinks available through configuration are now automatically documented. #59083
- The various output formats available for logging configurations are now documented. See the generated reference documentation for details. #58075
- The cluster event logging system has been standardized. Reference documentation is now available (auto-generated from source code); changes to non-reserved payloads will now be announced at least one release version in advance. The event types are organized into broad categories: SQL Logical Schema Changes, SQL Privilege Changes, SQL User Management, CLuster-level events and SQL Miscellaneous operations. #57737
- A report of the possible logging severities and channels is now automatically generated. #57134
Contributors
This release includes 615 merged PRs by 85 authors. We would like to thank the following contributors from the CockroachDB community:
- Alan Acosta (first-time contributor)
- ArjunM98
- Azdim Zul Fahmi
- Cheng Jing (first-time contributor)
- Cyrus Javan
- Erik Grinaker
- Javier Fernandez-Ivern (first-time contributor)
- Kumar Akshay (first-time contributor)
- Maciej Rzasa (first-time contributor)
- Marcin Knychała
- Max Neverov
- Miguel Novelo (first-time contributor)
- Omar Bahareth (first-time contributor)
- Petr Jediný
- Ruixin Bao
- Saif Al-Harthi (first-time contributor)
- Vaibhav
- Yanxin (first-time contributor)
- b41sh (first-time contributor)
- mosquito2333 (first-time contributor)
- neeral