CockroachDB v19.1 is a required Regular Release.
Refer to Major release types before installing or upgrading for release timing and support details.
On this page, you can read about changes and find downloads for all production and testing releases of CockroachDB v19.1
For key feature enhancements in v19.1 and other upgrade considerations, refer to the notes for v19.1.0.
For details about release types, naming, and licensing, refer to the Releases page.
Be sure to also review the Release Support Policy.
After downloading a supported CockroachDB binary, learn how to install CockroachDB or upgrade your cluster.
Get future release notes emailed to you:
v19.1.11
Release Date: July 7, 2020
Cockroach Labs has discovered a bug relating to incremental backups, for CockroachDB v19.1.0 - v19.1.11. If a backup coincides with an in-progress index creation (backfill), RESTORE, or IMPORT, it is possible that a subsequent incremental backup will not include all of the indexed, restored or imported data.
For more information, including other affected versions, see Technical Advisory 63162.
Bug fixes
Contributors
This release includes 1 merged PR by 1 author.
v19.1.10
Release Date: June 29, 2020
Cockroach Labs has discovered a bug relating to incremental backups, for CockroachDB v19.1.0 - v19.1.11. If a backup coincides with an in-progress index creation (backfill), RESTORE, or IMPORT, it is possible that a subsequent incremental backup will not include all of the indexed, restored or imported data.
For more information, including other affected versions, see Technical Advisory 63162.
Security updates
Bug fixes
- Previously, HTTP requests would start to fail with error 503 "
transport: authentication handshake failed: io: read/write on closed pipe" and never become possible again until restarting the node. This has been fixed. This bug has existed since v2.1 or earlier. #48483 - Previously, when the value passed to
--drain-waitwas very small, but non-zero,cockroach quitin certain cases would not proceed to perform a hard shutdown. This has been corrected. This bug was present in v19.1.9, v19.2.7, and v20.1.1. #49365 - Fixed a RocksDB bug that could result in inconsistencies in rare circumstances. #50510
Build changes
- Release Docker images are now built on Debian 9.12. #50480
Doc updates
- Updated guidance on node decommissioning. #7304
- Renamed "whitelist/blacklist" terminology to "allowlist/blocklist". #7535
- Updated the Releases navigation in the sidebar to expose the latest Production and Testing releases. #7550
- Fixed scrollbar visibility on Chrome. #7487
Contributors
This release includes 10 merged PRs by 6 authors. We would like to thank the following contributors from the CockroachDB community:
- Drew Kimball (first-time contributor, CockroachDB team member)
- Jackson Owens (first-time contributor, CockroachDB team member)
- James H. Linder (first-time contributor, CockroachDB team member)
v19.1.9
Release Date: May 12, 2020
This page lists additions and changes in v19.1.9 since v19.1.8.
- For a comprehensive summary of features in v19.1, see the v19.1 GA release notes.
- To upgrade to v19.1, see Upgrade to CockroachDB v19.1
Cockroach Labs has discovered a bug relating to incremental backups, for CockroachDB v19.1.0 - v19.1.11. If a backup coincides with an in-progress index creation (backfill), RESTORE, or IMPORT, it is possible that a subsequent incremental backup will not include all of the indexed, restored or imported data.
For more information, including other affected versions, see Technical Advisory 63162.
Backward-incompatible changes
- Previously, the phase of server shutdown responsible for range lease transfers to other nodes would give up after 10,000 attempts of transferring replica leases away, regardless of the value of
server.shutdown.lease_transfer_wait. The limit of 10,000 attempts has been removed, so that now only the maximum durationserver.shutdown.lease_transfer_waitapplies. #47698 - The textual error and warning messages displayed by
cockroach quitunder various circumstances have been updated. Meanwhile, the message "ok" remains as indicator that the operation has likely succeeded. #47698 cockroach quitnow prints out progress details on its standard error stream, even when--logtostderris not specified. Previously, nothing was printed on standard error. Scripts that wish to ignore this output can redirect thestderrstream. #47698
Security updates
- Non-licensed users are now able to add more principals to the special superuser role/group
admin. Note: Creation of additional roles is still a licensed feature. #45396
General changes
- Previously, the phase of server shutdown responsible for range lease transfers to other nodes had a hard timeout of 5 seconds. This patch makes this timeout configurable via the new cluster setting
server.shutdown.lease_transfer_wait. #47698
SQL language changes
- It is now possible to use
GRANTandREVOKEto add users to theadminrole without a valid license. This change aims to enable use of the Admin UI and other privileged features without a license. #45396 - The type checking code now prefers aggregate overloads with string inputs if there are multiple possible candidates due to arguments of unknown type. #46902
- Added a new "unimplemented" error when attempting to
ADD CONSTRAINTwith theEXCLUDE USINGsyntax. #46912 - Added support for using
CREATE INDEX ... INCLUDE (col1, col2, ...), which is an alias that PostgreSQL uses that is analogous to ourSTORING (col1, col2, ...)syntax. #46912 - Added support for parsing the
REINDEXsyntax, which results in an "unimplemented" error that explains thatREINDEXing is not required in CockroachDB. #46912 - CockroachDB now parses the
CREATE INDEX CONCURRENTLYandDROP INDEX CONCURRENTLYsyntaxes, which return errors when used. #46808
Command-line changes
cockroach debug zipnow avoids creating invalid zip files if some of its requests encounter an error. #46637- The time that
cockroach quitwaits client-side for the node to drain (remove existing clients and push range leases away) is now configurable via the command-line flag--drain-wait. Note that separate server-side timeouts also apply separately; check theserver.shutdown.*cluster settings for details. #47698 - It is now possible to drain a node without shutting down the process, using
cockroach node drain. This makes it easier to integrate with service managers and orchestration: it now becomes safe to issuecockroach node drainand then separately stop the service via a process manager or orchestrator. Without this new mode, there is a risk to misconfigure the service manager to auto-restart the node after it shuts down viaquit, in a way that's surprising or unwanted. The new commandnode drainalso recognizes the new--drain-waitflag. #47698 - The default value of the parameter
--drain-waitforcockroach quithas been increased from 1 minute to 10 minutes, to give more time for nodes with thousands of ranges to migrate their leases away. #47698 - The commands
cockroach quitandcockroach node drainnow report a "work remaining" metric on their standard error stream. The value reduces until it reaches0, to indicate that the graceful shutdown has completed server-side. An operator can now rely oncockroach node drainto obtain confidence of a graceful shutdown prior to terminating the server process. #47698
Admin UI changes
- Metrics relating to SQL transaction restarts and rollbacks are now properly captured and exported. #46273
Bug fixes
- Fixed a "cannot map variable" error in some rare cases involving joins. #44860
- Fixed incorrect de-duplication of impure expressions (like
gen_random_uuid) in projections and default values. #44916 - Fixed an internal error that could occur when
NULLIFwas called with one null argument. #45391 - It is now possible to create inverted indexes on columns whose names are mixed-case. #45678
- Previously, drivers that did not truncate trailing zeroes for decimals in the binary format ended up having inaccuracies of up to 10^4 during the decode step. Fixed this error by truncating the trailing zeroes as appropriate. This fixes known incorrect decoding cases with Postgrex in Elixir. #45671
- Fixed a name resolution error that could occur when a common table expression (CTE) was referenced in the
SELECTlist of a query using the syntax<cte-name>.<col-name>. #45782 - Previously, CockroachDB could crash when computing window functions with
RANGEmode of framing when one of the bounds was either ofoffset PRECEDINGoroffset FOLLOWINGtype when there wereNULLvalues in the single column fromORDER BYclause. Additionally, inRANGEmode bounds0 PRECEDINGand0 FOLLOWINGcould be handled incorrectly. Now this has been fixed. #45806 - Fixed an internal error that could occur in the optimizer when a
WHEREfilter contained at least one correlated subquery and one non-correlated subquery. #46168 - CockroachDB now properly supports using
--urlwith query options (e.g.,application_name) without specifyingsslmode. The default ofsslmode=disableis assumed in that case. #46480 - Fixed a bug where operations on an index that contained a collated string in descending order would fail. #46579
- Fixed an incorrect query result that could occur when a scalar aggregate was called with a null input. #46902
- Fixed a data race on AST nodes for
SELECTstatements that include aWINDOWclause. It is unclear whether this could have resulted in incorrect results being returned for these queries. #47177 - Fixed incorrect results that could occur when casting negative intervals or timestamps to type decimal. #47524
- Previously, CockroachDB was incorrectly releasing memory used by hash aggregation. This could lead to a crash (which was more likely when hash aggregation had store on the order of 100k of groups) and is now fixed. #47520
- Fixed a bug that could lead to data corruption or data loss if a replica was both the source of a snapshot and was being concurrently removed from the range. This scenario is rare, but possible. #48317
Contributors
This release includes 27 merged PRs by 10 authors.
v19.1.8
Release Date: February 11, 2020
This page lists additions and changes in v19.1.8 since v19.1.7.
- For a comprehensive summary of features in v19.1, see the v19.1 GA release notes.
- To upgrade to v19.1, see Upgrade to CockroachDB v19.1
Cockroach Labs has discovered a bug relating to incremental backups, for CockroachDB v19.1.0 - v19.1.11. If a backup coincides with an in-progress index creation (backfill), RESTORE, or IMPORT, it is possible that a subsequent incremental backup will not include all of the indexed, restored or imported data.
For more information, including other affected versions, see Technical Advisory 63162.
Security updates
- Previous versions of CockroachDB were incorrectly enabling non-admin SQL users to use the statements details in the Admin UI and the HTTP endpoint
/_status/statements. This information is sensitive because the endpoint does not hide data that the requester does not have privilege over. This has been corrected by requiring a SQLadminuser to access the statements details page and the HTTP endpoint. #44355
Admin UI changes
- We previously introduced a fix on the admin UI to prevent non-admin SQL users from executing queries - however, this accidentally made certain pages requiring table details not to display. This error has now been fixed. #44193
Bug fixes
- Fixed a bug where repeated use of
COPY FROM PARENTon an index or partition could cause an unexpected validation error. #44266 - Fixed a planning bug related to
FULLjoins between single-row relations. #44242 - Fixed incorrect plans in very rare cases involving filters that aren't constant folded in the optimizer but that can be evaluated statically when running a given query. #44602
- Fixed "no output column equivalent to.." and "column not in input" errors in some cases involving
DISTINCT ONandORDER BY. [#44598][#44598] - Fixed "expected constant FD to be strict" internal error. #44599
- Fixed a bug where running a query with the
LIKEoperator using the customESCAPEsymbol when the pattern contained Unicode characters could result in an internal error in CockroachDB. #44649 - Fixed possibly incorrect query results in various cornercases, especially when
SELECT DISTINCTis used. #44606 - Fixed an internal error that could happen in the planner when table statistics were collected manually using
CREATE STATISTICSfor different columns at different times. #44443 - CockroachDB no longer repeatedly looks for non-existing jobs, which may cause high memory usage, when cleaning up schema changes. #44824
Contributors
This release includes 12 merged PRs by 9 authors. We would like to thank the following contributors from the CockroachDB community:
- Oliver Tan (first-time contributor, CockroachDB team member)
v19.1.7
Release Date: January 27, 2020
This page lists additions and changes in v19.1.7 since v19.1.6.
- For a comprehensive summary of features in v19.1, see the v19.1 GA release notes.
- To upgrade to v19.1, see Upgrade to CockroachDB v19.1
Cockroach Labs has discovered a bug relating to incremental backups, for CockroachDB v19.1.0 - v19.1.11. If a backup coincides with an in-progress index creation (backfill), RESTORE, or IMPORT, it is possible that a subsequent incremental backup will not include all of the indexed, restored or imported data.
For more information, including other affected versions, see Technical Advisory 63162.
Bug fixes
- Some incorrect issue links referenced to by error hints have been corrected. #43234
- Prevented rare cases of infinite looping on database files written with a CockroachDB version earlier than v2.1.9. #43253
- Changefeeds now emit backfill row updates for a dropped column when the table descriptor drops that column. #43037
EXPLAINcan now be used with statements that useAS OF SYSTEM TIME. #43305- Fixed a bug that caused some jobs to be left indefinitely in a pending state and never run. #43416
- Migrating the privileges on the
system.leasetable no longer creates a deadlock during a cluster upgrade. #43508 - Fixed a bug in the parsing logic for
server.host_based_authentication.configuration, where both single-character strings and quoted strings containing spaces and separated by commas were not properly parsed. This would cause rules for usernames consisting of a single character or usernames containing spaces to apply improperly. #43812 - A SQL row write that is re-issued after already succeeding no longer throws a duplicate key error when the previous write in its transaction deleted the row. #43942
- Fixed a changefeed bug where a resolved timestamp might be published before all events that precede it have been published in the presence of a range merge. #44082
- Converted a panic when using collated strings to an error. #44119
Performance improvements
- A transaction running into multiple intents from an abandoned conflicting transaction now cleans them up more efficiently. #43589
Contributors
This release includes 11 merged PRs by 7 authors.
v19.1.6
Release Date: December 16, 2019
This page lists additions and changes in v19.1.6 since v19.1.5.
- For a comprehensive summary of features in v19.1, see the v19.1 GA release notes.
- To upgrade to v19.1, see Upgrade to CockroachDB v19.1
Cockroach Labs has discovered a bug relating to incremental backups, for CockroachDB v19.1.0 - v19.1.11. If a backup coincides with an in-progress index creation (backfill), RESTORE, or IMPORT, it is possible that a subsequent incremental backup will not include all of the indexed, restored or imported data.
For more information, including other affected versions, see Technical Advisory 63162.
Security updates
CockroachDB previously allowed non-authenticated access to privileged HTTP endpoints like
/_admin/v1/events, which operate usingrootuser permissions and can thus access (and sometimes modify) any and all data in the cluster. This security vulnerability has been patched by disallowing non-authenticated access to these endpoints and restricting access to admin users only.Note:Users who have built monitoring automation using these HTTP endpoints must modify their automation to work using an HTTP session token for an admin user.
Some Admin UI screens (e.g., Jobs) were previously incorrectly displayed using
rootuser permissions, regardless of the logged-in user's credentials. This enabled insufficiently privileged users to access privileged information. This security vulnerability has been patched by using the credentials of the logged-in user to display all Admin UI screens.Privileged HTTP endpoints and certain Admin UI screens require an admin user. However,
rootis disallowed from logging in via HTTP and it is not possible to create additional admin accounts without an Enterprise license. This is further discussed here and will be addressed in an upcoming patch revision.Note:Users without an Enterprise license can create an additional admin user using a temporary evaluation license, until an alternative is available. A user created this way will persist beyond the license expiry.
Some Admin UI screens currently display an error or a blank page when viewed by a non-admin user (e.g., Table Details). This is a known limitation mistakenly introduced by the changes described above. This situation is discussed further here and will be addressed in an upcoming patch revision. The list of UI pages affected includes but is not limited to:
- Job details
- Database details
- Table details
- Zone configurations
Note:Users can access these Admin UI screens using an admin user until a fix is available.
The list of HTTP endpoints affected by the first change above includes:
| HTTP Endpoint | Description | Sensitive information revealed | Special (see below) |
|---|---|---|---|
/_admin/v1/data_distribution |
Database-table-node mapping | Database and table names | |
/_admin/v1/databases/{database}/tables/{table}/stats |
Table stats histograms | Stored table data via PK values | |
/_admin/v1/drain |
API to shut down a node | Can cause DoS on cluster | |
/_admin/v1/enqueue_range |
Force range rebalancing | Can cause DoS on cluster | |
/_admin/v1/events |
Event log | Usernames, stored object names, privilege mappings | |
/_admin/v1/nontablestats |
Non-table statistics | Stored table data via PK values | |
/_admin/v1/rangelog |
Range log | Stored table data via PK values | |
/_admin/v1/settings |
Cluster settings | Organization name | |
/_status/allocator/node/{node_id} |
Rebalance simulator | Can cause DoS on cluster | yes |
/_status/allocator/range/{range_id} |
Rebalance simulatoor | Can cause DoS on cluster | yes |
/_status/certificates/{node_id} |
Node and user certificates | Credentials | |
/_status/details/{node_id} |
Node details | Internal IP addresses | |
/_status/enginestats/{node_id} |
Storage statistics | Operational details | |
/_status/files/{node_id} |
Retrieve heap and goroutine dumps | Operational details | yes |
/_status/gossip/{node_id} |
Gossip details | Internal IP addresses | yes |
/_status/hotranges |
Ranges with active requests | Stored table data via PK values | |
/_status/local_sessions |
SQL sessions | Cleartext SQL queries | yes |
/_status/logfiles/{node_id} |
List of log files | Operational details | yes |
/_status/logfiles/{node_id}/{file} |
Server logs + entries | Many: names, application data, credentials, etc. | yes |
/_status/logs/{node_id} |
Log entries | Many: names, application data, credentials, etc. | yes |
/_status/profile/{node_id} |
Profiling data | Operational details | |
/_status/raft |
Raft details | Stored table data via PK values | |
/_status/range/{range_id} |
Range details | Stored table data via PK values | |
/_status/ranges/{node_id} |
Range details | Stored table data via PK values | |
/_status/sessions |
SQL sessions | Cleartext SQL queries | yes |
/_status/span |
Statistics per key span | Whether certain table rows exist | |
/_status/stacks/{node_id} |
Stack traces | Application data, stored table data | |
/_status/stores/{node_id} |
Store details | Operational details |
"Special" endpoints are subject to the cluster setting server.remote_debugging.mode. Unless the setting was customized, clients are only able to connect from the same machine as the node.
SQL language changes
EXPLAIN (OPT,ENV)now returns a URL with the data encoded in the fragment portion. Opening the URL shows a page with the decoded data. Note that the data is processed in the local browser session and is never sent out. #41092EXPLAIN ANALYSEcan now be used as an alias toEXPLAIN ANALYZE. #41093- Mutations under
UNIONorUNION ALLare now disallowed. This restriction is temporary and will be lifted in a future release. #41496
Admin UI changes
- Certain web UI pages (like the list of databases or tables) now restrict their content to match the privileges of the logged-in user. #42727
- The event log now presents all cluster settings changes, unredacted, when an admin user uses the page. #42727
- Customization of the UI by users is now only properly saved if the user has write privilege to
system.ui(i.e., is an admin user). Also, all authenticated users share the same customizations. This is a known limitation and should be lifted in a future version. #42727 - Access to table statistics are temporarily blocked from access by non-admin users until further notice, for security reasons. #42727
- Certain debug pages have been blocked from non-admin users for security reasons. #42727
Bug fixes
- The experimental cloud storage changefeed sink previously violated some of the changefeed invariants under rare conditions. A number of these have been fixed, but some fixes require changes to the format of the filenames output by the cloud storage changefeed. This is unsuitable for inclusion in a patch release, so users of cloud storage changefeed sinks are highly encouraged to upgrade to CockroachDB 19.2 or later. #42907
- Fixed a crash that occurs when a suboperator with a
LIKEcomparison has a NULL left-hand side. #41073 - Reduced write amplification by avoiding forcing files through compactions unnecessarily. #41301
- Fixed a rare data corruption bug in RocksDB caused by newer Linux kernel's handling of i_generation on certain file systems. #41393
- Fixed a bug causing the
cluster_logical_timestamp()function to sometimes return incorrect results. #41441 - Fixed internal errors generated during the execution of some complicated cases of correlated subqueries. #41667
- Fixed a bug causing zone configuration changes on tables with existing index zone configurations to not take effect unless the
num_replicasfield was also set. #41682 - Fixed bug causing zone configuration application on indexes to leak into configurations on partitions. #41679
- Fixed multiple bugs relating to zone configurations and
COPY FROM PARENT. Previously,COPY FROM PARENTwas ignored when using it on partitions and indexes, and when using it on a zone that had an existing value for the field that was being changed. #41699 - Fixed a bug causing rapid network disconnections to lead to cluster unavailability because goroutines waited for a connection which will never be initialized to send its first heartbeat. #42165
- Fixed an internal error in a rare case involving
UNIONand tuples insideVALUESclauses. #42266 - CockroachDB now permits planning of window functions within mutation statements, and other statements that cannot be distributed. #42617
- Fixed a bug that would produce a spurious failure with the error message "incompatible COALESCE expressions" when adding or validating
MATCH FULLforeign key constraints involving composite keys with columns of differing types. #42652 - Fixed a case where we incorrectly determine that a query (or part of a query) which contains an
IS NULLconstraint on a unique index column returns at most one row, possibly ignoring aLIMIT 1clause. #42792 - It is now possible to transfer range leases to lagging replicas. #42764
ALTER INDEX IF EXISTSno longer fails when using an unqualified index name that does not match any existing index. Now it is a no-op. #42839- CockroachDB now prevents a number of panics from the SQL layer caused by an invalid range split. These would usually manifest with messages mentioning encoding errors ("found null on not null column" but also possibly various others). #42860
- Other callers to
acquireNodeLeasewill not get erroneously cancelled just because the context of the first caller was cancelled. #43028 - Fixed a bug in poller causing it to emit row updates at a timestamp less than or equal to an already forwarded resolved timestamp. #43027
- Fixed a bug in cloud storage sink file naming that violates ordering in presence of a schema changes. #43027
- Fixed a bug causing disk stalls to allow a node to continue heartbeating its liveness record and prevent other nodes from taking over its leases, despite being completely unresponsive. #41765
- CockroachDB now properly removes excess secondary log files (SQL audit logging, statement execution logging, and RocksDB events). #41034
cockroach debug zip,cockroach nodeandcockroach usernow work properly if thedefaultdbdatabase has been manually dropped and the connection URL does not specify a database. #41131
Contributors
This release includes 34 merged PRs by 19 authors.
v19.1.5
Release Date: September 30, 2019
This page lists additions and changes in v19.1.5 since v19.1.4.
- For a comprehensive summary of features in v19.1, see the v19.1 GA release notes.
- To upgrade to v19.1, see Upgrade to CockroachDB v19.1
Cockroach Labs has discovered a bug relating to incremental backups, for CockroachDB v19.1.0 - v19.1.11. If a backup coincides with an in-progress index creation (backfill), RESTORE, or IMPORT, it is possible that a subsequent incremental backup will not include all of the indexed, restored or imported data.
For more information, including other affected versions, see Technical Advisory 63162.
SQL language changes
- Add
check_constraintstable to theinformation_schema. #39688
Bug fixes
- Unary negatives in constant arithmetic expressions are no longer ignored. #39367
- Propagate zone configuration to non-gossiped system tables. #39691
- Prevent unlimited memory usage during SQL range deletions. #39733
- A crash caused by the presence of window functions in the source of the
CREATE TABLE ASstatement is fixed. #40430 - Fix a planning error that could occur when a common table expression with an
ORDER BYwas used inside of a subquery. #40490 - Fixed an optimizer panic when building array access expressions. #40513
- Fix bug where an MVCC value at a future timestamp is returned after a transaction restart. #40611
- Consider intents in a read's uncertainty interval to be uncertain just as if they were committed values. This removes the potential for stale reads when a causally dependent transaction runs into the not-yet resolved intents from a causal ancestor. #40611
- Prevent problems on mixed-version 19.1 clusters that are also performing a lookup join on a table that has an ongoing index backfill. #40739
- The
cockroachCLI client commands are now able to connect to a server via the environment variableCOCKROACH_URL. #40848 - Fix a crash in apply joins. #40829
- Detailed crash reports ("panic messages") could previously be reported in the wrong file, if SQL audit reporting or statement logging had been activated. This has been corrected and crash reports will now properly always appear in the main log file. #40942
Contributors
This release includes 14 merged PRs by 10 authors.
v19.1.4
Release Date: August 13, 2019
This page lists additions and changes in v19.1.4 since v19.1.3.
- For a comprehensive summary of features in v19.1, see the v19.1 GA release notes.
- To upgrade to v19.1, see Upgrade to CockroachDB v19.1
Cockroach Labs has discovered a bug relating to incremental backups, for CockroachDB v19.1.0 - v19.1.11. If a backup coincides with an in-progress index creation (backfill), RESTORE, or IMPORT, it is possible that a subsequent incremental backup will not include all of the indexed, restored or imported data.
For more information, including other affected versions, see Technical Advisory 63162.
Enterprise edition changes
- The new
skip_missing_viewsoption forRESTOREskips restoring views that cannot be restored because their dependencies are not being restored at the same time. #38773
SQL language changes
- CockroachDB now ignores non-fatal errors updating jobs during
DROP TABLE. #38821 - The first statement of a transaction no longer returns a transaction retry error if it is an
UPDATEorDELETE(this was already true forINSERT). #39087
Bug fixes
- Fixed a bug that prevented inverted indexes from being created on
JSONBcolumns containingNULLvalues. #38747 - Ranges consisting of only one row (and historical versions of that row) are now correctly up-replicated. #38588
- Fixed a planning error that caused valid queries to fail with the error "rowCount passed in was too small". #38793
- Fixed incorrect results, or "unordered span" errors, in some cases involving exclusive inequalities with non-numeric types. #38896
- Fixed a bug in the cost-based optimizer causing a bad index for lookup joins in some cases. #39028
- Fixed a potential infinite loop in queries involving reverse scans. #39101
UPSERTs planned by the cost-based optimizer that use lookup joins run during column mutations on the table being updated no longer cause crashes or other issues. #38917crdb_internal.rangescan now be used inside views. Note that such views can become invalid in future releases ifcrdb_internal.rangeschanges. #39213
Contributors
This release includes 15 merged PRs by 11 authors.
v19.1.3
Release Date: July 15, 2019
This page lists additions and changes in v19.1.3 since v19.1.2.
- For a comprehensive summary of features in v19.1, see the v19.1 GA release notes.
- To upgrade to v19.1, see Upgrade to CockroachDB v19.1
Cockroach Labs has discovered a bug relating to incremental backups, for CockroachDB v19.1.0 - v19.1.11. If a backup coincides with an in-progress index creation (backfill), RESTORE, or IMPORT, it is possible that a subsequent incremental backup will not include all of the indexed, restored or imported data.
For more information, including other affected versions, see Technical Advisory 63162.
Bug fixes
- Fixed help text that erroneously labeled Encryption at Rest as experimental. #38237
- Fixed an incorrect type mismatch error when empty
ARRAYvalues are used asDEFAULTvalues (and potentially in other contexts). #38300 - Fixed a panic that could occur when decoding decimals as query parameters. #38330
NULLs are now correctly handled byMIN,SUM, andAVGwhen used as window functions. #38356- Fixed an issue that prevented restoring some backups if they included tables that were partitioned by columns of a certain types while also interleaved by child tables. #38494
- Fixed possible deadlock when storage engine write fails. #38478
- Fixed potential reappearance of deleted timeseries data, which could trip the consistency checker. #38478
- Removed dependency on
sync_file_rangeon Linux platforms on which it returns ENOSYS, such as WSL (Windows Subsystem for Linux). #38478 - Nodes that have been down now recover quicker when they rejoin, assuming they weren't down for much more than the value of the
server.time_until_store_deadcluster setting (which defaults to 5 minutes). #38642 - Checking the "skip should queue" checkbox in the Manual Enqueue Range advanced debuggging page now works for the GC Queue. #38296
- The YCSB workload no longer ignores the
--dboption. #38238 - Fixed the auto-retry counter in stats and now logs it in the statement/audit logs. #38035
Security improvements
- Only check
CommonNameon first certificate in file. #38165
Doc updates
- Added the Build a Python app with Kubernetes on CockroachCloud tutorial for running a Python app on a CockroachCloud cluster using a local Kubernetes cluster. #4918
- Expanded the recommended Topology Patterns for running CockroachDB in a cloud environment, each with required configurations and latency and resiliency characteristics. #4820
- Made the Java code samples in Build a Java App with CockroachDB simpler and more idiomatic. #4855
- Documented what happens when a node runs out of disk space and how to create a ballast file to prepare for this case. #5000
Contributors
This release includes 17 merged PRs by 14 authors.
v19.1.2
Release Date: June 17, 2019
This page lists additions and changes in v19.1.2 since v19.1.1.
- For a comprehensive summary of features in v19.1, see the v19.1 GA release notes.
- To upgrade to v19.1, see Upgrade to CockroachDB v19.1
Cockroach Labs has discovered a bug relating to incremental backups, for CockroachDB v19.1.0 - v19.1.11. If a backup coincides with an in-progress index creation (backfill), RESTORE, or IMPORT, it is possible that a subsequent incremental backup will not include all of the indexed, restored or imported data.
For more information, including other affected versions, see Technical Advisory 63162.
Enterprise edition changes
- You can now alter the zone configuration for a secondary index partition using the syntax
ALTER PARTITION OF INDEX <tablename>@<indexname> CONFIGURE ZONE .... #36883
Bug fixes
- CockroachDB now computes the result of shifting bit arrays to the right properly and avoids generating invalid bit arrays. #36751
SHOW ZONE CONFIGURATIONno longer emits invalidALTERsyntax in its output when displaying the zone configuration for a table or index partition that is inheriting from the database or the default configuration. #36883SHOW ZONE CONFIGURATION FOR TABLE t PARTITION pno longer ignores the clausePARTITION pand now properly displays the zone configuration for that partition instead. #36883- Automated table statistics no longer encounter "batch timestamp must be after replica GC threshold" errors on configurations with low TTL. #37588
- Fixed type inference of columns in subqueries for some expressions of the form
scalar IN (subquery). #37598 - Fixed a panic when constructing the error message for an invalid partitioning. #37703
- Fixed a potential source of (faux) replica inconsistencies that can be reported while running a mixed v19.1 / v2.1 cluster. This error (in that situation only) is benign and can be resolved by upgrading to the latest v19.1 patch release. Every time this error occurs, a "checkpoint" is created which will occupy a large amount of disk space and which needs to be removed manually (see
<store directory>/auxiliary/checkpoints). #37722 - Fixed a case in which
cockroach quitwould return successfully even though the server process was still running in a severely degraded state. #37722 - Fixed incorrect results or "incorrectly ordered stream" errors in response to some queries with aggregations, and improved the
EXPLAINoutput for aggregations. #37792 - A
NULLright operand now causes the sub-operator expression to returnNULL. #37886 - The
age()function is now correctly marked as impure, causing it to be unavailable in certain contexts. #37922 - Certain binary encodings of numeric/decimal values no longer result in values that are an order of magnitude off. #37921
- Fixed a race condition that could cause a panic during query planning. #37974
- Fixed
GROUP BYfor empty arrays. #37940 - Fixed a bug when estimating result set sizes in the optimizer that caused queries involving very large integer ranges to have poor plans. #38038
- The
cockroachcommands that internally use a RPC connection (e.g.,cockroach quit,cockroach init, etc.) once again properly support passing an IPv6 address literal via the--hostargument. #37982 - The
cockroach initcommand will now always properly report when a cluster is already initialized, even after the node that it's connecting to is restarted. #37593
Security improvements
- Stack memory used by CockroachDB is now marked as non-executable, improving security and compatibility with SELinux. #38011
Contributors
This release includes 25 merged PRs by 18 authors. We would like to thank the following contributors from the CockroachDB community:
- Simo Kinnunen (first-time contributor)
v19.1.1
Release Date: May 20, 2019
This page lists additions and changes in v19.1.1 since v19.1.0.
- For a comprehensive summary of features in v19.1, see the v19.1 GA release notes.
- To upgrade to v19.1, see Upgrade to CockroachDB v19.1
Cockroach Labs has discovered a bug relating to incremental backups, for CockroachDB v19.1.0 - v19.1.11. If a backup coincides with an in-progress index creation (backfill), RESTORE, or IMPORT, it is possible that a subsequent incremental backup will not include all of the indexed, restored or imported data.
For more information, including other affected versions, see Technical Advisory 63162.
Enterprise edition changes
CHANGEFEEDs now accept akey_in_valueoption; this is automatically used for cloud storage sinks, making the primary key of deleted rows recoverable. #37328
SQL language changes
EXPLAIN (DISTSQL) CREATE STATISTICSnow shows the DistSQL plan used by theCREATE STATISTICSjob. #37237- Added missing columns to
information_schema.columns. #37283
Bug fixes
- Prevented panics when adding comments to database objects at high verbosity. #37325
- Fixed panics when trying to run certain
SHOWcommands via the pgwire prepare path. #37325 - Fixed a regression in 19.1 that prevented empty arrays from being accepted over pgwire. #37398
- While a cluster is unavailable (e.g., during a network partition), memory and goroutines used for authenticating connections no longer leak when the client closes said connections. #36177
- Fixed a possible panic while recovering from a WAL on which a sync operation failed. #37109
- Fixed an error which could occur when a zigzag join was performed against a table with dropped columns. #37245
- Fixed incorrect query plans/results when non-validated FK constraints are not satisfied by the data. #37253
CHANGEFEEDs now retry instead of causing errors in more situations. #37092- Fixed a bug where
CHANGEFEEDjob progress would regress when the job was restarted. #37091 - The
changefeed.max_behind_nanosmetric now has fewer false positives of changefeeds falling behind. #37048 - Corrected the names of some columns for tables created with
CREATE TABLE <name> AS <query>. #37238 - Fixed a bug causing unvalidated check constraints to disappear from the output of
SHOW CONSTRAINTSand to not be referenced inALTER TABLEafter upgrading to 19.1. #37462
Performance improvements
- Improved the performance of some queries containing predicates with constant functions, since these functions are now evaluated earlier during query optimization. #37234
- Improved the performance of some queries by teaching the optimizer to always prefer constrained scans over unconstrained scans. #37235
Doc updates
- Updated the Kubernetes tutorials for running CockroachDB on GKE to specify a reasonable machine type. Also updated the Helm-specific instructions for maintenance tasks (adding/removing nodes, upgrading a cluster).#4813 #4805
- Fixed the code sample in Build a PHP App with CockroachDB to not create new connections for each query. #4804.
Contributors
This release includes 28 merged PRs by 14 authors.
v19.1.0
Release Date: April 30, 2019
With the release of CockroachDB v19.1, we’ve made a variety of security, performance, and usability improvements. A few highlights:
Enhanced security: CockroachDB now supports transparent data encryption at rest and integrates with existing LDAP directory services within an organization to simplify user account management.
Native Change Data Capture: CockroachDB extends its streaming data capabilities by enabling data to flow more easily to backend warehouses, with support for publishing distributed, row-level change feeds directly into cloud storage for downstream processing.
High-performance multi-region deployments: Our cost-based optimizer can now use data locality to optimize queries so you can get low-latency queries even when your data may be spread across regions. We’ve also added follower reads to improve read performance for certain geo-distributed workloads.
Check out a comprehensive summary of the most significant user-facing changes and then upgrade to CockroachDB v19.1. You can also read more about these changes in the v19.1 blog post.
Cockroach Labs has discovered a bug relating to incremental backups, for CockroachDB v19.1.0 - v19.1.11. If a backup coincides with an in-progress index creation (backfill), RESTORE, or IMPORT, it is possible that a subsequent incremental backup will not include all of the indexed, restored or imported data.
For more information, including other affected versions, see Technical Advisory 63162.
Summary
This section summarizes the most significant user-facing changes in v19.1.0. For a complete list of features and changes, including bug fixes and performance improvements, see the release notes for previous testing releases.
- Managed service offering
- Enterprise features
- Core features
- Backward-incompatible changes
- Known limitations
- Documentation
Managed service offering
| Feature | Description |
|---|---|
| Managed CockroachDB Console | Paid managed CockroachDB customers can now sign into their organization's account, view the connection string details, add and edit their list of allowed IPs on the management console. |
Enterprise features
These features require an enterprise license. Register for a 30-day trial license here.
| Feature | Description |
|---|---|
| Encryption at Rest | Encryption at rest provides transparent encryption of a node's data on the local disk. This feature was introduced as experimental in v2.1 and is now ready for production use. |
| GSSAPI with Kerberos Authentication | CockroachDB now supports the Generic Security Services API (GSSAPI) with Kerberos authentication, which lets you use an external enterprise directory system that supports Kerberos, such as Active Directory. |
| Follower Reads | This feature reduces read latencies by allowing queries to perform historical reads of the closest replica of a given piece of data rather than reading from the more distant "leaseholder" replica. To enable follower reads on a query, use the experimental_follower_read_timestamp() built-in function in conjunction with the AS OF SYSTEM TIME clause. |
| Prefer Closest Secondary Index | Given multiple identical indexes that have different locality constraints using replication zones, the cost-based optimizer will now prefer the index that is closest to the gateway node that is planning the query. In a properly configured geo-distributed cluster, this can lead to performance improvements due to improved data locality and reduced network traffic. This feature enables scenarios where reference data such as a table of postal codes can be replicated to different regions, and queries will use the copy in the same region. |
| Change Data Capture | CDC in v19.1 includes many improvements to production-readiness. CHANGEFEEDs delivering data to Apache Kafka/Confluent Platform are now fully supported, and a new cloud storage sink allows CHANGEFEEDs to deliver table updates as JSON files to endpoints like Google Storage or AWS S3. A new push-based internal data delivery mechanism called rangefeeds helps deliver data with increased reliability and lower latency. |
Core features
These features are freely available in the core version and do not require an enterprise license.
| Feature | Description |
|---|---|
| Load-Based Splitting | CockroachDB now automatically splits frequently accessed keys into smaller ranges to optimize your cluster’s performance. |
| Query Optimizer Hints | The cost-based optimizer now supports hint syntax to force the use of merge, hash, or lookup joins. This let you override the cost-based optimizer's join algorithm selection in cases where you have information about your data that the cost-based optimizer does not yet have. |
| Correlated Subqueries | Most correlated subqueries are now decorrelated and processed by the cost-based-optimizer. For those that cannot be decorrelated, CockroachDB now emits an "apply" operator that executes a sub-plan for every row in its input. This allows CockroachDB to execute a large number of additional correlated subqueries that were not able to be executed in v2.1. |
| Core Changefeeds | CockroachDB now offers a non-enterprise version of change data capture, via the EXPERIMENTAL CHANGEFEED FOR statement, to consume table updates over a streaming Postgres connection. |
| Cost-Based Optimizer | The cost-based optimizer now supports almost all read-only queries (except window functions) and almost all mutations (e.g., CREATE TABLE AS, INSERT, UPDATE, UPSERT, DELETE). In addition, the cost-based optimizer now reorders up to 4 joins in a query to attempt to find the most performant ordering (via the new reorder_joins_limit session variable) and takes advantage of automatically generated table statistics without impacting foreground traffic. Note that statistics are created by default on all indexed columns when a user upgrades to this version. Finally, a query plan cache now saves a portion of the planning time for frequent queries used in the cost-based optimizer. |
| Logical Plans in the Admin UI | The Statement Details page in the Admin UI now shows the ordered steps CockroachDB will take to execute a query (i.e., the EXPLAIN output). This helps you identify bottlenecks caused by how queries are planned by our heuristic and cost-based optimizers. |
| Cascading Replication Zones | Newly created replication zones will now inherit empty values from their parent. For example, if the replication zone for a table is not explicitly set with num_replicas, it will inherit that value from its direct parent, whether that's the .default replication zone from the entire cluster or the replication zone for the database containing the table. |
| Custom Savepoints | CockroachDB now supports custom naming of SAVEPOINTs for compatibility with ORMs and other third-party tools. |
Backward-incompatible changes
Before upgrading to CockroachDB v19.1.0, be sure to review the following backward-incompatible changes and adjust your application as necessary.
CockroachDB no longer supports the
B'abcde'notation to express byte array literals. This notation now expresses bit array literals like in PostgreSQL. Theb'...'notation remains for byte array literals.The normalized results of certain timestamp + duration operations involving year or month durations have been adjusted to agree with the values returned by PostgreSQL.
The
CHANGEFEEDexperimental-avrooption has been renamedexperimental_avro.Timezone abbreviations, such as
EST, are no longer allowed when parsing or converting to a date/time type. Previously, an abbreviation would be accepted if it were an alias for the session's timezone.The way composite foreign key matches are evaluated has changed to match the Postgres behavior. If your schema currently uses composite keys, it may require updates, since this change may affect your foreign key constraints and cascading behavior. For more details and guidance, see this note.
Mutation statements like
UPDATE,INSERT, andDELETEno longer attempt to guarantee mutation or output ordering when anORDER BYclause is present. It is now an error to useORDER BYwithoutLIMITwith theUPDATEstatement.
Known limitations
For information about limitations we've identified in CockroachDB v19.1, with suggested workarounds where applicable, see Known Limitations.
Documentation
| Topic | Description |
|---|---|
| Geo-Partitioning | Added a video and tutorial on using geo-partitioning to get very fast reads and writes in a broadly distributed cluster. |
| Security | Added an overview of CockroachDB security, with a dedicated page on authentication, encryption, authorization, and SQL audit logging. |
| Troubleshooting | Added much more guidance on troubleshooting cluster setup and troubleshooting SQL behavior. |
| Architecture | Added the Life of a Distributed Transaction, which details the path that a query takes through CockroachDB's architecture, starting with a SQL client and progressing all the way to RocksDB (and then back out again). Also added Reads and Writes in CockroachDB, which explains how reads and writes are affected by the replicated and distributed nature of data in CockroachDB. |
| Production Guidance | Expanded the Production Checklist with more current hardware recommendations and additional guidance on storage, file systems, and clock synchronization. Also added a library of common Cluster Topology Patterns. |
| ORMs | Expanded the SQLAlchemy tutorial to provide code for transaction retries and best practices for using SQLAlchemy with CockroachDB. |
v19.1.0-rc.4
Release Date: April 25, 2019
Bug fixes
- Fixed a crash caused by running
COMMENT ONwith verbose logging turned on. #36825 - Fixed a panic that can happen while RangeFeeds are active. #36870
- The default value of the
kv.bulk_io_write.max_ratecluster setting is now 1 TB/s, to help prevent incorrect rate limiting behavior due to rounding. #36912 - Fixed a rare inconsistency that could occur on badly overloaded clusters. #36959
- Fixed a bug in write batch decoding that could cause "invalid batch" errors while using
cockroach debugcommands to analyze data. #36965 - Fixed an issue that could cause low-traffic clusters to get stuck after a network outage. #37064
Contributors
This release includes 11 merged PRs by 9 authors.
v19.1.0-rc.3
Release Date: April 15, 2019
Bug fixes
- Fixed a potential crash when constructing certain types of aggregations with post projections. #36514
- CockroachDB now correctly validates computed columns during
ALTER TABLE ... ADD COLUMN. #36575 - Fixed a bug when parsing dates with large years. #36555
- Fixed a bug when decoding single column family
JSONBcolumns. #36626 - Fixed a potential crash in a mixed-version cluster with some nodes running
v19.1-beta-xand others running19.1-rc.x. #36719 - Made
CHANGEFEEDs more resilient to a class of bugs that manifest as stalls. #36768
Performance improvements
- CockroachDB now applies back-pressure to bulk operations before other traffic. #36738
Contributors
This release includes 19 merged PRs by 12 authors.
v19.1.0-rc.2
Release Date: April 8, 2019
SQL language changes
- Added the
kv.bulk_io_write.concurrent_addsstable_requestscluster setting, which limits the number of SSTables that can be added concurrently during bulk operations. #36444 - Added the
schemachanger.backfiller.buffer_size,schemachanger.backfiller.max_sst_size, andschemachanger.bulk_index_backfill.batch_sizecluster settings, which control buffering in index backfills. #36377 - Added the
sql.defaults.reorder_joins_limitcluster setting, which defines the default value of thereorder_joins_limitsession variable. #36382
Bug fixes
- Fixed a panic that could occur with certain patterns of using
UPDATEand column families. #36375 - Prevented production server crashes on certain assertion errors. #36434
- Data that was previously omitted from
debug zipis now included. #36480 - Fixed a planning error that occurred with some
GROUP BYqueries due to errors in null count estimation. #36528 - Fixed inappropriate column renaming in some cases involving single-column SRFs. #36535
- Prevented a panic when running a render expression that produces an error at the very end of a
count_rowsaggregate. #36538 - Prevented a deadlock related to store queue processing. #36542
Performance improvements
- CockroachDB now allows oversized ranges to split sooner. #36368
- Reduced memory usage during bulk data ingestion (during
IMPORT,RESTORE, and index creation). #36420 - Prevented rocksdb from slowing down write traffic during bulk data ingestion. #36512
- Sped up bulk data ingestion during index backfills and
IMPORT. #36525
Doc updates
- Emphasized the experimental status of CockroachDB's Windows binary. #4628
- Clarified the use of the
ApplicationNameconnection string parameter for JDBC clients. #4623 - Documented the
COMMENT ONstatement, for adding comments to databases, tables, and columns. #4617 - Documented the
RENAME CONSTRAINTsubcommand ofALTER TABLE, and identified theALTER TABLEsubcommands that can be used in combination in a singleALTER TABLEstatement. #4615 - Documented per-statement credential parameters for Google Cloud Storage. #4606
- Clarified the accepted values for the
--durationflag ofcockroach workload. #4610
Contributors
This release includes 36 merged PRs by 16 authors.
v19.1.0-rc.1
Release Date: April 2, 2019
In addition to bug fixes and various enterprise, SQL, and Admin UI enhancements, with this release, we also want to highlight the following feature:
- Prefer the nearest secondary index: Given multiple identical indexes that have different locality constraints using replication zones, the cost-based optimizer will now prefer the index that is closest to the gateway node that is planning the query. In a properly configured geo-distributed cluster, this can lead to performance improvements due to improved data locality and reduced network traffic. This feature enables scenarios where reference data such as a table of postal codes can be replicated to different regions, and queries will use the copy in the same region.
- Encryption at Rest: This feature, which provides transparent encryption of a node's data on the local disk, was introduced as an experimental in CockroachDB v2.1. With this release, it is no longer considered experimental and is ready for production use.
Enterprise edition changes
CHANGEFEEDs now support TLS connections to Kafka. #35510CHANGEFEEDs now support SASL/PLAIN authentication when connecting to a Kafka sink. #35800CHANGEFEEDs using Kafka now log information to help debug connection issues. #35661
SQL language changes
- The cost-based optimizer now picks lookup-joins less frequently. #35561
- CockroachDB now reports uses of CTEs (
WITH ...) and subqueries in diagnostics reporting, to guide future product planning. #35650 - It is now possible to specify a
HASH/MERGE/LOOKUPjoin hint with cross joins (CROSS <hint> JOIN). #35700 - The output of
EXPLAINnow useshash-joinormerge-joininstead ofjoin. #35688 - Added an
EXPLAIN (opt, env)option, which provides all relevant information for the planning of a query. #35802 transaction deadline exceedederrors are now returned to the client with a retryable code. #35284- Regular SQL errors that indicate erroneous SQL and for which CockroachDB does not yet populate a well-defined PostgreSQL error code will now be reported with code
XXUUUinstead of codeXX000. #35896 - Removed "experimental" from the names of the two existing automatic statistics cluster settings, and added two new cluster settings to control the target number of stale rows per table that will trigger a statistics refresh. #36085
- Renamed the
experimental_reorder_joins_limitsession variable toreorder_joins_limit. #36085 - Changed
SHOW JOBSto no longer display automatic statistics jobs.SHOW AUTOMATIC JOBScan now be used instead to view automatic statistics jobs. #36112 - The cost-based optimizer will now try to select the index having a leaseholder preference that is closest. #36123
- Computed columns are now evaluated after rounding any decimal values in input columns. #36128
- Changed the generation algorithm for the OID column of tables in
pg_catalog. As with previous CockroachDB releases, we guarantee that the OID values are consistent betweenpg_catalogtables (so that tables can be joined together), but we do not guarantee that they are stable across CockroachDB versions. Avoid storing them in client apps. #33697
Command-line changes
- The output of
cockroach debug zipnow contains more information. #36026
Admin UI changes
- Improved progress reporting for
CREATE STATISTICSjobs. #35684 - The Queries per second metric in the Summary bar now summarizes only the query types displayed in the SQL Queries graph and Node Map. #35905
- The Jobs screen no longer shows automatic statistics by default. To see these jobs, you must now select Auto-Statistics Creation from the Type menu. #36112
Bug fixes
- Increased speed of automatic statistic jobs on clusters with low load. #35698
CHANGEFEEDs connected to a slow sink now error instead of using unbounded amounts of memory. #35745- Removed historical log entries from Raft snapshots that could lead to failed snapshots. #35701
- Fixed a bug in
RESTOREwhere some unusual range boundaries in interleaved tables caused an error. #36005 - Fixed an error that occurred when creating statistics on tables with an inverted index. #35982
- Fixed a panic that occurred when comparing a value to the result of an
EXISTS. #36038 - Fixed an error caused by incorrect calculation of null counts in
VALUESclauses. #35997 - Reduced the occurrence of
ASYNC_WRITE_FAILUREtransaction retry errors, especially for the first insert into a newly-created table. #36104 - Fixed panics with the message "unexpected non-pending txn in augmentMetaLocked" caused by distributed queries encountering multiple errors. #36041
CHANGEFEEDs withchangefeed.push.enabled = true(which is the default) no longer fail when run for longer than the garbage collection window of the source data and a range split occurred. They also now emit dramatically fewer duplicates. #35981- Fixed panics caused by certain window functions that operate on tuples. #36124
- Prevented deadlocks when cancelling distributed queries in some cases. #36122
- Fixed a planning error that occurred with some
INexpressions containing a list of constant and non-constant items. #36134 - Reduced risk of data unavailability during AZ/region failure. #36133
- Fixed a planning error that occurred when using set operations with multiple columns and many null values. #36169
Performance improvements
- Improved performance of the TPC-C benchmark by pre-calculating statistics and injecting them during
IMPORT. #35940 - Reduced the default frequency of automatic statistics refreshes. #35992
- Improved the selectivity estimation of range predicates during query optimization. #36093
Build changes
Doc updates
- Added a library of common Cluster Topology Patterns. #4235
- Documented how reads and writes are affected by the replicated and distributed nature of data in CockroachDB. #4543
- Corrected the syntax for per-replica replication zone constraints. #4569
- Added more thorough documentation on CockroachDB dependencies. #4567
Contributors
This release includes 104 merged PRs by 23 authors. We would like to thank the following contributors from the CockroachDB community:
- Dong Liang (first-time contributor)
v19.1.0-beta.20190318
Release Date: March 18, 2019
In addition to bug fixes and various general, enterprise, SQL, and Admin UI enhancements, this release includes several major highlights:
- Managed CockroachDB Console: Paid managed CockroachDB customers can now sign into their organization's account, view the connection string details, add and edit thier list of allowed IPs on the management console.
- GSSAPI with Kerberos Authentication: CockroachDB now supports the Generic Security Services API (GSSAPI) with Kerberos authentication, which lets you use an external enterprise directory system that supports Kerberos, such as Active Directory. This feature requires an Enterprise License.
- Query Optimizer Hints: The cost-based optimizer now supports hint syntax to force the use of a merge, hash, or lookup join. This let you override the cost-based optimizer's join algorithm selection in cases where you have information about your data that the cost-based optimizer does not yet have.
- Correlated Subqueries: Most correlated subqueries are decorrelated and processed by the cost-based-optimizer. However, for those that cannot be decorrelated, CockroachDB now emits an "apply" operator that executes a sub-plan for every row in its input. This allows CockroachDB to execute a large number of additional correlated subqueries that were not able to be executed in v2.1.
General changes
- The cluster settings
timeseries.storage.10s_resolution_ttlandtimeseries.storage.30m_resolution_ttlhave been renamed totimeseries.storage.resolution_10s.ttlandtimeseries.storage.resolution_30m.ttlfor ease of use in SQL clients. Any value set using the previous setting name in existing clusters is migrated over to the new name; subsequent changes using the old name will be ignored. #34248
Enterprise edition changes
- Added the
debug encryption-active-keycommand. #35234 - The
changefeed.min_high_watermetric has been deprecated in favor ofchangefeed.max_behind_nanos, which is easier to alert on. The Changefeed dashboard in the Admin UI now contains a graph of this metric. #35257 - Added the
rocksdb.encryption.algorithmper-store metric, which describes the encryption cipher in use. #35506 - In exchange for increased correctness confidence,
CHANGEFEEDs usingchangefeed.push.enabled(the default) now take slightly more resources on startup and range rebalancing/splits. #35470
SQL language changes
- Changed the default set of column statistics created by CREATE STATISTICS to include up to 100 regular table columns in addition to all indexed columns. #35192
- Added the ability to pause all automatic statistics jobs by pausing the currently running job. #35243
- Automatic statistics are now enabled by default. #35291
- CockroachDB now supports many more correlated subqueries. #34546
- Schema changes now trigger automatic statistics collection for the affected table. #35252
- The
pg_catalog.current_setting()andpg_catalog.set_config()built-in functions are now supported for compatibility with PostgreSQL. Note that only session-scoped configuration changes remain supported (set_config(_, _, false)). #35121 - The
RENAME COLUMNcommand can now be used alongside other table commands in a singleALTER TABLEstatement. This makes it possible to, for example, atomically add a computed column based on an existing column, and rename the columns so that the computed column "replaces" the original column. #35091 - CockroachDB now supports
ALTER TABLE ... RENAME CONSTRAINT. Only indexes that are not depended on by views can be renamed. #35091 SHOW JOBSnow returns an extrastatementcolumn, which is populated when the description is not the statement. #35439SHOW QUERIESandSHOW SESSIONSnow omit internal queries and sessions by default. UseSHOW ALL QUERIESorSHOW ALL SESSIONSto include internal queries in the output. #35504- CockroachDB now starts emitting changefeed events immediately for sinkless changefeeds (an experimental feature). The
results_buffer_sizeconnection string parameter is no longer needed for this purpose. #35529 - CockroachDB now provides usable comments with optional documentation URLs for the virtual tables in
pg_catalog,information_schema, andcrdb_internal. UseSHOW TABLES [FROM ...] WITH COMMENTto read. Note thatcrdb_internaltables remain an experimental feature subject to change without notice. #34764 - CockroachDB now reports usage frequency of various SQL scalar operators in telemetry, when telemetry is enabled, so as to guide future optimizations of query performance. #35616
- CockroachDB now reports how the
SERIALpseudo-type is expanded in table column definitions, when telemetry is enabled. #35656
Admin UI changes
CREATE STATISTICSjobs no longer generate events by default. #35425- Queries issued internally by CockroachDB are now displayed under a single "(internal)" application name entry in the drop-down menu on the Statements page. #35503
- Additional types of transaction restart errors are now tracked on the Distributed dashboard. #35438
- Added "Statistics Creation" as a job type on the Jobs page. #35651
Bug fixes
- Fixed a planning bug that caused incorrect aggregation results on multi-node aggregations with implicit, partial orderings on the inputs to the aggregations. #35221
- Fixed a panic that occurred when evaluating certain binary expressions containing operands with different types. #35247
- Prevented a situation in which snapshots would be refused repeatedly over long periods of time, with error messages such as "aborting snapshot because raft log is too large" appearing in the logs, and often accompanied by under-replicated ranges in the UI. #35136
BACKUPtonodelocalnow writes files atomically. #34937- Fixed a crash on
SET TRANSACTION AS OF SYSTEM TIMEwith invalid expressions. #35316 - The experimental
CHANGEFEEDcloud storage sinks now strip secrets from the job description in the Admin UI andSHOW JOBSoutput. #35257 - Fixed a nil pointer dereference in
debug zipwhen one or more nodes in the cluster are down. #35366 - Window functions are now correctly planned when
UNION ALLis present in the subquery. #35430 - Fixed panics that could occur in some cases involving joins of the results of mutations. #35482
- CockroachDB now correctly returns an error when window functions include window definitions that contain other window functions. #35369
- CockroachDB now properly applies column width and nullability constraints on the result of conflict resolution in
UPSERTandINSERT ON CONFLICT. #35371 - Improved telemetry for error codes. #35431
- CockroachDB now properly preserves the automatically generated name of a newly created index in
system.event_logwhen the name is not specified in theCREATE INDEXstatement. #35534 - CockroachDB now properly reports
bigintininformation_schema.sequences.type, for compatibility with PostgreSQL. #35577 - CockroachDB now properly reports the composite foreign key match type in
information_schema.referential_constraints. #35575 - Subtracting 0 from a JSON array now correctly removes its first element. #35617
- Fixed a "column not in input" crash when
INSERT / UPDATE / UPSERT ... RETURNINGis used inside a clause that requires an ordering. #35644 - Fixed an error when executing some set operations containing only nulls in one of the input columns. #35321
- Fixed an on-disk inconsistency that could result from a crash during a range merge. #35626
Build changes
- Go 1.11.5 is now the minimum required version necessary to build CockroachDB. #35536
- CockroachDB will provisionally refuse to build with Go 1.12, as this is known to produce incorrect code inside CockroachDB. #35638
- Release Docker images are now built on Debian 9.8. #35517
Doc updates
- Updated the
PARTITION BY RANGEexample for geo-partitioning. #4503 - The Docs landing page now provides quick links into various areas of the CockroachDB documentation. #4476
- Documented the
BITdata type. #4454 - Documented the
bytea_outputsession variable, and fixed the documentation on bytes/string conversions. #4452 - Updated Configure Replication Zones documentation to reflect that unset variables in a replication zone now inherit their values from the parent zone. #4446
Contributors
This release includes 157 merged PRs by 29 authors. We would like to thank the following contributors from the CockroachDB community:
- Jaewan Park
v19.1.0-beta.20190304
Release Date: March 4, 2019
Enterprise edition changes
- Added a GSS auth method configurable by the
server.host_based_authentication.configurationcluster setting. This supports the new ability to use an external enterprise directory system like Active Directory for authentication in a CockroachDB cluster. Detailed usage guidance is coming soon. #34772
SQL language changes
- CockroachDB now supports the syntax
TIME(6),TIMESTAMP(6)andTIMESTAMPTZ(6)/TIMESTAMP(6) WITH TIME ZONE, for compatibility with PostgreSQL. Only the value6is supported, which is also the default in PostgreSQL. When used for a table column definition, the precision is not stored, and it is not possible to distinguish types with and without specified precisions in the introspection metadata. #35128 CHECKconstraints can now be applied to columns when they are first added to a table withALTER TABLE ... ADD COLUMN. #35018- CockoachDB no longer supports
AS OF SYSTEM TIMEinterval expressions less than 1 microsecond in the past. #34547 - When the JSON
?operator is used to compare a JSON string and a string that are equal, CockroachDB now returnstrue, for compatibility with PostgreSQL. #35005 - Specific implementations of join can now be forced by inserting
HASH,MERGE, orLOOKUPbetween the type of join (INNER | LEFT | RIGHT | FULL) and theJOINkeyword. #35183 - CockroachDB now supports
SHOW SEQUENCESto list the sequences in a given database or the current database, alongsideSHOW TABLES, which was already able to list both tables and views. #35215 - Added the
sql.stats.experimental_automatic_collection.fraction_idlecluster setting to control the throttling of automatic statistics. #34928
Admin UI changes
- Added a debug page that breaks down CPU usage by query (some restrictions apply). #35147
Bug fixes
- The columns
confupdtype,confdeltypeandconfmatchtypeinpg_constraintnow report the foreign key constraint parameters properly, for compatibility with PostgreSQL clients that use them. #35052 - Fixed a panic that could occur when using
logspytracing in some circumstances. #34936 - Fixed a panic related to cached plans. #35027
- Fixed
CREATE STATISTICSto run at the correct timestamp when it is specified withAS OF SYSTEM TIME. #35139 - CockroachDB again properly reports when a database used during
PREPAREdoes not exist any more whenEXECUTEis used. #35151 - The logical plans collected for display in the web UI now hide the details of which key ranges are scanned in table lookups. #34902
- Fixed a panic that could occur via certain patterns of folding
CASEstatements containingNULLvalues. #35188 - Fixed a bug that would return errors when handling valid
UPDATEs during periods of an index creation schema change. #35157
Performance improvements
- Increased write throughput for workloads that write large numbers of intents by coalescing intent resolution requests across transactions. #34803
- Reduced write-amplification during bulk-loading (
IMPORTandRESTORE). #34886 - Increased the rebalancing and up-replication default rate from 2MB to 8MB. #35100
- Reduced the impact of bulk data ingestion on foreground traffic by controlling RocksDB flushes. #34800
Doc updates
- Added much more guidance on troubleshooting cluster setup and troubleshooting SQL behavior. #4223
- Added a summary of Enterprise features. #4418
- Documented CockroachDB's partial support for the Intellij IDEA. #4391
- Clarified the guidance on preparing to decommission nodes. #4406
Contributors
This release includes 89 merged PRs by 18 authors. We would like to thank the following contributors from the CockroachDB community:
- David López (first-time contributor)
- lanzao (first-time contributor)
v19.1.0-beta.20190225
Release Date: February 25, 2019
Since our initial launch, Cockroach Labs has used semantic versioning in our release cycle guidelines. Two years, one major release, and n-patch fixes later, we're making the switch to Calendar Versioning. This means subscribers to our release notes will see quite the jump in today's version numbering, from last week's 2.1.5 to today's 19.1 beta. You can read more about the switch here.
General changes
- Records for completed jobs are cleaned up automatically after two weeks. #34725
SHOW JOBSnow returns only running and recently finished jobs. Older jobs can still be inspected via thecrdb_internal.jobstable. #34829
Enterprise edition changes
nodelocal://storage paths forBACKUP,RESTORE, andIMPORTmay include a node-ID in the Host part of the URI. It is not currently used (any node can get sent work and will look in its local IO directory) but will likely be required in the future. #34797CHANGEFEEDs targeting cloud sinks now partition files into date folders. #34813- The new
kv.rangefeed.concurrent_catchup_iteratorscluster setting limits the number of rangefeed catchup iterators a store will allow concurrently before queueing. #34890 - The
CHANGEFEEDexperimental_avroformat now supports SQL columns of typeDATE,TIME,UUID,INET, andJSONB. #34918
SQL language changes
- Virtual tables in
pg_catalogandinformation_schemanow supportCOMMENT ONlike regular tables. #33697
Bug fixes
- Fixed a bug that could cause a Raft log to grow very large, which in turn could prevent replication changes. #34502
- Prevented down nodes from obstructing log truncation on ranges they are a member of. This problem could cause replication to fail due to an overly large Raft log. #34712
- Fixed a panic when subtracting an array containing null from a JSON datum. #34757
- Fixed a panic during some
UNION ALLoperations with projections, filters, or renders directly on top of theUNION ALL. #34762 - Fixed a panic when the subquery in
UPDATE SET (a,b) = (...subquery...)returns no rows. #34804 - Fixed a rare panic ("close of closed channel") when shutting down a server. #34823
- Fixed a deadlock during
IMPORTandRESTOREthat caused all writes on a node to be stopped. #34830 - Fixed a panic during planning of certain complex join queries. #34843
- Fixed a panic when
CREATE STATISTICSis run on clusters containing nodes with different versions of CockroachDB. #34842 - Fixed a bug where servers would endlessly try to refresh table statistics on dropped tables. #34884
- CockroachDB now only lists tables in
pg_catalog.pg_tables, for compatibility with PostgreSQL. #34857 - Fixed a panic when using
EXPLAIN ANALYZEwith certain mutation queries. #34991
Performance improvements
- Subqueries used with
EXISTSor as a scalar value now avoid fetching more rows than needed to decide the outcome. #34801
Doc updates
- Documented the built-in
ycsbworkload. #4343
Contributors
This release includes 102 merged PRs by 22 authors. We would like to thank the following contributors from the CockroachDB community:
- Jaewan Park
v2.2.0-alpha.20190211
Release Date: February 11, 2019
In addition to SQL language enhancements, general usability improvements, performance improvements, and bug fixes, this release includes several major highlights:
- Follower Reads: Enterprise users can now reduce read latencies by allowing queries to perform historical reads of the closest replica of a given piece of data rather than reading from the more distant "leaseholder" replica. To enable follower reads on a query, use the
experimental_follower_read_timestamp()built-in function in conjunction with theAS OF SYSTEM TIMEclause. - Cost-Based Optimizer: The cost-based optimizer now supports almost all read-only queries (except window functions) and almost all mutations (e.g.,
CREATE TABLE AS,INSERT,UPDATE,UPSERT,DELETE). In addition, the cost-based optimizer now reorders up to 4 joins in a query to attempt to find the most performant ordering (via the newexperimental_reorder_joins_limitsession variable) and takes advantage of automatic statistics without impacting foreground traffic. Note that statistics are created by default on all indexed columns when a user upgrades to this version. Finally, a query plan cache now saves a portion of the planning time for frequent queries used in the cost-based optimizer. - Change Data Capture: Enterprise users can now create
CHANGEFEEDs that deliver table updates as JSON files to cloud storage endpoints like Google Storage or AWS S3. In addition, all CockroachDB users can now use the core implementation of change data capture, via the newEXPERIMENTAL CHANGEFEED FORstatement, to consumes table updates over a streaming Postgres connection. Finally, allCHANGEFEEDSnow use a new "push" mechanism called rangefeeds to deliver data with increased reliability and lower latency.
Backward-incompatible changes
- The
CHANGEFEEDexperimental_avroformat is now backward- and forward-compatible with adjacent schemas for the same table. #34095
General changes
- Go 1.11.4 is now the minimum required version necessary to build CockroachDB. #33668
- Increased the maximum length of queries in crash reports, to make debugging easier. #34479
Enterprise edition changes
CHANGEFEEDs now experimentally support writing to cloud storage, for easy use with analytics databases. #33647 #34193- The
CHANGEFEEDenvelope=rowoption is now deprecated and will be removed in the Fall 2019 release. The default envelope for new changefeeds is nowwrapped. #34309 CHANGEFEEDs now operate on an end-to-end "push" model, reducing latency of row changes. Some workloads will also see fewer transaction restarts on tables being watched byCHANGEFEEDs. #34457- Added support for standard HTTP proxy environment variables in HTTP and S3 storage. #34067
- Added support for performing sufficiently old historical reads against the closest replicas rather than leaseholders as well as a new
experimental_follower_read_timestamp()built-in function, which can be used withAS OF SYSTEM TIMEclauses to generate a timestamp that is likely to be safe for reads from a follower. #33478
SQL language changes
VALIDATE CONSTRAINTis now compatible with the newMATCH FULLandMATCH SIMPLEforeign key semantics and is more performant. #34365- Table data is now validated against a newly added
CHECKconstraint asynchronously after the transaction commits. #32504 NULLvalues are now supported in int and text arrays in the driver protocol. #33675- CockroachDB now supports transmitting bit array values using the decimal encoding in the low-level client protocol. #34050
- It is now possible to force a reverse scan of a specific index using
table@{FORCE_INDEX=index,DESC}. #34075 - Improved the output of
EXPLAINforindex-joinandlookup-join. #34138 FILTERexpressions are now supported by the cost-based optimizer. #34077EXPLAIN (OPT)now has a much shorter output.EXPLAIN (OPT,VERBOSE)andEXPLAIN (OPT,TYPES)can be used for more verbose output. #34128- Using a sequence as a
SELECTtarget is now supported by the cost-based optimizer. #33196 - Removed the
2.0-offand2.0-automodes for thesql.defaults.distsqlcluster setting. All queries are now run via the newer, distributed SQL engine; queries are still only distributed if appropriate. #34163 - The
experimental_force_lookup_joinsession variable has been removed. #34142 - Added the
experimental_reorder_joins_limitsession variable, which defaults to4and causes the cost-based optimizer to reorder up to 4 joins in a query to attempt to find the most performant ordering. This behavior can be disabled per-session by setting theexperimental_reorder_joins_limitsession variable to 0. #34549 - Formatting of timestamps as JSON strings has been changed to always use the RFC3339 format instead of Cockroach's customary format. Users can now expect to see a
Tseparator instead of a space between the date and time components. #34412 - Introduced a new top-level statement for an experimental version of
CHANGEFEEDthat doesn't require an enterprise license and that returns results as a stream over the sql connection. #34386 - The result buffer size can now be controlled on a per-connection basis with the
results_buffer_sizeconnection string parameter. #34385 CREATE STATISTICSnow runs as a job instead of as a regular SQL statement. #34279INTvalues are now stored with microsecond precision instead of nanoseconds. Existing intervals with nanoseconds are no longer able to return their nanosecond part. An existing tabletwith nanoseconds in intervals of columnscan round them to the nearest microsecond withUPDATE t SET s = s + '0s'. Note that this could potentially cause uniqueness problems if the interval is a primary key. #34202- Added support for
AS OF SYSTEM TIMEclauses inBEGIN TRANSACTIONandSET TRANSACTIONstatements, which enables entire read-only transactions to be run against a historical timestamp. This functionality simplifies performing complex analytics against a consistent snapshot of historical data and eases the burden to use historical reads with ORMs which generally make modifying the syntax of generatedSELECTstatements difficult. #34305 - The behavior of the
now()built-in function inside of historicalSELECT ... AS OF SYSTEM TIMEqueries now reflects the historical timestamp at which the query is being run rather than the current clock time when the statement is executed. #34305 - The
ORDER BYclause can no longer be used with aDELETEstatement when there is noLIMITclause present. Sorting the output should instead be done usingSELECT ... FROM [DELETE ...] ORDER BY .... #34303 - Enabled automatic statistics collection. #34529
DELETE,UPDATE, andUPSERTstatements are now planned by the cost-based optimizer. #34522- The value of
information_schema.columns.character_maximum_columnis set toNULLfor all integer types, for compatibility with PostgreSQL. #34182
Command-line changes
- The modified time is now set for entries in
cockroach debug zipoutput. #33714 - Clarified the informational message printed upon running
cockroach start --join. #33435
Admin UI changes
- Added a debug endpoint listing the hottest ranges by QPS on each node/store. #33336
- Improved performance of graph detail tooltips when viewing long timespans (e.g., 1 month) #34032
CHANGEFEEDmetrics are now exposed in the UI. #34427
Bug fixes
- Fixed a bug in
RESTOREthat prevented restoring someBACKUPs containing previously dropped or truncated interleaved tables. #34413 - Fixed a bug in
cockroach node statusthat prevented it from displaying down nodes in the cluster in some circumstances. #34448 - Fixed several related panics in the optimizer related to plan exploration. #34667
- Resolved a cluster degradation scenario that could occur during
IMPORT/RESTOREoperations, manifested through a high number of pending Raft snapshots. #33582 - Fixed a bug where some comparison operations with constant inputs were not getting folded during query optimization, causing the optimizer to produce sub-optimal plans. #33597
- Window functions with non-empty
PARTITION BYandORDER BYclauses are now handled correctly when invoked via the low-level client protocol. #33591 - Fixed a memory leak around
DEALLOCATEandDISCARDstatements that could result in panics with theunexpected <amount> leftover bytesmessage. #33423 - Lookup joins now properly preserve their input order even if more than one row of the input corresponds to the same row of the lookup table. #33536
- Fixed a panic that occurred when performing an
INSERT ON CONFLICTwith aSET UPDATEthat uses values from a subquery. #33553 - Preparing queries with missing placeholders (e.g.,
SELECT $2::int) now results in an error. #33716 - Fixed a goroutine leak that would occur while a cluster was unavailable (or a subset of nodes partitioned away from the cluster) and would cause a resource spike to resolve. #33282
- Fixed panics or incorrect results in some cases when grouping on constant columns (either with
GROUP BYorDISTINCT ON). #34123 - Prevented down-replicating widely replicated ranges when nodes in the cluster are temporarily down. #34126
- Fixed a panic when an internal implementation error prevents proper handling of placeholders (query parameters). #34134
- CockroachDB now enables re-starting a node at an address previously allocated for another node. #34155
- The values reported in
information_schema.columnsfor integer columns created prior to CockroachDB v2.1 asBITare now fixed and consistent with other integer types. #34182 - CockroachDB 2.2-alpha releases can once again be built from source on FreeBSD (unsupported platform). #34244
- Fixed a back up in flow creation observed by "no inbound stream connection" caused by not releasing a lock before attempting a possibly blocking operation. #34218
CHANGEFEEDs now can be started on tables that have been backfilled by schema changes. #34317- Fixed a possible panic in
crdb_internal.pretty_key(). #34480 CHANGEFEEDs withchangefeed.push.enabledset totruenow resolve timestamps in the presence of inactive ranges. #34550- Fixed a panic when updating a job that doesn't exist. #34574
- Fixed a panic due to incorrect statistics calculations when all values of a column are NULL. #34578
- Fixed a bug where lease transfers passed through Snapshots could forget to update in-memory state on the new leaseholder, allowing write-skew between read-modify-write operations. #34548
Performance improvements
- Reduced the network and storage overhead of multi-range transactions. #33566
- A query plan cache now saves a portion of the planning time for frequent queries. #34454
- Transaction record garbage collection requests are now batched on a per range basis to reduce the number of Raft entries in a high-throughput, write-heavy, transactional workload. #34242
Doc updates
- The new Life of a Distributed Transaction details the path that a query takes through CockroachDB's architecture, starting with a SQL client and progressing all the way to RocksDB (and then back out again). #4281
- Added a warning about cross-store rebalancing not working as expected in 3-node clusters with multiple stores per node. #4320
- Updated the
INTdocumentation to include examples of actual min/max integers supported by each type for easier reference. Also added a description of possible compatibility issues caused by 64-bit integers vs., for example, JavaScript runtimes. #4317 - Documented the
sql.metrics.statement_details.plan_collection.periodcluster setting, which controls how often the logical plan for a fingerprint is sampled (5 minutes by default) on the Statements page of the Admin UI. #4316 - Added guidance on removing
UNIQUEconstraints. #4276 - Added a note that when a table that was previously split is truncated, the table must be pre-split again. #4274
- Updated the SQL Performance Best Practices with caveats around interleaving tables. #4273
Contributors
This release includes 258 merged PRs by 29 authors. We would like to thank the following contributors from the CockroachDB community:
- George Utsin (first-time contributor)
- Txiaozhe (first-time contributor)
- Vijay Karthik
v2.2.0-alpha.20190114
Release Date: January 14, 2019
Backward-incompatible changes
Composite foreign key matching
We are changing the way composite foreign key matches are evaluated to match the default Postgres behavior. If your schema currently uses composite keys, it may require updates, since this change may affect your foreign key constraints and cascading behavior.
Prior to this change, we were matching composite keys with an incorrect implementation of the MATCH FULL method, and we are resolving this by moving all existing composite foreign key matches to a correct implementation of the MATCH SIMPLE method. Note that prior to this, there was no option for MATCH FULL or MATCH SIMPLE and all foreign key matching used the incorrect implementation of MATCH FULL.
For a more detailed explanation of the changes, see below.
For matching purposes, composite foreign keys can be in one of 3 states:
- Valid: Keys that can be used for matching foreign key relationships.
- Invalid: Keys that will not be used for matching.
- Unacceptable: Keys that cannot be inserted at all.
The MATCH FULL implementation we were using prior to this change allowed composite keys with a combination of NULL and non-null values. This meant that we matched on NULLs if a NULL existed in the referencing column, essentially treating NULLs as a valid value. This was incorrect, since MATCH FULL requires that if any column of a composite key is NULL, then all columns of the key must be NULL. In other words, either all must be NULL, or none may be.
To resolve this issue, all matches going forward will use the MATCH SIMPLE method (this matches the Postgres default). MATCH SIMPLE stipulates that:
- Valid composite keys may contain no
NULLvalues, and will be used for matching. - Invalid keys are keys with one or more
NULLvalues, and will not be used for matching, including cascading operations.
For more information, see #32693.
Mutation statements
Mutation statements like UPDATE and INSERT no longer attempt to guarantee mutation or output ordering when an ORDER BY clause is present. It is now an error to use ORDER BY without LIMIT with the UPDATE statement. #33087
SQL language changes
- Added support for configuring authentication via an
hba.confcluster setting. #32892 - Added support for collecting table statistics on a default set of columns by calling
CREATE STATISTICSwith no columns specified. #32981 - Added the
default_int_sizesession variable andsql.defaults.default_int_sizecluster setting to control how theINTandSERIALtypes are interpreted. The default value,8, causes these types to be interpreted as aliases forINT8andSERIAL8, which have been the historical defaults for CockroachDB. PostgreSQL clients that expectINTandSERIALto be 32-bit values can setdefault_int_sizeto4, which will causeINTandSERIALto be aliases forINT4andSERIAL4. Please note that due to issue #32846,SET default_int_sizedoes not take effect until the next statement batch is executed. #32848 - When creating a replication zone, if a field is set to
COPY FROM PARENT, the field now inherits its value from its parent zone, but any change to the field in the parent zone no longer affects the child zone. #32861 - Cockroach now supports specifying the matching method for composite foreign keys (a foreign key that includes more than one column) as either
MATCH SIMPLEorMATCH FULL.MATCH SIMPLEremains the default.MATCH FULLdiffers fromMATCH SIMPLEby not allowing the mixing ofNULLand non-NULLvalues. Only allNULLvalues will not be used to validate a foreign key constraint check or cascading action.MATCH PARTIALis still not supported. For more details see issue #20305 or https://www.postgresql.org/docs/11/sql-createtable.html. #32998 - The
string_agg()aggregate function is now supported by the cost-based optimizer. #33172 - Added support for the
pg_catalogintrospection tablepg_amfor both PostgreSQL versions 9.5 and 9.6, which changed the table significantly. #33252 - Added foreign key checks to kv traces. #33328
- CockroachDB now defines columns
domain_catalog,domain_schemaanddomain_nameininformation_schema.columns(usingNULLvalues, since domain types are not yet supported) for compatibility with PostgreSQL clients. #33267 - Attempts to use some PostgreSQL built-in functions that are not yet supported in CockroachDB now cause a clearer error message, and also become reported in diagnostics reporting, if diagnostics reporting is enabled, so as to gauge demand. #33390
- CockroachDB now reports the name (not the value) of unsupported client parameters passed when setting up new SQL sessions in diagnostics reporting, if diagnostics reporting is enabled, to guage demand for additional support. #33264
- CockroachDB now collects statistics for statements executed "internally" (for system purposes). This is meant to facilitate performance troubleshooting. #32215
- CockroachDB now supports associating comments to SQL databases using PostgreSQL's
COMMENT ON DATABASEsyntax. This also provides proper support for pg'spg_catalog.pg_descriptionand theobj_description()built-in function. #33057 - CockroachDB now supports associating comments to SQL table columns using PostgreSQL's
COMMENT ON COLUMNsyntax. This also provides proper support for pg'spg_catalog.pg_descriptionand thecol_description()built-in function. #33355 - Logical plans are now sampled and stored in statement statistics. #33020
SHOW EXPERIMENTAL_RANGESis faster if no columns are requested from it, like inSELECT COUNT(*) FROM [SHOW EXPERIMENTAL_RANGES...]. #33463- The new
experimental_optimizer_updatescluster setting controls whetherUPDATEandUPSERTstatements are planned by the cost-based optimizer rather than the heuristic planner. Also note that when the setting is set, check constraints are not checked for rows skipped by theINSERT ... DO NOTHINGclause. #33339
Admin UI changes
- The Statement Details page now shows sample logical plans for each unique fingerprint. #33483
- SQL queries issued internally by CockroachDB are now visible on the Statements page. They can be filtered using the application name. #32215
Bug fixes
- Fixed a bug where schema changes could get stuck for 5 minutes when executed immediately after a server restart. #32988
- Fixed a bug with returning dropped unique columns in
DELETEstatements withRETURNING. #33438 - Fixed a bug that could cause under-replication or unavailability in 5-node clusters and those using high replication factors. #32949
- Fixed an infinite loop in a low-level scanning routine that could be hit in unusual circumstances. #33063
- CockroachDB no longer reports under-replicated ranges corresponding to replicas that are waiting to be deleted. #32845
- Fixed a possible goroutine leak when canceling queries. #33130
CHANGEFEEDs and incrementalBACKUPs no longer indefinitely hang under an infrequent condition. #32909cockroach node status --rangespreviously listed the count of under-replicated ranges in theranges_unavailablecolumn and the number of unavailable ranges in theranges_underreplicatedcolumn. This fixes that mix-up. #32950- Fixed a panic in the cost-based optimizer during the planning of some queries. #33183
- Cancel requests (via the pgwire protocol) now close quickly with an EOF instead of hanging but still do not cancel the request. #33202
- CockroachDB does not crash upon running
SHOW SESSIONS,SHOW QUERIES, and inspections of somecrdb_internaltables when certain SQL sessions are issuing internal SQL queries. #33138 - Updated the Zipkin library to avoid deadlock when stopping Zipkin tracing. #33287
- Fixed a panic that could result from not supplying a nullable column in an
INSERT ON CONFLICT ... DO UPDATEstatement. #33245 - Fixed pgwire binary decoding of decimal
NaNandNULLin arrays. #33295 - The
UPSERTandINSERT ON CONFLICTstatements now properly check that the user has theSELECTprivilege on the target table. #33358 - CockroachDB now errors with a fatal exit when data or logging partitions become unresponsive. Previously, the process would remain running, though in an unresponsive state. #32978
- Updated the contextual help for
\h EXPORTincockroach sqlto reflect the actual syntax of the statement. #33460 INSERT ON CONFLICT ... DO NOTHINGno longer ignores rows that appear to be duplicate in theINSERToperands but are not yet present in the table. These are now properly inserted. #33320- Prevented a panic with certain queries that use the statement source (square bracket) syntax. #33537
- Previously, CockroachDB did not consider the value of the right operand for
<<and>>operators, resulting in potentially very large results and excessive RAM consumption. This has been fixed to restrict the range of these values to that supported for the left operand. #33221
Performance improvements
- Cross-range disjunctive scans where the result size can be deduced are now automatically parallelized. #31616
- Limited the concurrency of
BACKUPon nodes with fewer cores to reduce performance impact. #33277 - Index joins, lookup joins, foreign key checks, cascade scans, zig zag joins, and
UPSERTs no longer needlessly scan over child interleaved tables when searching for keys. #33350
Doc updates
- Updated the Production Checklist with more current hardware recommendations and additional guidance on storage, file systems, and clock synch. #4153
- Expanded the SQLAlchemy tutorial to provide code for transaction retries and best practices for using SQLAlchemy with CockroachDB. #4142
Contributors
This release includes 212 merged PRs by 34 authors. We would like to thank the following contributors from the CockroachDB community:
- Jaewan Park
- Jingguo Yao
v2.2.0-alpha.20181217
Release Date: December 17, 2018
General changes
- The default disk size on Kubernetes has been changed from 1 GiB to 100 GiB. #32428
- A new cluster setting (
sql.defaults.conn_results_buffer_size) can be used to control server-side buffering of results. #32366
Enterprise edition changes
- Disabled range merges on tables that are being restored or imported into. #32538
- Added timeseries metrics for debugging
CHANGEFEEDperformance issues. #32241 - Added the option to supply Google Cloud Storage credentials on a per-statement basis with the query parameter
credentials. #32544 - It is now possible to use AWS S3 temporary credentials for
BACKUP/RESTOREandIMPORT/EXPORTusing theAWS_SESSION_TOKENparameter in the URL. #32455
SQL language changes
- Users can customize the auto-retry savepoint name used by the
SAVEPOINTcommand by setting theforce_savepoint_restartsession variable. For example,SET force_savepoint_restart=true; BEGIN; SAVEPOINT foowill now function as desired. This session variable may also be supplied as part of a connection string to support existing code that assumes that arbitrary savepoint names may be used. #31971 - The names supplied to a
SAVEPOINTcommand are now properly treated as SQL identifiers. For example,SAVEPOINT fooandSAVEPOINT FOOare now equivalent statements. #31971 - It is now an error to run
ALTER TABLE ... DROP STOREDon a column which is not actually a computed, stored column. Previously, this statement would be a successful no-op. #32279 - Many queries containing a correlated
EXISTSsubquery with a generator function can now be decorrelated and executed successfully. Previously, these queries caused a decorrelation error. #31922 IMPORTnow uses larger integer sizes when converting unsigned MySQL integer columns to their signed cockroach counterparts. #32481- An
ALTER TABLEstatement to add a foreign key constraint now automatically creates the necessary index if the referencing table is empty and the index does not already exist. #32234 - Queries involving
COLLATEexpressions are now supported by the cost-based optimizer. #32500 - Some categories of
SELECTqueries that return 0 or 1 rows (namely, queries by a PK, a unique index, or LIMIT 1 queries) are now guaranteed to not return retryable errors when running as implicit transactions (i.e., outside of aBEGIN...COMMITblock). #32401 - Added support for
AS OF SYSTEM TIMEwith theCREATE STATISTICSstatement. #32643 - CockroachDB now accepts ordinary string values for placeholders of type
BPCHAR, for compatibility with PostgreSQL clients that use them. #32654 - CockroachDB now supports associating comments to SQL tables using PostgreSQL's
COMMENT ON TABLEsyntax. This also provides proper support for pg'spg_catalog.pg_descriptionand built-in functionobj_description(). #32442 - The
SHOW TABLESstatement now supports printing out table comments using the optional phraseWITH COMMENT, e.gSHOW TABLES FROM mydb WITH COMMENT. #32442 - The
INTtype is now treated as an alias forINT8. #32831 - Added an
experimental_optimize_updatesflag, which uses the cost-based optimizer to planUPDATEstatements when set to true. #32774
Command-line changes
cockroach sqland other commands that print query results and query execution latency will now exclude the time required to prepare the display client-side from the latency measurement. #32663cockroach workloadnow includes thekvandycsbgenerators. #32719- Added the
cockroach debug merge-logscommand to combine logs from multiple nodes. #32790
Admin UI changes
- All existing uses of the Loading component now properly surface data errors. Previously, data errors weren't consistently surfaced. #32464
- The Node map now uses an
equirectangularprojection. #32617
Bug fixes
- Fixed a panic on
UPDATE RETURNING *during a schema change. #32188 - Fixed a panic when expression contains both a correlated and uncorrelated subquery. #32443
- Fixed a panic on
UPSERTin the middle of a schema change adding a non-nullable column. #32585 - Fixed an error when configuring
NOT NULLcomputed columns. #32585 - Fixed a deadlock when using
ALTER TABLE VALIDATE CONSTRAINTin a transaction with a schema change. #32772 - Prevented non-superusers from seeing other user's sessions and queries via the
ListSessionsandListLocalSessionsstatus server API methods. #32253 - Avoided occasional unnecessary Raft snapshots after range splits. #31875
CHANGEFEEDs emitting into Kafka now more quickly notice new partitions. #32297- Ensured that space in the temporary storage directory is reclaimed more promptly. #32385
CHANGEFEEDs with theexperimental_avrooption now work with columnWIDTHs andPRECISIONs. #32474- CockroachDB now properly rejects queries that use an invalid function (e.g., an aggregation) in the
SETclause of anUPDATEstatement. #32505 - Prevented
VALUESclauses from returning incorrect results for certain special OID values. #32494 - CockroachDB now reports an unimplemented error when a
WHEREclause is used afterINSERT ... ON CONFLICT. #32556 - Fixed an issue where calling
CREATE STATISTICSon a large table could cause the server to crash due to running out of memory. #32614 - CockroachDB now properly handles foreign key cascading actions
SET DEFAULTandSET NULLinSHOW CREATEandcockroach dump. #32589 - Fixed a node data loss bug that occurs when a disk becomes temporarily full. #32605
- Fixed a panic caused by
WITH ORDINALITYin some cases. #32596 - Dates no longer have a time component in their text encoding over the wire. #32144
- Intervals now match Postgres in their text encoding over the wire. #32144
- Intervals no longer sometimes lose 1ns of precision. This only happened rarely due to floating point inaccuracy. #32144
- Corrected the
pgwireencoding for arrays and tuples. #32144 - Corrected the binary decimal encoding for
NaN. #32144 - Prevented a panic when running certain subqueries that get planned in a distributed fashion. #32652
- Fixed a panic that could occur during or after a data import on Windows. #32664
- Lookup joins now properly preserve ordering for outer joins. Prior to this fix,
LEFT JOINqueries under specific conditions could produce results which did not respect theORDER BYclause. #32317 - CockroachDB now again enables admin users, including
root, to list all user sessions besides their own. #32629 - Fixed a panic involving
json_aggand window functions. #32716 - CockroachDB no longer panics when encountering an internal error related to invalid entries in the output of
SHOW SESSIONs. #32713 - Resolved a cluster degradation scenario that could occur during
IMPORT/RESTOREoperations, manifested through a high number of pending Raft snapshots. #32594 - CockroachDB now properly evaluates
CHECKconstraints after a row conflict inINSERT ... ON CONFLICTwhen theCHECKconstraint depends on a column not assigned byDO UPDATE SET. #32779 - CockroachDB now properly records statistics for sessions where the value of
application_nameis given by the client during initialization instead ofSET. #32754 cockroach workload runno longer includes data-only generators #32720- Fixed a bug where metadata about contended keys was inadvertently ignored, allowing for a failure in transaction cycle detection and transaction deadlocks in rare cases. #32773
- Fixed a bug where
SCRUBwould erroneously report that index keys were out of order. #32908
Performance improvements
- Removed locking when reading physical time. #32225
- CockroachDB now users a faster randomness source to generate transaction IDs. #32238
- Implemented more efficient execution for some queries with
GROUP BYorDISTINCT ONand anORDER BYclause where an index with a suitable ordering is not available. #32307 - CockroachDB now rewrites the Raft entry cache to optimize for access patterns, reduce lock contention, and reduce memory footprint. #32618
- Re-enabled usage of RocksDB FlushWAL, which is a minor performance improvement for synchronous RocksDB write operations. #32674
- Replaced the Replica latching mechanism with a new optimized data structure that improves throughput, especially under heavy contention. #32865
Build changes
ncursesis now linked statically so that the cockroach binary no longer requires a particular version of thencursesshared library to be available on deployment machines. #32959
Doc updates
- Updated the Performance Tuning and TPC-C Benchmarking tutorials to clarify that the
--advertise-addrflag must be set uniquely for each node. #4164 - Fixed a method in the Build a C# (.NET) App with CockroachDB code samples. #4161
- Expanded the Build a Rust App with CockroachDB tutorial to cover secure clusters. #4127
Contributors
This release includes 265 merged PRs by 38 authors. We would like to thank the following contributors from the CockroachDB community:
- Jaewan Park (first-time contributor)
- Joe Harlow (first-time contributor)
- Mayank Oli
- shakeelrao (first-time contributor)
v2.2.0-alpha.20181119
Release Date: November 19, 2018
Backward-incompatible changes
- CockroachDB no longer supports the
B'abcde'notation to express byte array literals. This notation now expresses bit array literals like in PostgreSQL. Theb'...'notation remains for byte array literals. #28807 - The normalized results of certain timestamp + duration operations involving year or month durations have been adjusted to agree with the values returned by PostgreSQL. #31146
- The
CHANGEFEEDexperimental-avrooption has been renamedexperimental_avro. #31838 - Timezone abbreviations, such as
EST, are no longer allowed when parsing or converting to a date/time type. Previously, an abbreviation would be accepted if it were an alias for the session's timezone. #31758
General changes
- Load-based splitting is now enabled by default. In conjunction, the
range_min_bytessetting in the.defaultreplication zone is set to a higher value to prevent ranges from unnecessarily being considered for merging. #31413 - Added a Kubernetes configuration that shows how to use certificates generated outside of the Kubernetes-orchestrated CockroachDB cluster. #27921
- Added a Fluentd configuration for external logging of a Kubernetes-orchestrated CockroachDB cluster. #26685
SQL language changes
- The
EXPERIMENTAL_RELOCATEstatement no longer temporarily increases the number of replicas in a range more than one above the range's replication factor, preventing rare edge cases of unavailability. #29684 - The output of
SHOW JOBSnow reports ongoing jobs first in start time order, then completed jobs in finished time order. Therunning_statuscolumn becomesNULLwhen the status cannot be determined. #30917 - The output of
SHOW ZONE CONFIGURATIONSnow only shows the zone name and the SQL representation of the config. #30985 - The range log and system events logs now automatically purge records older than 30 and 90 days, respectively. This can be adjusted via the
server.rangelog.ttlandserver.eventlog.ttlcluster settings. #30913 - In cases such as
'2018-01-31'::TIMESTAMP + '1 month', where an intermediate result of February 31st needs to be normalized, previous versions of CockroachDB would advance to March 3. Instead, CockroachDB now "rounds down" to February 28th to agree with the values returned by PostgreSQL. This change also affects the results of thegenerate_sequence()function when used with timestamps. #31146 - Updated the output of
SHOW ZONE CONFIGURATIONS. Also, unset fields in zone configurations now inherit parent values. #30611 - If diagnostics reporting is enabled, attempts to use
CREATE/DROP SCHEMA,DEFERRABLE,CREATE TABLE (LIKE ...), andCREATE TABLE ... WITHare now collected as telemetry to gauge demand for these currently unsupported features. #31635 - If diagnostics reporting is enabled, the name of SQL built-in functions are now collected upon evaluation errors. #31677
- If diagnostics reporting is enabled, attempts by client apps to use the unsupported "fetch limit" parameter (e.g., via JDBC) are now collected as telemetry to gauge support for this feature. #31637
- The
IMPORT format (file)syntax is deprecated in favor ofIMPORT format file. Similarly,IMPORT TABLE ... FROM format (file)is deprecated in favor ofIMPORT TABLE ... FROM format file. #31263 - For compatibility with PostgreSQL, it is once again possible to use the keywords
FAMILY,MINVALUE,MAXVALUE,INDEX, andNOTHINGas table names, and the names "index" and "nothing" are once again accepted in the right-hand side ofSETstatement assignments. #31731 - Renamed the first column name returned by
SHOW STATISTICStostatistics_name. #31927 - CockroachDB now accepts a wider variety of date, time, and timestamp formats. #31758
- The new
experimental_vectorizesession setting, when enabled, causes columnar operators to be planned instead of row-by-row processors, when possible. #31354 - CockroachDB now supports the
BITandVARBIT (BIT VARYING)bit array data types like PostgreSQL. Currently, only the bit array literal notation with a capital B (e.g.,B'10001') is supported; the notation with a smallb(e.g.,b'abcd') continues to denote byte arrays as in previous versions of CockroachDB. #28807 - Added the
array_to_jsonbuilt-in function. #29818 - Statements involving the dropping or truncating of tables, such as
DROP DATABASE,DROP TABLE, andTRUNCATE, are now considered jobs and, as such, can be tracked viaSHOW JOBSand the Jobs page of the Admin UI. #29993
Command-line changes
- The
cockroach cert create-clientnow offers the--also-generate-pkcs8-keyflag for writing a client key in PKCS#8 format. #29008 - The client-side option
smart_promptnow controls whethercockroach sqlandcockroach demouse the current transaction state to offer a multi-line entry at the start of new transactions. #31630 - The
cockroach sqlandcockroach democommands now recognize the commandsexitandquitto terminate the shell. #31915 - The
cockroach debug estimate-gccommand now allows users to specify TTL period, with a default of 24 hours. #31402
Admin UI changes
- Improved the layout of the Cluster Overview page for large clusters with many nodes and ranges. #31512
- Added the current node ID to the Advanced Debugging page to help identify the current node when viewing the web UI through a load balancer. #31835
- The Non-Table Cluster Data section of the Databases page now includes all non-table data types. Previously, this section only showed Time Series data. #31830
Bug fixes
- Hash functions with
NULLinput now returnNULL. #29822 - Generated sequences now respect the
statement_timeoutsession variable. #31083 IS OF (...)expressions no longer report arrays with different element types as being the same. #31393- Fixed a bug where Raft proposals could get stuck if forwarded to a leader who could not itself append a new entry to its log. #31408
- The
confkeycolumn ofpg_catalog.pg_constraintno longer includes columns that were not involved in the foreign key reference. #31610 - Fixed a small memory leak when running distributed queries. #31736
- Fixed a bug in the cost-based optimizer that sometimes prevented passing ordering requirements through aggregations. #31754
- Fixed a bug that caused transactions to unnecessarily return a "too large" error. #31733
CHANGEFEEDs now escape Kafka topic names, when necessary. #31596- Fixed a bug that would incorrectly cause JSON field access equality comparisons to be true when they should be false. #31751
- Fixed a bug that sometimes caused invalid results or an "incorrectly ordered stream" error with streaming aggregations. #31825
- Fixed a mismatch between lookup join planning and execution, which could cause queries to fail with the error "X lookup columns specified, expecting at most Y". #31792
- Prevented a performance degradation related to overly aggressive Raft log truncations that could occur during
RESTOREorIMPORToperations. #31914 EXPLAIN ANALYZEplans no longer show the processor with ID 0's stats in the Response box. #31941- Fixed rare deadlocks during
IMPORT,RESTORE, orBACKUP. #31963 - Fixed a panic caused by incorrectly encoded Azure credentials. #31984
- The cost-based optimizer no longer chooses the wrong index for a scan because of incorrect selectivity estimation. #31937
- Prepared statements that bind temporal values now respect the session's timezone setting. Previously, bound temporal values were always interpreted as though the session time zone were UTC. #31758
- Prevented a stall in the processing of Raft snapshots when many snapshots are requested at the same time. #32053
CHANGEFEEDs now spend dramatically less time flushing Kafka writes. #32060- Fixed a bug that caused some queries with
DISTINCT ONandORDER BYwith descending columns to return an error incorrectly. #31976 - Fixed a bug that caused queries with
GROUP BYorDISTINCT ONto return incorrect results or an "incorrectly ordered stream" error. Also improved performance of some aggregations by utilizing streaming aggregation in more cases. #31976 - Fixed bit array wire encoding in binary format. #32091
- Fixed a bug that caused transactions to appear partially committed. CockroachDB was sometimes claiming to have failed to commit a transaction when some (or all) of its writes were actually persisted. #32166
- Prevented long stalls that can occur in contended transactions. #32211
- The graphite metrics sender now collects and sends only the latest data point instead of all data points since startup. #31829
Performance improvements
- Improved the performance of
AS OF SYSTEM TIMEqueries by letting them use the table descriptor cache. #31716 - Within a transaction, when performing a schema change after the table descriptor has been modified, accessing the descriptor should be faster. #30934
- Improved the performance of index data deletion. #31326
- The cost-based optimizer can now determine more keys in certain cases involving unique indexes, potentially resulting in better plans. #31662
- Reduced the amount of allocated memory by pooling allocations of
rocksDBBatchandRocksDBBatchBuilderobjects. #30523 - Cache zone configuration values to avoid repetitive deserialization. #30143
Contributors
This release includes 998 merged PRs by 50 authors. We would like to thank the following contributors from the CockroachDB community:
- Jan Owsiany (first-time contributor)
- M-srivatsa (first-time contributor)
- Mayank (first-time contributor)
- Mayank Oli (first-time contributor)
- Mo Firouz (first-time contributor)
- Sankt Petersbug (first-time contributor)
- Vijay Karthik
- changangela (first-time contributor)
- hueypark (first-time contributor)
- neeral