CockroachDB v1.0 is a required Regular Release.
Refer to Major release types before installing or upgrading for release timing and support details.
On this page, you can read about changes and find downloads for all production and testing releases of CockroachDB v1.0
For key feature enhancements in v1.0 and other upgrade considerations, refer to the notes for v1.0 on this page.
For details about release types, naming, and licensing, refer to the Releases page.
Be sure to also review the Release Support Policy.
After downloading a supported CockroachDB binary, learn how to install CockroachDB.
Get future release notes emailed to you:
v1.0.7
Release Date:
Bug Fixes
- Fixed a leak of table leases that could grow to a point that a cluster becomes unusable. #22563
- When the log disk fills up, the process now crashes instead of hanging. #22563
v1.0.6
Release Date:
Bug Fixes
- Fixed a bug in
ReverseScan
that could cause data to be missing from query results. #17891 #18385 - Fixed a potential data corruption bug in RocksDB. #18397
- Fixed a panic in some
UNION
queries. #17933 - It is no longer possible to set the
kv.raft.command.max_size
cluster setting to a very low value (which could make the cluster inoperable). #18016 - Fixed a range lease bug that could make ranges unavailable. #18218
- Parallel statement execution is now disabled by default due to issues in handling retryable errors. #18002 #18332
- Fixed a resource leak in diagnostics reporting #18315
- Host names are no longer included in diagnostics reports. #18335
- Increased logging to help diagnose certain issues. #18229 #18272 #18282 #18333
Doc Updates
- Updated the Contribute to CockroachDB page to provide guidelines on finding a project, determining its complexity, and learning what to expect in your collaboration with the Cockroach Labs team. #1881
v1.0.5
Release Date:
Command-Line Interface Changes
Bug Fixes
- Foreign keys that point to a prefix of an existing index now work correctly. Previously, rows could be deleted from the referenced table without recognizing the constraint violation if rows in the referring table pointed to them. These foreign keys are also now shown correctly in
SHOW CREATE TABLE
. #17653 - The crash reporter will now time out instead of waiting indefinitely trying to reach the server. #17689
AS OF SYSTEM TIME 0
is now a normal error instead of a panic. #17681- Fixed a panic caused by unclosed
planNodes
. #17281 - 3DES has been removed from the list of supported TLS cipher suites (it would never be selected because we require TLS 1.2, but it could be reported as a false positive by security scanners). #17237
Performance Improvements
- Reduced unhelpful retries of slow commands. #17385
Doc Updates
- Added an FAQ on why CockroachDB uses the PostgreSQL wire protocol instead of the MySQL protocol. #1845
- Added a known limitation around dropping an index interleaved into another index on the same table. #1859
v1.0.4
Release Date:
SQL Language Changes
ROLLBACK TO SAVEPOINT
is now accepted at any time. #16932
Bug Fixes
- Fixed a race condition that could lead to serializability violations when requests race with a lease transfer. #17141
CREATE TABLE AS SELECT
now handles values of typeBOOL
. #17092- Fixed handling of columns names containing special characters in
SHOW CREATE TABLE
,CREATE VIEW
, andCREATE TABLE AS SELECT
. #16783 - Fixed issues with diagnostic reporting. #17085
- Fixed a panic with
--vmodule=plan=3
or--verbosity=3
. #17093
Doc Updates
- Improved code samples for building a Rust app with CockroachDB. #1746
- Improved documentation for secure Docker Swarm deployments. #1735
- Fixed links to Google Cloud Platform documentation in deployment docs. #1744
v1.0.3
Release Date:
SQL Language Changes
SET client_encoding='unicode'
is now recognized as equivalent toUTF-8
. #16513- The
IN
operator now works with tuples ofOIDs
. #16645
Bug Fixes
- Fixed a consistency problem that could result when a transaction commit races with a lease transfer. #16775
- Fixed a panic with message
indexed var linked to different container
. #16444 - Casting a string to
regtype
now uses the full type parser. #16480 #16792 - Fixed formatting of some error messages containing
%
characters. #16617 - Fixed a panic in the timestamp cache. #16711
- Fixed a memory leak when
EXPLAIN
is used on a query containingUNION
. #16775
Performance Improvements
- The intent resolver now works in smaller batches, reducing memory spikes after large transactions. #16741
- MVCC garbage collection now works in smaller batches, avoiding problems with refreshing leases. #16735
Doc Updates
- Introduced docs for specific versions of CockroachDB. #1605
- Documentation for the latest production release is at https://www.cockroachlabs.com/docs/stable.
- Documentation for the latest testing release is at https://www.cockroachlabs.com/docs/dev.
- On any page, you can switch between versions using the version selector in the lower-left.
- Updated the Deploy CockroachDB on Google Cloud Platform tutorial to provide guidance on using Google's managed TCP Proxy Load Balancing service. #1665
- Added an Automatic Cloud Migration tutorial that shows you how to use a local cluster to simulate deploying across clouds and migrating from one cloud to another with no downtime. #1610
- Expanded details on how CockroachDB handles unsynchronized clocks. #1636
- Updated the Node.js transaction code sample to perform a
SELECT
as part of the transaction and return the results through the transaction wrapper. #1615
v1.0.2
Release Date:
General Changes
- CockroachDB now uses Go 1.8.3 (fixing a security issue when elliptic curve certificates are used, as well as a panic). #16330
SQL Language Changes
- The
BEGIN
statement now accepts theREAD WRITE
modifier for compatibility with the Golib/pq
driver. #16348
Command-Line Interface Changes
- More node configuration details get logged on node initialization. #16209
Bug Fixes
- Fixed several bugs with the
OFFSET
clause, including incorrect results and a panic when it is used without aLIMIT
. #16315 - Fixed the behavior of
LIMIT
in index joins. #16340 - Fixed the behavior of
DISTINCT
with omitted columns. #16318 - Fixed decoding of very large
DECIMAL
values. #16284 ALTER TABLE...ADD FOREIGN KEY
no longer attempts to create an index on the source table. #16333INT2VECTOR
is now zero-indexed. #16326- Timestamp parsing is now consistent between prepared and non-prepared statements. #16327
- If a prepared statement is invalidated by a schema change, it now returns an error instead of an incorrect result. #16335
- The replica allocator will no longer remove replicas from a down node if there are no live nodes to receive them. #16218
ConditionalPut
failures during initial migrations are now handled gracefully. #16244EXPLAIN (TRACE)
and thesql.trace.txn.enable_threshold
cluster setting now work even when thetrace.debug.enable
cluster setting is false (the default). #16217- Improved the ability of a cluster to restart with some nodes missing. #16353
- Backup URLs are now sanitized before being written to the system jobs table. #16386
cockroach zone set
with an incomplete config for the special system ranges now merges the given config with the default instead of using zeros. #16212
Performance Improvements
- Improved performance of MVCC garbage collection. #16219 #16231
- Adjusted timeouts for snapshot throttling. #16328
Doc Updates
- Added basic hardware recommendations for a CockroachDB cluster. #1527
- Completed the
ADD COLUMN
documentation. #1483 - Improved the
RENAME TABLE
documentation. #1532 - Improved the
DROP DATABASE
documentation. #1540 - Added examples for creating a replication zone for system ranges and tweaking the replication of system ranges. #1441
v1.0.1
Release Date:
Bug Fixes
- The command-line interface no longer prompts for a password twice when password authentication is used. #15919
CREATE USER WITH PASSWORD
now works correctly in thecockroach sql
shell. #15911- Fixed bugs in the
MIN()
andMAX()
aggregate functions in the presence ofNULL
values. #15912 - Administrator privileges are no longer required on Windows. #15916
- Favicons now display correctly in the web UI. #15918
- A clear error message is now printed when running on Windows versions older than 8 (the oldest version we support). #15920
- The
--cache
and--max-sql-memory
flags ofcockroach start
now use their default values on OpenBSD. #15914 - Attempting to create a view involving an array now returns an error instead of crashing the server. #15913
cockroach start --insecure
now prints a warning about the consequences of insecure mode. #15924- The
round()
function for floats now works onarm64
platforms. In some instances this changes the low bits of the result on other platforms. #15915 - Collation locales containing capital letters are now parsed correctly. #15917
- Fixed a panic in node ID allocation. #15937
- Other errors in node/store ID allocation are now retried automatically. #15973
- Dropping a database containing views now works correctly. #15983
- Fully-qualified column names referring to views now work correctly. #15984
- Fixed a panic when preparing a query with window functions. #16019
- Fixed a panic when null arguments are given to the
generate_series()
orunnest()
function. #16017
Admin UI Changes
- Fixed the display of timestamps in logs. #16002
Performance Improvements
- Disabled RocksDB assertions in release builds. #15943 #15960
- Index joins for queries with limits no longer fetch unnecessary rows. #15969
- Fixed an issue causing high CPU usage after data is deleted or overwritten. #16006
Doc Updates
- Contributing to the docs is now easier. The new Contribute options at the top of every page of the docs let you immediately start a PR with page edits or open a GitHub issue to report issues on the page or to request a new topic. #1440
- Added troubleshooting guidance on common errors, cluster and node setup, SQL query behavior, using debug and error logs, finding support resources, and filing issues. #1370
- Added FAQs on why memory and disk usage increases steadily in new clusters. #1450
v1.0
Release Date:
General Availability
With this release, CockroachDB graduates from beta to a production-ready database built for the cloud and designed to power business at any scale from startup to enterprise. Years of development have gone into the capabilities included, from distributed SQL workloads with guaranteed ACID semantics, to multi-active availability with consistent consensus-based replication, to simple and flexible deployment and operations, to enterprise-scale distributed, incremental backup and restore.
Read more about these critical product areas in this blog post, and then get started:
- Install CockroachDB using the download links above
- Start a local cluster and explore how CockroachDB automatically replicates and distributes data as you scale
- Build an app on CockroachDB using a PostgreSQL-compatible driver or ORM
- Learn how to deploy a production cluster manually or in the cloud
You might also be interested in reviewing previous beta release notes for insight into the broad range of development efforts that made CockroachDB 1.0 possible.
Known Limitations
For information about limitations we've identified in CockroachDB 1.0, with suggested workarounds where applicable, see Known Limitations.
v1.0-rc.2
Release Date:
General Changes
- Diagnostics reporting now includes anonymized query statistics. #15491
SQL Language Changes
- Restrictions on schema changes in transactions with other statements have been relaxed. It is now possible to insert into a table in the same transaction that created it, provided there are no
FOREIGN KEY
orINTERLEAVE
clauses. #15511 - The distributed SQL engine supports queries that internally generate rows with no columns. #15420
- New variables added to the cluster-wide settings:
server.declined_reservation_timeout
,server.failed_reservation_timeout
, andserver.time_until_store_dead
. #15581
Command-Line Interface Changes
- If the new flag
--listening-url-file
is passed tocockroach start
, the server will write its SQL connection URL to the specified file on successful startup, in addition to printing it tostdout
. This is particularly helpful in identifying the node's port when an unused port is assigned automatically (--port=0
).#15468 - The
cockroach sql
shell no longer buffers all results in memory before printing them. #15277 - The log file is now flushed more reliably when a node exits. #15531
- The new flag
--max-offset
on thecockroach start
command defines the maximum allowed clock offset for the cluster and replaces the environment variableCOCKROACH_MAX_OFFSET
. Note that the--max-offset
value must be the same on all nodes in the cluster. In order to change it, every node in the cluster must be stopped and restarted with the new value. #15568 - The
--raft-tick-interval
flag has been removed from thecockroach start
command. #15547 - Certificate and key loading errors during node startup are now reported to the user via
stdout
as well as being written to the log file. #15655
Admin UI Changes
- The number of transactions that would be affected by a change in isolation level is now tracked. #15234
- Improved style of the single node and log pages. #15486
- The event log now refreshes automatically. #15502
- Graphs on the overview page now have tooltips. #15624
Bug Fixes
- Fixed a panic when a query returning a constant
NULL
uses the new distributed execution engine. #15530 - Fixed two issues that could cause requests to get stuck indefinitely. #15557 #15573
- Fixed a rare crash when extending table leases. #15560
- Fixed a crash when a transaction that uses
SAVEPOINT cockroach_restart
does something other thanROLLBACK TO SAVEPOINT
after an error. #15563 - Fixed
RESTORE
for interleaved tables. #15564 - Return parse error instead of panic when constant typechecking fails. #15636
- Prevent persistent distsql and schema change errors after a node dies. #15368
- Previously,
ALTER TABLE ADD COLUMN
with aDEFAULT unique_rowid()
specification could create many duplicate values. This has been corrected. #15628 - Fixed a consistency error in
BACKUP
. #15642 - Fixed incorrect NULL results when using an aggregation with an empty table. #15688
Performance Improvements
- Reduced thrashing in gossip after a rolling restart. #15533
RESTORE
performs its pre-splitting less aggressively. #15548- Improved memory accounting in distributed SQL. #15595, #15610, #15623, #15627
- Queries using session-dependent variables (e.g., time conversions using the session's timezone) are now executed through the distributed SQL engine. #15628
Doc Updates
- Added an FAQ on different ways to log SQL queries. #1359
- Updated local deployment tutorials to have nodes listen only on
localhost
. This ensures these tutorials work even on machines whose hostnames aren’t resolvable. #1358
Contributors
This release includes 85 merged PRs by 24 authors. We would like to thank the following contributors from the CockroachDB community:
- Dmitry Vorobev
- Richard Artoul
v1.0-rc.1
Release Date:
Backwards-Incompatible Changes
- It is not possible to upgrade directly to this version of CockroachDB from a version older than
beta-20170413
. Upgrade any older clusters to that version first. #15228 - The
cockroach start
command no longer recognizes theCOCKROACH_INSECURE
andCOCKROACH_CERTS_DIR
environment variables which are intended to be client-only. Use the--insecure
and--certs-dir
command-line flags instead. #15196 #15288 - Older certificate-related command-line flags have been removed; use
--certs-dir
instead. #15241 - Various environment variables have been removed in favor of the new
CLUSTER SETTING
commands described below. - The undocumented
SET SYNTAX
statement and the "modern" syntax variant have been removed. #15064
General Changes
- Anonymous diagnostics statistics are now reported by default. To opt out, set
COCKROACH_SKIP_ENABLING_DIAGNOSTIC_REPORTING=true
in the environment when starting the cluster, or useSET CLUSTER SETTING diagnostics.reporting.enabled = false
in the SQL shell on clusters already running. #14901
Build Changes
- CockroachDB now builds on Windows. Windows support is currently experimental and is recommended only for development, not production.
- Building from source on macOS 10.11 works again. #15168
- Building from source on older CPUs (without SSE4.2) works again. #15247
Enterprise Features
- Distributed backup and restore capabilities are now available to enterprise-license customers. Using the new
BACKUP
SQL statement, a cluster's schema and data can be backed up in full or incrementally as of a given timestamp, and can be stored on the platforms you're already using, including AWS S3, Google Cloud Storage, NFS, or HTTP storage. In the unlikely event of irreparable cluster failure, the newRESTORE
SQL statement can be used to restore a cluster from enterprise backups. Importantly, backup and restore operations are distributed across the nodes of a cluster, minimizing the impact on cluster performance.
For details about pricing, contact Cockroach Labs.
SQL Language Changes
- Table names and other identifiers are now case-insensitive in all cases, even when used in double quotes. These identifiers will be shown in lowercase in many introspection interfaces. This is consistent with PostgreSQL and improves compatibility with the PostgreSQL JDBC driver. #15434
- New
SHOW ALL CLUSTER SETTINGS
andSET CLUSTER SETTING
statements can be used to view and change certain cluster-wide settings. The following cluster settings are available in this release:diagnostics.reporting.enabled
diagnostics.reporting.report_metrics
diagnostics.reporting.send_crash_reports
kv.allocator.lease_rebalancing_aggressiveness
kv.allocator.load_based_lease_rebalancing.enabled
kv.raft.command.max_size
kv.raft_log.synchronize
kv.snapshot_rebalance.max_rate
kv.snapshot_recovery.max_rate
kv.transaction.max_intents
server.remote_debugging.mode
sql.defaults.distsql
sql.metrics.statement_details.dump_to_logs
sql.metrics.statement_details.enabled
sql.metrics.statement_details.threshold
sql.trace.log_statement_execute
sql.trace.session_eventlog.enabled
sql.trace.txn.enable_threshold
- The
PREPARE
andEXECUTE
statements can now be used to use prepared statements in a SQL shell. #15256 - The
regexp_replace()
function now handles newlines correctly, both with and without then
flag. #15309 - Precedence for the binary
~
operator (regex match) has been changed. This could causeDEFAULT
orCHECK
expressions to have different behavior if~
was used in combination with other operators. These will need to be fixed manually. #15264 - Ambiguous results now return the PostgreSQL "statement completion unknown" error code. #15054
- Time zones can now be specified in more formats in
DATE
types, including+0700
,+07
,+7
, and+07:00
. #15177 - Set-returning functions (like
generate_series()
) are now supported in more contexts. #14369
Admin UI Changes
- Tooltips are now shown on graphs. #15282
- Fixed elements that overlapped incorrectly. #15387
- Improved handling of long strings in table cells. #15387
- The SQL statement latency graphs now include some overhead that was not previously accounted for. #15176
Command-Line Interface Changes
- The default lifetime of certificates generated by
cockroach cert
has been increased to 10 years. #15306 - The output format of
cockroach cert list
has been improved. #15198
Bug Fixes
- Table scans over interleaved tables now work correctly. #15043
- Fixed backslash escaping when used with the Python
psycopg2
driver. #15281 - Improved certificate validation, fixing compatibility with client certs as used by
psql
. #15286 - Fixed a race between lease transfers and repair/rebalance operations. #15355
- Creating a table with a bad
DEFAULT
expression no longer panics. #15170 - Improved tracking of memory used by aggregate functions. #14904
- Rebalancing now only considers ranges for which all replicas are healthy. #15312
- Writes to the raft log are now fully synced to disk. #15366
- Fixed a hang during node shutdown. #15465
- Fixed "requested entry at index" log spam from
raft_log_queue.go
. #15466
Performance Improvements
- A new distributed SQL execution engine is now used for a large subset of
SELECT
statements. Instead of returning all table data involved in the query to the gateway node for final computations, computation is distributed between the gateway node and the nodes where the data resides, with just the relevant results returned to the gateway node. This deeper distribution of work significantly improves performance of queries, especially those using aggregation functions or joins. - Smoothed out request stats used by lease rebalancing and reduced thrashing. #15156 #15321
- Improved retry logic after lease failures. #15199
- Snapshots that are necessary for recovery are now given higher recovery than those used for rebalancing. #15279
- Very large transactions and commands that might cause the server to run out of memory are now rejected earlier. #15350
- Node liveness heartbeats are now retried when they fail due to heavy load. #15362
- Improved priority adjustments when transactions are pushed. #7380
Doc Updates
- Expanded documentation on backing up and restoring data to cover both distributed capabilities covered by our enterprise license as well as non-distributed dump and import functionality. #1239
- Added SQL-specific FAQs. #1315
- Documented the order in which operators are evaluated within statements. #1322
- Documented the known list of differences between PostgreSQL and CockroachDB for identical SQL input, with porting instructions. #1328
- Expanded best practices when using the
--locality
setting to replicate evenly across datacenters. #1334
Contributors
This release includes 185 merged PRs by 27 authors. We would like to thank the following contributors from the CockroachDB community, including first-time contributors Evgeniy Vasilev and Mahmoud Al-Qudsi.
- Evgeniy Vasilev
- Kenji Kaneda
- Mahmoud Al-Qudsi
beta-20170420
Release Date:
Backwards-Incompatible Changes
- Security-related command-line arguments have been changed. Instead of using multiple flags, certificates and keys are now loaded from a single
--certs-dir
flag, which defaults to~/.cockroach-certs
but can be set to a custom location. The individual flags still work in this release but will be removed in the next one. Also note that the--insecure
flag is now required for insecure mode. #14703 - The
--alsologtostderr
argument has been renamed to--logtostderr
, and now takes an optional argument to specify a threshold. #14841 - The
^
operator now meanspow()
instead of bitwise xor (bitwise xor uses the#
operator; this is consistent with PostgreSQL). Any tables with this operator in aDEFAULT
orCHECK
expression will need to be updated. #14882
Upgrade Notes
- This release cannot run at the same time as releases prior to
beta-20170413
. If you are running an older version, you must either upgrade to that version first or take down all servers in the cluster before starting any server with this version. This release includes new functionality to make future upgrades smoother. #14959
Build Changes
- CockroachDB's build system has been rewritten to improve portability. It can no longer be installed with
go get
alone; use of theMakefile
is now required. GNU Make, CMake, and XZ Utils must also be installed to build from source. As a result, CockroachDB can now be built on a larger variety of systems. #14840
SQL Language Changes
- Type errors in
CHECK
constraints are now detected earlier. #14984 - Aggregation functions now work correctly above the windowing level. #14729
- The default precision for inexact decimal operations is now 20 digits (up from 16). #15001
- Bounds are now checked when converting
FLOAT
orDECIMAL
values toINTEGER
. #14967 - The
pg_catalog
data forint2vector
is now consistent with PostgreSQL. #14989
Command-Line Interface Changes
- The
cockroach cert
commands have been updated to reflect the new--certs-dir
convention. #14703 - New flags
--log-file-max-size
(default 10 MiB) and--log-dir-max-size
(default 100 MiB) can be used to control log rotation and deletion. The--log-file-verbosity
flag (defaultINFO
) can be used to control the verbosity of the log file. #14841 - Critical errors are now written to
stderr
regardless of the logging configuration. #14926 #15025 #15040 - The server will now reload its certificates and keys on a
SIGHUP
. #14925 - Some commands which previously required a
node
certificate now work with theroot
client certificate. #14972 - The undocumented
cockroach debug kv
commands have been removed. #14857 - The
cockroach quit
command now has a hard timeout of 1 minute if the cluster has lost quorum. #14708
Admin UI Changes
Bug Fixes
- Transactions no longer get stuck forever when a split occurs while they are waiting for a conflicting transaction. #14974
- The Admin UI can now display tables with non-lowercase names. #14818
- Fixed a panic with "span and descriptor's range do not overlap". #14952
- Fixed a data race in the Prometheus exporter. #14943
Performance Improvements
- The timestamp cache is now much more efficient, leading to a 42% speedup on single-node write-only benchmarks. #14867
- Transaction deadlocks are now detected faster. #14789
- Fixed a memory "leak" in Raft. #15041
- Improved performance of concurrent RPCs on a single GRPC connection. #14939
- Raft processing now uses more threads. #14897
- Improved performance of schema changes that add indexes. #14937
- Reduced the number of cgo calls for RocksDB iterators. #14920
Doc Updates
- Expanded the
TRUNCATE
documentation to cover usingCASCADE
to truncate dependent tables. #1297 - Minor improvements to the
ROLLBACK
documentation. #1296
Contributors
This release includes 101 merged PRs by 21 authors. We would like to thank first-time contributor xphoniex from the CockroachDB community.
beta-20170413
Release Date:
Backwards-Incompatible Changes
The implementation of indexing for collated string columns has changed. Any secondary indexes containing collated strings must be dropped before upgrading to this version and then re-created after upgrading. Note that this applies only to secondary indexes, not to primary indexes. #14528
Any row with a
-0
FLOAT
orDECIMAL
value in a primary key or index must be deleted before upgrading to this version and then re-inserted after upgrading. Otherwise, the row containing-0
will show up during table scans, but it will not be possible to delete it or select it as part of an index scan.
If you suspect -0
values are present but do not know where, an alternative approach is to use cockroach dump
to back up tables with FLOAT
or DECIMAL
columns, drop the tables before upgrading, and then use the backup files to recreate the tables and indexes after upgrading. #14528
The
experimental_strptime
andexperimental_strftime
functions are deprecated and will be removed in a future release. If you are currently using these functions, please let us know here.Several undocumented environment variables have been removed. #14786 #14797
Clusters which have used the
COCKROACH_PROPOSER_EVALUATED_KV
environment variable require special care when upgrading to this release; contact us for more information. #14773
Build Changes
- Building CockroachDB from source no longer uses
$GOPATH/bin
for anything except the final binary produced bymake install
. #14629 - Developers should use
make generate
instead ofgo generate
to ensure the correct tool versions are used. #14672
SQL Language Changes
- SQL variables can now be reset to their default values with the
RESET
statement orSET x TO DEFAULT
. #14105 - Schema changes within transactions are now restricted. Certain combinations of schema changes with other statements (which would previously hang) will now return an error. It is recommended that DDL statements be issued outside of transactions, or as the only statement within a transaction. #14368
- Subqueries are now supported as the source of
UPDATE
statements. #14611 - Timestamp parsing now understands the format used by JDBC's
setTimestamp
. #14712 INTERVAL
values larger than a month now use the suffixmon
instead ofm
(which is also used for minutes). Intervals can now be parsed from strings containing decimals and negative numbers. #14534INTERVAL
values now support multiplication and division byFLOAT
values. #14614- Arithmetic operations on integers now check for overflow. #14682
- Comparisons involving tuples with non-identical types are now allowed whenever the comparison of the individual elements would be allowed. #14674
- The implementation of the
experimental_strptime
function is now consistent across platforms. #14801 BETWEEN
now supports any combination of types that would be supported by individual comparison operators. #14754- Handling of untyped literals during overload resolution is now more consistent. #14593
ROLLBACK TO SAVEPOINT
is now allowed at any time, not only after receiving a "retry transaction" error. #14538CREATE TABLE AS SELECT
now returns the number of rows affected to the SQL client driver. #13187ALTER TABLE .. ADD CONSTRAINT
can now be used to add a self-referential foreign key. #14711- The
RETURNING NOTHING
clause can now be used outside of a transaction, although it does not provide any performance benefit in this case. #14551 - SQL user names are now required to start with a letter, contain only letters, numbers, and underscores, and be no longer than 63 characters. #14525
- The
BYTES
type name is now reported asbytea
inpg_catalog.pg_type
for compatibility with PostgreSQL. #14495 - The PostgreSQL type IO functions (like
int8in
,int8out
,int8send
, andint8recv
) have placeholder implementations for compatibility with some ORMs. #14529
Command-Line Interface Changes
- The
cockroach zone set
command now recognizes the special zone names.meta
,.timeseries
, and.system
to set configurations for system metadata. #14740 - The
cockroach start
command no longer uses theCOCKROACH_PORT
environment variable; the port must be set on the server's command line (similar to--host
and other flags). #14612 - The
cockroach quit
command is now more robust. #14775 - Command history no longer corrupts previous commands when normalizing them. #14496
- Commands entered as a single line are now saved together in the history. #14846
- The config file generated by
cockroach gen haproxy
now enables health checks for the server. #14624 - The
--store
and--log-dir
flags now reject arguments starting with~
that were not expanded by the shell. #14746
Admin UI Changes
- The Node List page has been improved. #14395
- A new
node-id
metric with labels for the node's address is now exported for use in external monitoring systems. #14544 - The
/debug/
pages are now accessible only fromlocalhost
by default. Set the environment variableCOCKROACH_REMOTE_DEBUG=any
when running the server to allow remote access. #14647 #14675
Performance Improvements
- A new, more efficient format is now used for indexes with the
STORING
clause. Existing indexes will still work, but will need to be dropped and recreated to get the benefits of the new format. #14758 - A single
TimestampCache
is now shared by all replicas on a store, providing better control over memory usage and better support for large transactions. #14489 - Reduced memory used by the
TimestampCache
. #14516 #14514 - Replica garbage collection is now much more efficient. #14391
- Adding and dropping columns now uses the distributed SQL engine. #14331
- The health of inter-node connections is now monitored using HTTP/2 ping frames instead of regular RPCs. This ensures that HTTP flow control cannot cause a connection to be considered unhealthy. #14424
- The limit on the number of concurrent inter-node RPCs has been increased. #14785
- The bandwidth used by range snapshots is now limited to 2MB/sec by default to reduce impact on live traffic. #14718
- If a single row grows larger than the configured maximum range size, the split queue will no longer spin trying to split the range repeatedly. #14654
- Several kinds of tracing and logging have been disabled by default. #14677
Bug Fixes
- Fixed an issue with
UPDATE
andDELETE
on tables withSTORING
indexes. Indexes affected by this bug will need to be dropped and recreated. #14643 BETWEEN
now handlesNULL
in the same way as other comparison operators. #14686- Fixed a bug with comparisons involving division with a constant negative divisor. #14702
INSERT ON CONFLICT DO UPDATE
no longer uses an error-prone optimization. TheUPSERT
statement is now faster than the equivalentINSERT ON CONFLICT DO UPDATE
statement. #14485- Schema changes now abort more reliably when encountering errors. #14025
- Joining nodes of two different clusters is now detected more reliably. #14475
- Fixed a panic during prepared
UPDATE
statements. #14481 FLOAT
andDECIMAL
values in primary keys and indexes now consider0
and-0
equal (although the sign will correctly be retained). #14528DECIMAL
values in primary keys and indexes no longer have zeros truncated. If a secondary index contains aDECIMAL
value with trailing zeros, you can drop and re-create the index to have the value returned correctly when the index is used. #14528- Fixed a crash when assigning with the
DEFAULT
keyword inUPDATE
statements. #14640
Doc Updates
- Updated the Start a Local Cluster tutorial to better highlight core CockroachDB capabilities such as automated replications and fault tolerance. #1257
- Expanded the Build a Ruby App with CockroachDB tutorial to feature the ActiveRecord ORM. #1234
- Clarified the
--store
flag in thecockroach start
documentation. #1243 - Updated the build from source instructions to use a source tarball instead of the
cockroach
GitHub repository. The source tarball downloads faster and doesn't need to be extracted in theGOPATH
. Developers who want to contribute to CockroachDB should use the instructions in CONTRIBUTING.md instead. #1209 - Added Google Cloud Spanner to the CockroachDB in Comparison chart. #1264
Contributors
This release includes 215 merged PRs by 27 authors. We would like to thank the following contributors from the CockroachDB community, especially first-time contributors Amos Bird and Daniel Upton.
- Amos Bird
- Christian Meunier
- Daniel Upton
- songhao
beta-20170330
Release Date:
SQL Language Changes
DEFAULT NULL
column modifiers no longer produce type errors. #14371- Consecutive write statements using the
RETURNING NOTHING
clause are now executed in parallel. #14188 DECIMAL
support for NaN, Inifinity, and negative zero. #14302
Command-Line Interface Changes
- The separate
INFO
,WARNING
, andERROR
log files have been replaced with a single file. #14347
Admin UI Changes
- The node list page now includes information about whether nodes are alive or dead. #14258
- Changed the names of some metrics related to lease transfers. #14319
Bug Fixes
- Fixed an inconsistency that could occur with one-phase transactions using the
SNAPSHOT
isolation level. #14401 - Prevented unexpected write intents on node liveness records, which could cause the cluster to become unavailable. #14346
- Fixed two "span use after Finish()" errors. #14227
- Fixed a rare panic in
raft.step()
. #14344
Performance Improvements
- Reads with timestamps in the past no longer block writes. #14342
- Improved node draining to prevent hanging
DROP
statements after a node restart. #14341 - Added support for compressing inter-node traffic with snappy. This will be enabled in a future release. #14239
Doc Updates
- Expanded the Build a Node.js App with CockroachDB tutorial to feature the Sequelize ORM. #1225
- Expanded Manual Deployment tutorials to cover HAProxy load balancing. #1213
- Expanded Digital Ocean and GCE deployment tutorials to cover cloud platform-managed load balancing. Load balancing guidance for AWS and Azure coming soon. #1213
- Improved guidance on using the
cockroach gen
command to generate CockroachDB resources, including example SQL data and an HAProxy configuration file for a running cluster. #1213
Contributors
This release includes 56 merged PRs by 18 authors.
beta-20170323
Release Date:
Backwards-Incompatible Changes
- The
ALTER TABLE SPLIT AT
syntax has changed to support multiple splits with one command. Existing uses ofALTER TABLE t SPLIT AT (x, y)
should be changed toALTER TABLE t SPLIT AT VALUES (x, y)
. #14281
Installation Changes
- The Homebrew formula has moved; to install CockroachDB with
brew
, usebrew install cockroachdb/cockroach/cockroach
.
General Changes
- CockroachDB now uses
jemalloc
version 4.5.0. #14287
SQL Language Changes
- Collated strings are now fully supported and may be stored in columns. #13609
- The new
isnan()
function and special syntaxIS NAN
andIS NOT NAN
can be used to detect floats that areNot-a-Number
. #14248 - Variance and standard deviation calculations for integers and decimals now use additional precision internally. #14013
- Decimals with precisions greater than 16 now work correctly. #14304
CREATE TABLE AS
now works properly with NULL values. #14247- The
SHOW application_name
statement is now supported. #14085 - CockroachDB now reports its version in two new places so that clients can distinguish CockroachDB from PostgreSQL: in the
crdb_version
variable in the network handshake, and in a new tablecrdb_internal.build_info
. #14145 ALTER TABLE SPLIT AT
no longer reports an error if the table is already split at the designated point. #14273- Casts involving OID and
regclass
types now behave more consistently with PostgreSQL. Theoid()
function is now available. #13965 #14022 #14115 #14260 - Placeholder syntax may now be used for OID values. #14255
- Types with modifiers can now be cast to
::regtype
. #14030
Command-Line Interface Changes
- A new command
cockroach gen haproxy
is now available to generate anhaproxy
configuration file that can be used to access the cluster. #14205 - The
cockroach start
command now supports a--pid-file
flag, which names a file to which the process ID will be written when the server is ready to handle requests. #13996 - If any environment variables used by
cockroach
are set but cannot be parsed, this is now treated as a fatal error. #14124
Admin UI Changes
- The log view now shows logs for the requested node. #13947
- The custom time range selector now uses UTC to match the graphs. #14007
- The admin UI now uses relative paths for all links and respects cookies, allowing it to be run behind authenticating proxies. #14039
- The guideline displayed when hovering over a graph is now positioned correctly. #14008
Bug Fixes
UPSERT
statements no longer incorrectly produce the error "cannot affect row a second time". #10478- The replica allocator now explicitly recognizes when a node's health is unknown, and avoids situations in which a range could become critically under-replicated. #14206
- Fixed a problem with transaction conflicts immediately after a split that could cause 100% CPU usage. #14305
- The rebalancing system is better able to move replicas to match requested constraints. #13973
- Fixed a race that could lead to a panic when replicas are being moved frequently. #14306
SHOW TABLES
no longer fails while a table is being dropped. #14278- Fixed a crash in some
EXPLAIN
statements. #14244 - Name resolution no longer fails if non-existent databases are present in the search path. #14006
- Logging of "node joined the cluster" events for the UI is more reliable. #14179
- Memory accounting on macOS now correctly reports memory allocated by C code. #14287
Performance Improvements
- Range leases are now transferred to the replica closest to the source of load, when possible. This improves performance in geographically-distributed clusters. #14268
- The replica allocator will now actively attempt to move replicas away from no-longer-valid placements when the zone configuration changes. #14106
- Improved the performance of write-heavy workloads. #14138
- Improved caching of range descriptors. #14217
- Reduced overhead in the command queue. #13982
- CockroachDB now enables TCP keepalives on its sockets, improving responsiveness to clients that have disappeared (or load balancers with short timeouts). #14063
- Index backfill now only reads the columns necessary to perform the backfill. #14271
Doc Updates
- Expanded the tutorial on orchestrating CockroachDB with Docker Swarm to cover both secure and insecure clusters. #1184
- Added guidance on importing data from PostgreSQL. #1200
- Added OS-specific instructions for starting a local CockroachDB cluster in Docker. #1167
- Improved the install from binary instructions to include moving the binary into the
PATH
. #1196
Contributors
This release includes 156 merged PRs by 23 authors. We would like to thank first-time contributor Jonas from the CockroachDB community.
beta-20170309
Release Date:
General Changes
SQL Language Changes
- Table names are now released as soon as the
DROP TABLE
statement executes, instead of being held until the asynchronous cleanup finishes. #13908 - Most write statements now accept a
RETURNING NOTHING
clause to indicate that the query should not return a result (not even the number of rows affected). This will be used in the future to enable optimizations. #13802 - PostgreSQL-style duration formats are now parsed case-insensitively. #13748
- Tables with no columns are now handled correctly in the network protocol. #13765
COPY
no longer requires the input data to end in a newline. #13858SHOW CONSTRAINTS
no longer includes constraints involving hidden columns. #13870- It is no longer possible to drop system tables. #13911
- The
DESC
modifier can now be applied to columns in aPRIMARY KEY
orUNIQUE
clause during table creation. #13924
Command-Line Interface Changes
- The
cockroach dump
command now takes an--as-of
flag, which can be used to make a backup as of a particular time. - When starting a node, the details printed to
stdout
are now written to the node'sINFO
log as well. Also, these details now include node attributes and locality. #1143, #1144
Bug Fixes
- Fixed (again) a bug in error handling that could causes ranges to get stuck if an error occurred during a rebalance. #13763
- Work around a bug that could cause GRPC connections to get stuck in a broken state. #13822
- Panic stack traces are now written to the
INFO
log file by default instead of tostderr
. #13890
Performance Improvements
- Improved performance in high-contention scenarios by introducing a queue to wait for conflicting transactions to finish. This also reduces the likelihood of transaction restarts due to write/write conflicts. #13501
- A new lease implementation is now used for most ranges, reducing the number of writes that must be done just to maintain a lease. #13826
- Reduced the occurrence of
AmbiguousResultError
by waiting for pending RPCs to complete before returning. #13800 - Changed some mutexes to
RWMutexes
. Removed some instrumentation of mutex timing. #13697 cockroach dump
now works in larger batches. #13812- Failed snapshots no longer disrupt regular raft messages. #13816
- Increased flow control parameters for GRPC connections, improving performance on high-latency links. #13840
- Increased limits on in-flight raft messages. #13862
- Range leases are now proactively transferred away from draining nodes. #13792
- Avoid sending redundant PushTxn calls in intent resolution. #13955
Doc Updates
- Added an FAQ on auto-generating unique IDs in CockroachDB. #1126
- Expanded guidance on using a SQL table as an alternative to direct key-value access. #1122
- Added details about using the
BIT
type to constrain integers based on their corresponding binary values. #1116 - Added details about building a binary that excludes enterprise functionality covered by the CockroachDB Community License (CCL). #1130
Contributors
This release includes 124 merged PRs by 21 authors. We would like to thank first-time contributor Dmitry Vorobev from the CockroachDB community.
beta-20170223
Release Date:
SQL Language Changes
- Fixed parsing of interval constants with precision modifiers such as
INTERVAL '5' YEARS
. #13702 - String literals containing
true
,false
, or their synonyms (but not placeholders or other expressions of type string) can now be used where aBOOL
is required. #13685 - The underlying implementation of the
DECIMAL
type has been replaced. This may change the results of some calculations. The default rounding behavior forDECIMAL
values is now "half away from zero", which is consistent with PostgreSQL. #13551 - The column headers in the results of
SHOW
commands are now lower-case to match PostgreSQL. #13484 - The
pg_index.indkey
column is now anint2vector
, improving compatibility with Sequelize. #13484 - Improved support for arrays (still limited to the
pg_catalog
tables). #13636 #13535 - The output of
SHOW USERS
is now sorted. #13661
Admin UI Changes
- A new graph displays the execution latency for SQL statements. #12790
- A new "All Events" page displays cluster history. #13093
- New metrics for round-trip time between nodes are now recorded. #13533
- Fixed-width fonts now correctly use Inconsolata. #13631
Bug Fixes
- Fixed a bug in error handling that could causes ranges to get stuck if an error occurred during a rebalance. #13605
- Retry table lease errors during schema changes, preventing them from getting stuck. #13606
- Inter-node connections are now closed on heartbeat timeouts, improving the handling of network partitions. #13654
Performance Improvements
- Metadata for queries using unqualified table names is now cached, speeding up these queries by 130%. #13635
- Eliminated an unnecessary sort phase in table scans, making
cockroach dump
usable on larger tables. #13703 - Leases and replicas will no longer be transferred to nodes that are draining. #11724 #13601
- Reduced unnecessary copying and allocations. #13660 #13649
Contributors
This release includes 57 merged PRs by 19 authors.
beta-20170216
Release Date:
SQL Language Changes
- The search path for table names can now be set with
SET SEARCH_PATH
. #13313 - All built-in functions are now in the global namespace (instead of
pg_catalog
). #13404 - The
pg_extension
table and thecurrent_database
function are now supported. Thepg_type
andpg_namespace
tables have had some changes to improve compatibility with ActiveRecord. #13429 - The columns used in foreign keys are now tracked more accurately. #13439
Admin UI Changes
- The correct fonts are now used. #13539
Bug Fixes
- Replicas that fall too far behind no longer get stuck in a state in which they can no longer catch up. #13515
- The
cockroach.LEVEL
symlinks created in the log directory now work. #13585
Performance Improvements
- Reduced memory allocations in various places. #13466 #13487 #13455 #13579
- The minimum number of file descriptors has been reduced to 1956 (1700 per store + 256 for networking) so that CockroachDB can be run more easily on platforms with a default limit of 2048 file descriptors. #13462
UPSERT
is now faster in many cases. #13488 #13500
Doc Updates
- The sample Kubernetes config is now able to recover from a situation in which all nodes are down at once. #13580
- The Build a Java App with CockroachDB tutorial now covers using the Hibernate ORM in addition to the jdbc driver. #1100
- The Start a Cluster in Docker tutorial now offers OS-specific instructions, with specific improvements for running on Windows. #1095
Contributors
This release includes 60 merged PRs by 18 authors. We would like to thank first-time contributor Jason Chu from the CockroachDB community.
beta-20170209
Release Date:
Build Changes
- Official binaries for Linux now support older Linux distributions, including RHEL 6. #13102
- CockroachDB now uses RocksDB 5.0.2. #12913
SQL Language Changes
- The
unnest()
function is now supported. #13154 - It is now possible to join a set-returning function like
generate_series()
with itself. #13140 - The timestamp parser now accepts an additional format. #13159
- The output of
EXPLAIN
has been improved. #13216 #13221 - Hex string literals (
X''
) can now contain byte sequences that are not valid UTF-8. #13287 COPY
now works outside transactions. #13400- Fixed some edge cases with the
IN
operator. #13444 - The
pg_type
table now contains entries with the same names as PostgreSQL, such asint2
,int4
, andint8
instead of justinteger
. #13355 - The
pg_backend_pid
,obj_description
, andshobj_description
functions and thepg_inherits
,pg_foreign_table
, andpg_foreign_server
tables now have placeholder implementations for compatibility with some clients. #13097 #13181
Command-Line Interface Changes
- The
--pretty
flag ofcockroach sql
has been removed, and replaced with a--format
flag that supports multiple output formats. The commandset display_format
can be used to change the format during a session. #13171 - The current database name is now shown in the prompt. #12747 #13379
- Non-interactive usage of
cockroach sql
is much faster when the input file contains very long lines. #13174
Admin UI Changes
Performance Improvements
- All columns in newly-created tables are placed in the same column family by default. #13198
- Scans with a
LIMIT
no longer interfere with writes to rows that match theWHERE
clause but were not returned due to theLIMIT
. #13349 - Performance is more stable during splits. #13208
- Reduced unnecessary disk access in read-only transactions. #13367
- Reduced log spam. #13388
Bug Fixes
- Nodes now retry at startup if they are unable to allocate a node ID. #13148
- Improved gossiping of system configuration data. #13167
Doc Updates
- Added language-specific tutorials on building an app with CockroachDB.
- The Go tutorial now covers using the Go pq driver or the GORM ORM. #1069
- The Python tutorial now covers using the psycopg2 driver or the SQLAlchemy ORM. #1079
- The Ruby tutorial now provides a code sample demonstrating transaction retry logic. #1068
- New documentation on the current methods of importing data into CockroachDB. #1076
- New documentation on how name resolution works in CockroachDB. #1050
- New documentation on using the
EXPLAIN
statement to analyze the query plan ofDELETE
,INSERT
,SELECT
, orUPDATE
statements. #1073 - New FAQ on how CockroachDB is both highly available and strongly consistent without violating the CAP theorem. #1061
- Expanded documentation on simple
CASE
expressions and searchedCASE
expressions. #1036
Contributors
This release includes 132 merged PRs by 24 authors. We would like to thank the following contributor from the CockroachDB community:
- Panos Mamatsis
beta-20170126
Release Date:
License Change
- CockroachDB is now covered by the CockroachDB Community License. A pure open-source (APL2) version can be obtained by building from source with the
make buildoss
build target. See our blog post for more details.
Backwards-Incompatible Changes
- TLS 1.2 is now required to communicate with a CockroachDB server in secure mode. #12898
- The hex string syntax
X'0d0a'
now produces byte values instead of string values, so it can accept non-UTF-8 input. #13094
Build Changes
- Cockroachdb now uses Go 1.7.4. #12881
New Features
- The location of replicas, both when first added and when rebalanced to maintain cluster equilibrium, is now influenced by
--locality
settings at the node-level and more expressive zone configuration constraints. #13119 - Old log files are now garbage collected automatically. #13083
SQL Language Changes
- The
information_schema.statistics
table and the output ofSHOW INDEXES
now include columns that are added to the index implicitly (the primary key is an implicit part of secondary indexes). These columns are marked by a newImplicit
column. #12801 - The
COPY
statement is now more compatible with PostgreSQL. #12723 - CockroachDB now advertises the
integer_datetimes
parameter, improving compatibility with JDBC. #12842 - The
sum()
function now works withINTEGER
values. #12938 - The
format_type()
ndcol_description()
functions are now supported. #12967 #12978 - The
pg_catalog.pg_enum
table now exists (although it is always empty because we do not yet support enum types). #12972 - The
pg_catalog.pg_collation
table is now supported, along with thepg_attribute.attcollation
andpg_type.typcollation
columns. #12983 - The
OID
andNAME
types are now supported (and used inpg_catalog
) for compatibility with PostgreSQL. #12641 SHOW COLUMNS
now includes a summary of indices that the column is a part of. #12907
Command-Line Interface Changes
- The
cockroach dump
command can now dump multiple tables at the same time. #12759 - The
cockroach dump
has a new flag,--dump-mode
, which can be used to dump the schema or the data for a table separately. #12759 - Timestamps are now displayed in a format which is accepted by the SQL parser. #12886
- The
--pretty
flag has been removed from commands that never used it. #12900 - An error is raised when too many positional command-line arguments are provided. #12901
Admin UI Changes
- When the cursor is over a graph, a vertical line is shown to mark the same time on all graphs. #12645
Performance Improvements
- Table leases are now released when a node shuts down cleanly. #12501
- Miscellaneous query optimizations. #12617
- The gossip network reaches equilibrium faster in larger clusters. #12880 #12920 #12974
- When a node is shutting down, SQL connections are closed when they become idle. #12952
- Nodes now refuse to accept new ranges if they are falling behind on the ranges they already have. #13043
Bug Fixes
UPDATE
statements using a secondary index no longer cause server crashes during schema changes. #12794- Improved accuracy and performance of node liveness heartbeats. #12864
- Reduced the occurrence of "ambiguous result" errors. #12557
- The server no longer ignores signals during initialization. #12743
- It is now possible to drop a table with a self-referential foreign key without the
CASCADE
modifier. #12958 - Additional data consistency checks have been temporarily enabled. #12994
- Fixed a crash when retryable errors are returned inside subqueries. #13028
- Node ID allocation is now retried if it fails when a node first starts. #13107
Doc Updates
- Added documentation on SQL Value Expressions, Table Expressions, and Constants. #1008
- Added documentation on String Collation. #974
- Update the
cockroach dump
documentation to cover dumping multiple tables as well as choosing whether to dump a table's schema, data, or both. #1010 - Updated the
cockroach zone
documentation to explain how node-level locality settings and zone configuration constraints influence the location of replicas, and added scenario-based examples. #1027 - Updated cluster topology guidance in Recommended Production Settings. #1027
Contributors
This release includes 115 merged PRs by 25 authors. We would like to thank the following contributors from the CockroachDB community:
- DiSiqueira
- Jason E. Aten
beta-20170112
Release Date:
Upgrade Notes
- This release cannot be run concurrently with older beta releases. Please stop all nodes running older releases before restarting any node with this version.
SQL Language Changes
- The
ALTER TABLE VALIDATE CONSTRAINT
statement can now be used to validate foreign keys in theUNVALIDATED
state. #12682 ALTER TABLE DROP COLUMN
can now drop columns that are involved in indexes. If the index includes columns other than the one being dropped, theCASCADE
modifier is required. #12782- Leading zeros in numeric literals are now ignored instead of causing the number to be parsed as octal. #12803
- Collated strings can now be cast to the non-collated string type. #12820
- Arithmetic with aggregated functions no longer crashes when the input table is empty. #12733
- The
SHOW COLUMNS
statement now works for non-root users with the appropriate permissions. #12776 - The
information_schema.statistics.NON_UNIQUE
field is now set correctly. #12793 - It is now possible to use
EXPLAIN
statements as an input to other queries using a new square bracket syntax:SELECT MAX(level) FROM [EXPLAIN SELECT * FROM kv ORDER BY v]
. #12637 - The format of SQL error messages has been standardized. #12401
Command-Line Interface Changes
- The prototype
cockroach backup
andcockroach restore
commands have been removed (backup and restore functionality will be provided through SQL statements instead). #12788
Admin UI Changes
- The set of graphs displayed in the UI has been changed. #12797
- The node list and cluster pages has been updated. #12643 #12719
- A new metric
raftlog.behind
is now reported to track how far behind raft processing is on a node. #12800
Bug Fixes
- Ranges can no longer be rebalanced away from their current lease holder. #12598
- Eliminated a source of incorrect "not lease holder" errors. #12542
- Reduced spammy "purgatory" log messages. #12528
Performance Improvements
- The maximum allowable clock offset has been increased from 250ms to 500ms. #12821
- Replica destruction is now much faster. #12745
- Raft snapshots and replica destruction no longer run concurrently. #12737
- Raft snapshots are now managed by a new internal queue. #12686
- Raft logs are now garbage collected more aggressively. #12686
- Replicas that are behind are no longer considered targets for lease rebalancing. #12736
- Tuned some RocksDB parameters. #12677
Doc Updates
- Added a Java code sample for transaction retry logic to the Build a Java App with CockroachDB tutorial. #987
- Added documentation on SQL type conversions. #977
Contributors
This release includes 60 merged PRs by 22 authors. We would like to thank the following contributors from the CockroachDB community:
- songhao
beta-20170105
Release Date:
General Changes
- CockroachDB now uses a more recent version of GRPC. #9697
SQL Language Changes
FILTER
clauses for aggregate functions are now supported. See theSELECT
documentation for examples. #10146- Columns can now be created with collated string types, although these columns cannot yet be indexed or part of the primary key. #12294
INTERVAL
values can now be added toDATE
values. #12428TIMESTAMP
values can now be compared toDATE
values. #12431DATE
literals in views now work correctly. #12450- Parsing of
INTERVAL
values is now more consistent with PostgreSQL. #12559 #12566 ORDER BY
now works correctly when sorting by the result of an aggregate function. #12185ORDER BY
now returns an error in more cases when its arguments are ambiguous. #12255- The
experimental_unique_bytes()
function has been removed. #12228 - The
extract()
function now supportsDATE
values. As a consequence,extract()
no longer supportsSTRING
values, which must now be explicitly cast toTIMESTAMP
orDATE
. #12479 - The
pg_indexes.pg_indexes
now includes theoid
column. #12359 - The
pg_catalog.pg_get_indexdef
function is now supported. #12359 - The
array_agg()
function now handlesNULL
values correctly. #12534
Admin UI Changes
- Metrics for the number of live nodes and the number of Raft commands are now reported. #12296
- Improved the time selector. #12360
- Added new summary statistics. #12486
- Graph axes have been improved. #12427
- The event list has been updated. #12638
Performance Improvements
- When a node stops responding to heartbeats, non-heartbeat Raft traffic to that node is suspended until it becomes responsive again. #12631
- Improved logic for transferring Raft leadership to coincide with the lease holder. #12323
- Fixed a thundering herd problem after a node goes down. #12352
- Prevented unnecessary retries of Raft commands. #12487
- Improved lease rebalancing in deployments with multiple stores per node. #12565
- Reduced the number of
cgo
calls made to RocksDB. #12343
Bug Fixes
- Commands are now canceled correctly if the replica tracking them is removed while they are pending. #12313
- Raft groups are always initialized when handling messages. #12465
- Improved error handling for invalid UTF-8 strings. #12194
- Fixed several bugs in
FULL
andRIGHT OUTER JOIN
. #12364 - Fixed a regression in
OUTER JOIN
operations with predicates. #12350 - Fixed type checking in
window
definitions. #12483 - Fixed a bug when adding columns with families to tables created by certain older beta versions of CockroachDB. #12475
- It is now possible to disable logging output to files with
--log-dir=
. #12662 - When logging to both
stderr
and files, all desired logging output is now properly emitted to files, not only tostderr
. #12662
Internal Changes
- A framework has been introduced for migrating existing clusters to new definitions for internal tables. #11658
Doc Updates
- Added a tutorial and sample configs for Monitoring CockroachDB with Prometheus, Grafana, and Alertmanager #928, #12288
- Updated the Orchestrate CockroachDB with Kubernetes tutorial and sample configs for Kubernetes 1.5 #940 #12536
- Descriptions have been added to all built-in functions. #12533
- Added an interactive asciicast to the Build a Python App with CockroachDB tutorial. #937
- Added documentation on each
ALTER TABLE
sub-statement: #950 - Added documentation on the
SHOW USERS
statement. #939 - Clarified that password-based authentication cannot be used for the
root
user. #938
Contributors
This release includes 122 merged PRs by 25 authors. We would like to thank the following contributors from the CockroachDB community:
- Haines Chan
beta-20161215
Release Date:
General Changes
- CockroachDB now uses RocksDB version 4.11.2. #9616
SQL Language Changes
- Additional support for standard database introspection required by popular ORMs. These features apply to built-in tables only; eventually, they will be made available for user-generated tables as well.
- The
array_agg
aggregate function is now supported for ints and strings. #12186 - The
ANY
,SOME
andALL
array operators are now supported. #12102 GROUP BY
can now be used with columns of typeARRAY
. #12198
- The
- The
SET
command now recognizes thesearch_path
,client_encoding
,standard_conforming_strings
, andclient_min_messages
variables for compatibility with PostgreSQL. Setting these variables currently has no effect. #12149 - The
SHOW server_version
command now returns the version of PostgreSQL that CockroachDB most closely resembles. #12149
Admin UI Changes
- Aggregated rates are now computed correctly. #12200
- Various stylistic improvements. #12118 #12152
- Metrics have been added for lease-related operations. #12205
Performance Improvements
- Raft snapshots are now applied one at a time. #12192
Bug Fixes
- The repair system now detects unresponsive nodes more accurately in the event of asymmetric partitions. #12178
- String arrays are now quoted correctly on the wire. #12268
Doc Updates
- Each SQL constraint now has a dedicated page of documentation. #901
- The
cockroach zone
documentation now offers minimum and maximum recommendations for thettlseconds
setting, which defines the number of seconds overwritten values are retained before garbage collection. #912
Contributors
This release includes 62 merged PRs by 18 authors.
beta-20161208
Release Date:
SQL Language Changes
- The
pg_catalog
andinformation_schema
databases now include information about the current database only, unless the user isroot
. #11694 - The
pg_catalog.pg_range
table is now supported. #11725 - The
pg_get_userbyid
function is now supported. #12162 - The
SHOW TABLES
,SHOW DATABASES
,SHOW GRANTS
andSHOW COLUMNS
statements are now aliases for queries on theinformation_schema
database. #10196 - Empty passwords are no longer allowed in the
CREATE USER WITH PASSWORD
statement. #11781
Command-Line Interface Changes
- Log file names have changed. The new format is
cockroach.kenabook.kena.2016-11-28T20_00_35Z.009524.ERROR.log
. #11666
Admin UI Changes
- On the Cluster Overview page, added a Summary section showing total nodes and capacity used, and updated the overall navigation and style. #11696 #11754
- Several "allocator" metrics have been replaced with a new "underreplicated range" metric. #11733 #11983
- The "ranges available" metric has been replaced with a "ranges unavailable" metric, which is computed differently. #11760
- New metrics have been added for the replication queue and replica GC queue. #11753 #11785
- New metrics have been added for RPCs. #11711
- New metrics have been added to track commands that have been stuck for a long time. #12106
Performance Improvements
- Range leases are now balanced across the nodes in a cluster. #11757
- Raft heartbeats are once again coalesced into one message per pair of nodes instead of per range. #11757
- Persisting the applied index is now faster. #9993
- The replication queue no longer tries to reprocess the same range repeatedly. #11982
- Limited frequent reprocessing of ranges for time series maintenance and consistency checks. #10665
- The time series maintenance queue no longer sends commands when it has nothing to do. #11762
- The
pow()
function is now faster when small numbers are raised to very large powers. #11738 JOIN
queries now only scan the columns they need. #11736- Micro-optimized logging and removed some noisy log events. #11778
Bug Fixes
- Fixed a panic when sending a raft message fails. #11985
- Fixed a memory spike that could occur during asymmetric partitions. #12100
DROP DATABASE
now works when foreign key constraints are present. #12036DROP DATABASE
no longer hangs when subqueries have been used. #11730- Requests no longer get stuck forever after a timeout. #12000
- Comparisons of SQL tuples now work for all types. #10475
Contributors
This release includes 101 merged PRs by 19 authors. We would like to thank the following contributors from the CockroachDB community.
- songhao
- yznming
beta-20161201
Release Date:
Upgrade Notes
Due to changes in the on-disk format of internal range leases, this release cannot be run concurrently with any prior release. All servers running older versions must be stopped before starting any node with this version. #10420
We realize that "stop the world" upgrades are overly interruptive and are actively working on infrastructure improvements to drastically reduce the need for such upgrades in the future.
Build Changes
- CockroachDB now vendors its dependencies, so building from source no longer interferes with other project in the
$GOPATH
. #9900
SQL Language Changes
- Adding a
FOREIGN KEY
constraint now automatically creates necessary indexes. #9572 - The
pg_catalog.pg_roles
,pg_catalog.pg_description
,pg_catalog.pg_settings
, andpg_catalog.pg_index
tables are now supported. #10377 #10381 #10293 #10548 #10592 - The
pg_catalog.pg_depend
table is now partially supported (just enough to supportpgjdbc
). #10696 pg_catalog
tables now report databases as belonging to PostgreSQL-compatible namespaces. This is for compatibility only; CockroachDB does not have a notion of namespaces. #11603- The
pg_catalog.pg_get_expr
andpg_catalog.pg_generate_series
functions are now supported. #10952 #11214 - The
conkey
andconfkey
columns of thepg_catalog.pg_constraint
table now return real integer arrays. #10584 - New functions
from_ip()
andto_ip()
convert between binary and textual IP address formats. #10349 - Tuple types can now be returned by queries. #10380
- The SQL standard interval format
Y-M-D
is now supported. #10499 - The
array_length
,array_upper
, andarray_lower
functions are now available. #10565 - The
to_uuid
andfrom_uuid
functions are now available. #10541 - The
pow()
anddiv()
functions now work when both arguments are integers. #10538 - The
ARRAY[]
constructor syntax is now supported. #10585 - The
COLLATE
operator is now supported. Collation support is still incomplete and will be improved in upcoming releases. #10605 - The
current_schema
function is now supported. #10707 - The
SET APPLICATION_NAME
statement is now supported. This is a write-only variable which is used by some frameworks but has no effect. #10725 - The
CREATE DATABASE
statement now accepts the optionsTEMPLATE
,LC_COLLATE
, andLC_CTYPE
for compatibility with PostgreSQL, although the values available for these options are limited. #10775 - The
SELECT
statement now supports theWITH ORDINALITY
modifier to generate row numbers. #10558
Command-Line Interface Changes
- Temporary directories are no longer created automatically for logging. Commands other than
cockroach start
log tostderr
if no--log-dir
flag is given, andcockroach start
writes to the directory of the first store. Various combinations of--log-dir
,--logtostderr
, and--alsologtostderr
now work in more sensible ways. #10675 #10926 #10962 - The
cockroach sql
prompt now indicates the status of the current transaction (if any). #10866 - The
--password
flag for thecockroach user set
command no longer accepts the new password as a command-line argument; instead this flag is a boolean to determine whether a password should be created for the user. The password is always read fromstdin
. #10680 - The
cockroach user set
command no longer prompts for passwords in insecure mode unless--password
is given. #10547 - The
cockroach debug compact
command now always rewrites all data, allowing it to pick up configuration changes. #10532
Admin UI Changes
- The design of the navigation elements has been updated. #10611
- The design of the Database tab has been updated. #10552
- Syntax highlighting is now used when displaying
CREATE TABLE
statements. #10579 - The UI no longer attempts to display information about the virtual databases
information_schema
andpg_catalog
. #10920 - Metrics for the fraction of available and fully-replicated ranges are now computed more accurately. #11213
Performance Improvements
- Increased the speed of some mathematical operations (Log, Pow) on
DECIMAL
values. #11669 - Reduced rebalancer thrashing by dynamically adjusting how often store capacities are gossiped. #11662
- Adding new replicas is now prioritized over removing dead ones. #10492 #10683
- Replicating ranges to a new node is now more reliably performed back-to-back. #10440 #10749
- The rebalancing system is now less prone to thrashing. #10761
- Raft log truncation is now aware of pending snapshots. #10482
- Raft snapshots are now applied more efficiently. #10931
- Raft now sends log entries in smaller batches. #10929
- Replica garbage collection is now triggered more reliably by replication changes. #10500
- Old replicas that are blocking other operations are now prioritized for garbage collection. #10426
- Small clusters now run their replica scanners more frequently by default. #10433
- Reduced contention in the command queue for multi-range operations. #10470
- Operations that have already expired are no longer added to the command queue. #10487
- Reduced allocations for SQL row data. #10534
- Reduced memory allocations when encoding dates and times. #10531
- Parsing hexadecimal literals using the
x''
syntax is now more efficient. #10660 - Time series pruning is now more efficient. #10682
- Commands that have been canceled by clients no longer accumulate in the internal command queue. #10772
- When a command that has been retried on multiple replicas succeeds on any of them, any in-flight attempts on the other replicas is canceled. #10970
- The fast-path for local "RPCs" now uses goroutines to avoid blocking the caller. #11196
Bug Fixes
- Fixed a bug that caused over-aggressive Raft log truncation, which in turn led to an excessive number of Raft initiated snapshots. #11720
- Fixed a bug that caused data corruption when upgrading from
beta-20161103
tobeta-20161110
. #10681 #10724 - A node that is stopped and restarted quickly can no longer produce inconsistent results. #10420
- Fixed bugs that prevented communication with a node that was previously down. #10642 #10652
- It is now possible for a new node to start up using the same network address as a node that had previously existed. #10544 #10699
- Replication snapshots now release their resources earlier, preventing deadlocks. #10491
- Fixed a bug with time series garbage collection when the time series data spans multiple ranges. #10400
- Fixed several bugs with very large
DECIMAL
values or very small fractions. #10446 #10559 #10570 #10934 - The
pow()
function now returns an error when its arguments are too large. #10525 - Fixed a crash when the number of placeholders in a query doesn't match the number of arguments. #10474
- Improved error handling when a SQL transaction exceeds an internal deadline. #9906
- Fixed a panic in raft leadership transfers. #10530
- Fixed a leak in
CREATE TABLE AS
andCREATE VIEW
. #10527 - Fixed a panic "range lookup of meta key found only non-matching ranges". #10583
- The consistency checker now runs to completion instead of canceling itself before finishing. #10625
- Internal retries no longer cause transaction replay errors. #10639
- The
cockroach sql
command no longer crashes when given a URL without a username. #10862 - Fixed a deadlock in
RemoveReplica
. #10875 result is ambiguous
errors are now returned in more situations. #10703 #11211- The
ALTER TABLE SPLIT AT
command will now retry internally instead of returning errors about conflicting updates. #10728 - Fixed a panic that could occur when a node is restarted after an unclean shutdown. #10690
- Fixed a panic when replicas are removed and re-added rapidly. #11699
- The
sign()
function with aDECIMAL
argument now returns a decimal rather than a float. #10954 - Fixed a panic in the raft tick loop. #11622
- The
LIMIT
operator now works correctly inINSERT ... SELECT
. #11632
Doc Updates
- Expanded the cloud deployment documentation to cover Microsoft Azure and secure deployment on all featured platforms:
- Added interactive asciicasts to getting started tutorials.
- Added tutorials that demonstrate core features of CockroachDB: #834 #878 #899
- Added documentation on user management and password-based authentication: #838
CREATE USER
statementcockroach user
command
- Added documentation on the
information_schema
built-in database, which provides introspection into database tables, columns, indexes, and views, and which is required for ORM compatibility. #859 - Updated
SELECT
statement documentation to cover using "index hints". #894 - Updated
FOREIGN KEY
constraint documentation to clarify that creating a table with a foreign key now automatically creates an index for you. #895 - Updated
RENAME
statement documentation to clarify that you cannot rename a database, table, column, or index reference by a view. #873 - Updated the
cockroach start
command documentation to cover the--max-sql-memory
flag. #868 - Updated the
cockroach zone
command documentation to reflect the correct YAML structure. #902 - Fixed the Rust code samples on Build an App. #863
Contributors
This release includes 292 merged PRs by 30 authors. We would like to thank the following contributors from the CockroachDB community, including first-time contributors Christian Gati, Dustin Hiatt, kiran, and Nathan Johnson.
- Christian Gati
- Dustin Hiatt
- Haines Chan
- kiran
- Nathan Johnson
- songhao
- yznming
beta-20161103
Release Date:
Backwards-Incompatible Changes
- Users (other than
root
) must now be created with theCREATE USER
statement orcockroach user set
command before they can be used for TLS certificate- or password-based authentication. #9794 - The
ambiguous result
error message introduced inbeta-20161027
is now simplyresult is ambiguous
since it may be returned outside of transactions. #10279
SQL Language Changes
- Password-based authentication is now supported. Clients can authenticate with either a TLS certificate or a password. Documentation coming soon.#9794
- The
SHOW USERS
statement is now supported. #10088 - The
pg_catalog.pg_type
,pg_catalog.pg_database
,pg_catalog.pg_views
,pg_catalog.pg_proc
, andpg_catalog.pg_am
tables are now supported. #10209, #10284, #10276, #10217, #10363 - The
information_schema.statistics
andinformation_schema.views
tables are now supported. #10220, #10288 SHOW TABLES
now adds a(dropped)
suffix to tables that are being dropped. #10063SHOW CREATE VIEW
now only requires permissions on the view, not the underlying tables. #10270
Command-Line Interface Changes
- When entering a transaction in the built-in sql shell, the statements are not sent to the server until there is either a
COMMIT
,ROLLBACK
, or two blank lines. This minimizes the lifetime of the transaction and therefore the risk of conflicts. #10187
Performance Improvements
- Queries that span multiple ranges are now executed across those ranges in parallel. #9197
- Time series data (used in the admin UI) is now loaded in parallel. #10250
- Rebalancing now reaches an equilibrium faster. #10330
Bug Fixes
- Memory usage of SQL queries is now monitored, and queries that use too much will fail rather than exhaust the server's memory. #9259
- Fixed a problem with snapshot error handling that could cause the cluster to be unable to make progress after node failure.
- Computing the
log()
of a very large number no longer causes the server to hang. #10221 - Decimal numbers are now parsed correctly in
AS OF SYSTEM TIME
queries. #10242 concat_ws()
with no arguments no longer crashes the server. #10309- Fixed a bug when a command was executed after its client had disconnected. #10279
Doc Updates
- Clarified and expanded the
transactions
overview documentation, and completed docs on transaction-specific statements: #672 - Added language-specific examples for
INSERT
statements withRETURNING
. #813 - Updated the SQL Feature Support page to reflect support for views (SQL standard) and interleaved tables (CockroachDB extensions).
Contributors
This release includes 68 merged PRs by 24 authors. We would like to thank the following contributors from the CockroachDB community, including first-time contributors Johan Brandhorst and MaBo.
- Johan Brandhorst
- MaBo
- Yan Long
- songhao
beta-20161027
Release Date:
Backwards-Incompatible Changes
- Functions that return the current time - including
now()
- now return values of typeTIMESTAMP WITH TIME ZONE
instead ofTIMESTAMP
, unless called from a context that expects the latter type. #9618
SQL Language Changes
- Views are now supported. Views are stored queries, represented as virtual tables, that produce a result set when requested. They can be used to hide query complexity, limit access to underlying data, or simplify the process of supporting legacy code.
- Tables in the
pg_catalog
database can now be accessed with unqualified names if no table of the same name exists in the current database. #9927 AS OF SYSTEM TIME
queries now support the decimal format returned bycluster_logical_timestamp()
for maximum precision. #9934- The
CASCADE
option ofDROP TABLE
andALTER TABLE DROP COLUMN
now drops views that depend on the table or column; it is now an error to attempt to drop a table or column with dependent views without either using this option or dropping the views first. #9724, #10124 SET DEFAULT_TRANSACTION_ISOLATION
is now supported, improving compatibility withpsycopg2
. #10087- The
pg_catalog.pg_indexes
andpg_catalog.pg_constraint
tables are now supported. #9869, #9991 EXPLAIN
can now be used withSHOW
,HELP
, andALTER TABLE ... SPLIT
. #10013- The
current_schemas()
function is now supported, improving compatibility with ActiveRecord. #9604 - The
SHOW ALL
statement is now supported. #10195 - The
DROP INDEX
andALTER INDEX
statements can now use unqualified index names. #10091
Command-Line Interface Changes
- The
--host
flag in client commands such ascockroach sql
now defaults tolocalhost
in both secure and insecure modes. #10134 - Improved error messages when a server is down or certificates are not configured correctly. #9917
- The
--key
flag can now be passed via the environment variableCOCKROACH_KEY
, matching other similar flags. #10092
Performance Improvements
- RocksDB bloom filters now use 10x less memory, with a negligible reduction in speed. #10085
- Old time-series data is now garbage collected. #9959
- Reduced overhead of the internal time-series metric system. #9889
- Reduced impact of schema changes on regular queries. #9798
- In the event of a node failure, schema changes now save their progress and can resume from their last checkpoint instead of restarting from the beginning. #10036
- Ranges are now split more eagerly when tables are created or data is growing rapidly. #10232
Bug Fixes
- Certain network- and timeout-related errors will now return the error "transaction commit result is ambiguous" when it cannot be determined whether a transaction committed or not. This fixes bugs in which statements outside of transactions could be applied twice, and other transactions may incorrectly report unique constraint violations. #10207
SET TIME ZONE 0
now sets the session time zone to UTC (other numbers already worked). #9992SHOW
statements for session variables now work correctly when prepared and executed separately. #10013- Columns that are a part of the primary key can now be renamed. #10018
- Fixed a panic during transaction rollback. #9961
- Float comparisons involving
NaN
are now correct in all cases. #10112 - Clock offset monitoring is now more sensitive. #10185
- The rebalancer is now better able to avoid placing a replica on a store that has previously had a corrupted replica of the same range. #10141
- More complex expressions involving window functions are now supported. #10186
- Fixed a deadlock that could occur when using the Prometheus metrics endpoint. #10228
Contributors
This release includes 182 merged PRs by 24 authors. We would like to thank the following contributors from the CockroachDB, including first-time contributor Haines Chan.
- Haines Chan
- songhao
beta-20161013
Release Date:
This week's release includes many user-visible changes and features that have been in development since our stability-focused "code yellow" started back in August. When we entered "code yellow", all work unrelated to stability was done in a secondary development environment. Since then, we've made great progress, and so have moved many of these new features back into our main development environment.
Backwards-Incompatible Changes
TIMESTAMP
values are now stored with microsecond precision instead of nanoseconds. All nanosecond-related functions have been removed. An existing tablet
with nanosecond timestamps in columns
can round them to microseconds withUPDATE t SET s = s + '0s'
. However, note that this could potentially cause uniqueness problems if the timestamp is a primary key. #8864TIMESTAMP
values (withoutTIME ZONE
) are now parsed in UTC, not in the session time zone. #9444- The deprecated
--http-addr
flag has been removed. When starting a node, use the--http-host
flag instead to specify the address to listen on for Admin UI HTTP requests. #9725
SQL Language Changes
- Tables can now be interleaved into other tables. Interleaving tables improves query performance by optimizing the key-value structure of closely related tables, attempting to keep data on the same key-value range if it’s likely to be read and written together. #7985
- The
CREATE TABLE AS
statement can now be used to create a table based on the results of aSELECT
statement. #8802, #9278 - The
ALTER TABLE ... SPLIT AT
command can now be used to force a range split at a specified key. #8938 - Added new
information_schema
metatables as well as initial support for thepg_catalog
database. This work is part of our ongoing effort to provide standard database introspection required by popular ORMs. #8433, #8498, #9565, #9114, #9104 CHECK
constraints can now be added with theALTER TABLE ADD CHECK
andALTER TABLE VALIDATE
statements. #9127 #9152- The
ALTER TABLE DROP CONSTRAINT
statement can now dropCHECK
andFOREIGN KEY
constraints. #8747 - The
SHOW CONSTRAINTS
statement now requires the user to have privileges for the requested table. #8658 - The
EXPLAIN
statement now works correctly forVALUES
statements containing subqueries. #8970 - The
TRUNCATE
statement now implements theCASCADE
modifier. #9240 TIMESTAMP
values that include a time zone can now omit the minutes field of the time zone offset, for compatibility with PostgreSQL. #8666INTERVAL
values can now be input in a colon-delimited format (H:M or H:M_S), for compatibility with PostgreSQL. #8603- The
INT8
type is now supported as an alias forINT
. #8858 INTERVAL
,TIMESTAMP
,TIMESTAMPTZ
, andDATE
values can now be casted to/from more types. #9731- The window functions
row_number()
,rank()
,dense_rank()
,percent_rank()
,cume_dist()
,ntile()
,lead()
,lag()
,first_value()
,last_value()
,nth_value()
are now supported. #8928, #9321, #9335 - The
exp()
function returns an error if its argument is greater than 1024 instead of performing excessively expensive computation. #8822 - The
round()
function now breaks ties by rounding to the nearest even value (also known as bankers' rounding). It is now faster, and returns an error when given an excessively large number of digits. #8822 - The
concat_agg
aggregate function is now supported. #9690 - New date/time functions,
extract_duration()
,experimental_strptime()
andexperimental_strftime()
, are now supported. #9734, #9762
Protocol Changes
- The
COPY
protocol is now supported on the server side with theCOPY FROM
statement. Thecockroach sql
command-line tool does not yet recognize this command but it can be used with other client interfaces. #8756 DECIMAL
values are now encoded correctly for drivers that use the binary format. #8319TIMESTAMP
,TIMESTAMPTZ
andDATE
values can now use the binary protocol format for clients that support it. #8590, #8762NULL
values are now sent with the correct type OID, which is required by some PostgreSQL drivers. #9331- The
CREATE TABLE
andCREATE DATABASE
statements now return the standard PostgreSQL error code when the table or database already exists. #9235
Command-line Interface Changes
- The
cockroach start
command now prints additional fields tostdout
:clusterID
,nodeID
, andstatus
, which indicates whether the node started a new cluster, joined an existing cluster for the first time, or rejoined an existing cluster. #9066 - The
cockroach start
command now terminates with a non-zero exit status if it was interrupted with Ctrl+C or a signal. #9051 - The
cockroach zone set
command now supports the--disable-replication
flag, which sets the desired replication factor to 1. #9253 - The
cockroach gen example-data
command can now be used to generate SQL for example databases. #9231, #9475 - The
cockroach sql
shell now presents a new prompt when Ctrl+C is pressed after the user starts entering a statement. #9704 - When using Ctrl+R in the
cockroach sql
shell to recall a previous statement from the shell history, the search is now case-insensitive. #9704 - The
cockroach sql
shell now reports unterminated final statements as errors instead of ignoring them. #8838 - The
cockroach sql
shell now reports when the connection to the server is lost and a new connection is opened. #9613 - The
cockroach sql
shell now ignores lines that contain only whitespace (e.g., comments). #9243 - The
cockroach sql
shell now prints expressions inEXPLAIN
and the shell history such asE::T
orE:::T
in the same format entered instead of using the longerCAST
orTYPE_ANNOTATE
syntax. #9739 - The
cockroach sql
shell now stops processing statements at the first error encountered when reading from a file (non-interactively). This behavior is customizable with the newunset errexit
shell command. #9610 - The
cockroach sql
shell now checks if a statement or query is syntactically valid on the client side before it is sent to the server. This ensures that a typo or mistake during user entry does not inconveniently abort an ongoing transaction previously started interactively. This behavior is customizable with the newunset check_syntax
shell command. #9610 - The
cockroach sql
shell now works better with multi-line statements. In particular, users will find it easier to recall and edit previously entered multi-line statements. This behavior is customizable with a new commandunset normalize_history
. #9610 - The
cockroach sql
shell now works correctly underkubectl
and other environments that hide the size of the terminal. #9097
UI Changes
- The time scale selector in the UI now works more reliably. #8573
- Additional database and table-level details are now available. #9621
- Displaying graphs for a longer timescales is now much faster. #8805
- The default graph time scale is now chosen based on the age of the cluster. #9340
- Node logs are now accessible in the UI. #8572
- The UI can now be built with live reload support. #8679
- Exposed idiomatic bucketed histograms on prometheus endpoint. #9810
- Exposed Mutex timing metrics. #9769
Bug Fixes
- Fixed some panics in handling invalid SQL statements. #9049, #9050
- Fixed an issue that sometimes caused transactions to restart twice in a row. #8596
STRING
literals containing non-UTF-8 data are now rejected. #9094- The
UPSERT
statement now works correctly during online schema changes.#9481 - Aggregate and window functions in
GROUP BY
ordinal expressions are now rejected without crashing. #9629 - The unsupported
ALTER TABLE ... ALTER COLUMN ... SET TYPE ...
statement now reports an error to the client instead of crashing the server. #8747 - Slightly improved support for 32-bit systems. Note that 32-bit architectures remain officially unsupported. #9491
- The admin UI now propagates timeouts to the server to avoid dangling requests. #8546
- Fixed issues with duplicate column qualifications in
CREATE TABLE
statements #9868 - Empty statements are now handled correctly in prepared statements. #9811
- Fixed a Raft assertion caused by insufficient locking. #9814
Performance Improvements
- Tuned RocksDB settings to reduce write stalls. #9663
- Minor performance optimization to avoid reading an internal metadata key that will be immediately overwritten. #9263
- Improved concurrency to prevent certain slow operations from dramatically impacting overall performance. #9622
DROP INDEX
andDROP TABLE
are now performed in chunks instead of one big transaction. #8870, #8885- The SQL query processor now tracks its memory usage. Soon it will return errors for queries that use too much memory. #8691
- Aggregate functions like
sum()
are now faster. #8680 - For production deployments, at least 10000 file descriptors are now recommended per store, with a minimum of 2000 required. #9679
- Improved scheduling of Raft work. #9831
- Replaced per-request checks with a per-batch check. #9848
- Micro-optimizations for writing time series data. #9862
- Narrowed the use of a lock during Raft log truncation. #9840
- Refactored a common locking pattern for better performance. #9771
Doc Updates
- Added docs on orchestrating CockroachDB with Docker Swarm. #676
- Added docs on the
cockroach gen
command, which can be used to generateman
pages, abash
autocompletion script, and example SQL data suitable to populate test databases. #755 - Updated the
cockroach sql
command docs to include more details about supported SQL shell shortcuts.
Contributors
This release includes 338 merged PRs by 28 authors. We would like to thank the following contributors from the CockroachDB community, especially first-time contributors Francis Bergin and Yan Long:
- Francis Bergin
- Daniel Theophanes
- Yan Long
- songhao
beta-20161006
Release Date:
There aren't many user-visible changes in this week's release - an artifact of our recent stability efforts, which funneled user-visible changes to a secondary development branch. Our concerted stability effort is nearing its end, and we are preparing to include these features in next week's release.
Internal Changes
- Nodes now periodically compare their configured maximum clock offset and exit fatally if they find another node operating with a different configuration. #9612
- Internal low-level instrumentation has been added for debugging performance bottlenecks. #9638
- General improvements have been made to the tracing infrastructure. #9641
Doc Updates
- Updated various aspects of the CockroachDB design document:
beta-20160929
Release Date:
New Features
- The
--advertise-host
flag can now be used to override the address to advertise to other CockroachDB nodes. #9503 - The
--http-host
flag sets the address to bind to for HTTP requests. Together with--http-port
, it will replace--http-addr
in a future release. #9573 - More metrics are now exported about the internal garbage collection of deleted values. #9571
- More metrics are now exported about file descriptor usage. #9582
- The system now uses OpenTracing's new key-value style logging APIs. #9578
Bug Fixes
- Fixed an inconsistency that could occur when transactions race with garbage collection. #9377
- Retried
BeginTransaction
operations no longer leak internal errors to the client. #9305 - Brief service interruptions are now avoided after shard splits. #9550
UI Changes
- The UI no longer crashes when a tab is reopened after being in the background for a long time. #9042
Performance Improvements
- Ranges which are not receiving traffic now stop sending raft heartbeats. #9383
- Raft snapshots are now sent as a stream instead of one large message. #9292
- The rebalancer is now better about noticing under-full stores. #9415
- Raft messages are now sent in batches. #9485
- Nodes are now quicker to fail over to other replicas when one is unresponsive. #9239
- Dropping a table or index is now faster. #9419
- Re-enabled consensus-level optimizations for network i/o. #9606
Doc Updates
- Improved the SQL docs for granting privileges on databases and tables:
GRANT
. #687 - Completed the SQL docs for:
- Getting user privileges on databases and tables:
SHOW GRANTS
. #687 - Setting and getting the default database for a session:
SET DATABASE
andSHOW DATABASE
. #671, #683 - Setting and getting the default time zone for a session:
SET TIME ZONE
andSHOW TIME ZONE
. #680 - Changing the name of a table column or index:
RENAME COLUMN
andRENAME INDEX
. #678, #679
- Getting user privileges on databases and tables:
- Updated high-level overviews of primary CockroachDB features and added related links. #699
Contributors
This release includes 78 merged PRs by 19 authors. We would like to thank the following contributors from the CockroachDB community, especially first-time contributor Haines Chan:
- Haines Chan
- Jingguo Yao
beta-20160915
Release Date:
General Changes
- CockroachDB is now built with Go 1.7.1. #9288
- CockroachDB no longer requires Git 2.5; the minimum supported version is now 1.8. #9325
Bug Fixes
- Fixed an inconsistency that could occur when two conflicting transactions were assigned the same timestamp. #9100
- Nodes with multiple stores now export metrics in a format that works with Prometheus. #9322
Performance Improvements
- Improved concurrency of Raft processing so snapshots and replica garbage collection do not block other ranges. #9176 #9299
- The rebalancing system is now more tolerant of small imbalances, making the range distribution more likely to reach a steady state. #9230
- Reduced memory used by debugging traces. #9258
- Ranges now become responsive sooner after startup. #9276
- Removed an internal timeout that caused unnecessary retry loops. #9234
- Try harder to ensure that the range lease and raft leadership are co-located. #8834
- Reduced memory used by Raft. #9193
- The consistency checker now uses less memory when an inconsistency is found. #9159
- The internal replica queues can now time out and recover from a replica that gets stuck. #9312
- Removed a redundant verification process that periodically scanned over all data. #9333
Doc Updates
- Added docs for deploying CockroachDB on AWS. #640
- Added a "back to top" feature to improve the usability of longer pages. #638
- Updated Start a Local Cluster to suggest manually setting each node's cache size to avoid memory errors when testing against a local cluster in a serious way. #652
- Updated docs on transaction retries to provide the correct error code. #647
Contributors
This release includes 66 merged PRs by 17 authors.
beta-20160908
Release Date:
General Changes
- CockroachDB has reverted to RocksDB 4.8. #9118
- The logging format has changed to include a goroutine ID. #8977
- CockroachDB now builds correctly when Git worktrees are used; as a consequence Git version 2.5 or newer is now required when building from source. #9072
Command-Line Interface Changes
- The
--from
and--to
arguments of debugging commands now support backslash-escaped keys. #8903 - If any environment variables are used to configure the server, the names of those variables are printed to the logs. #9069
Bug fixes
- Fixed a bug that would result in the server locking up after a few hours on a machine or VM with only one CPU. #8908
- Fixed another cause of persistently broken connections on node restarts. #8947
CREATE TABLE
now reports errors correctly instead of failing silently. #9011- The replica garbage collection process is no longer confused by uninitialized replicas. #9021
- Fixed various data races. #8865, #8933
- Fixed a panic in the time-series query system. #9038
Performance Improvements
- Internal locking mechanisms have been refactored to improve parallelism. #8941
- GRPC request tracing has been disabled due to its memory cost. #9113
- Raft leadership is more reliably transferred to coincide with the range lease. #8932
- Raft snapshots are now limited to one at a time on both the receiving and sending nodes. #8974
- Node startup time has been improved. #9020
- Reduced memory usage of the timestamp cache. #9102
- Old replicas are now garbage-collected with higher priority. #9019
- Transaction records for splits and replica changes are now garbage-collected sooner. #9036
Doc Updates
- Added docs on deploying CockroachDB on Google Cloud Platform GCE. #574
- Added docs on orchestrating CockroachDB with Kubernetes. #584
- Updated troubleshooting docs to cover cases when nodes will not join a cluster. #610
- Each version's release notes now link to the corresponding Mac and Linux binaries. #604
- Updated docs on secure local and secure distributed deployment to show how to stop nodes. #619
Contributors
This release includes 180 merged PRs by 17 authors. We would like to thank first-time contributor Henry Escobar from the CockroachDB community.
beta-20160829
Release Date:
General Changes
Command-Line Interface Changes
- The
cockroach zone set
command no longer takes its input directly on the command line. Instead, it accepts a--file
flag to read from a file, or--file=-
to read from standard input. #7953
New Features
AS OF SYSTEM TIME
can now be used withJOIN
queries. #8198- The type
BIT
now works correctly (as a shorthand forBIT(1)
). The length limit is now enforced. #8326 - The
SHOW
commands now only show tables that the current user has permission to access. #8070 - Foreign keys can now use a prefix of an index. #8059
- The standard
information_schema
database is now partially supported. New tables will be added to this database in future beta releases. #7965, #8119
Bug Fixes
- Clusters with a large number of ranges no longer experience persistently broken connections on node restarts. #8828
- The
RENAME
command now requires theDROP
privilege on the table or database. It is no longer possible to rename thesystem
database. #7998 - The
repeat()
andsubstr()
functions with very large numeric arguments will no longer crash the server as easily. #8073, #8078 - Certain errors now cause a replica to be marked as corrupt so the corruption will not be replicated to other nodes. #7684
- A
CloseComplete
packet is now sent in response to aClose
command, improving compatibility with come PostgreSQL client drivers (including the Elixir driver). #8309 - SQL name parsing has been improved to fix several panics and allow foreign key constraints that span databases. #8152
- Fixed some panics. #8283, #8282
- Fixed a deadlock if a range grew too large. #8387
- Fixed a race in which multiple conflicting snapshots could be accepted at the same time. #8365
- Decimal values are now represented correctly in the binary protocol. #8319
Performance Improvements
- Snapshots are now sent synchronously during replica changes. This controls the rate of the replication process and prevents spikes in memory usage that often caused servers to crash. #8613
- Raft logs are now truncated less aggressively, reducing the chance that replication will need to send a snapshot instead of the log. #8343, #8629, #8656
- Snapshots and the raft log are now written more efficiently. #8644
- Raft log entries are now cached. #8494
- Raft groups are now created lazily at startup. #8592
- Raft heartbeats are now sent less often by default. #8695
- Improved performance and reliability of clusters with large numbers of ranges. #8125, #8162, #8495
- The heuristics used by the rebalancing system have been improved. #8124
- Some noisy log messages have been removed or reduced. #8071, #8021, #8240, #8292, #8529, #8687, #8689
- The gossip network reconnects more reliably after a failure. #8128
- RPC connections to failed nodes are now detected sooner. #8163
- The cache of the first range descriptor is now properly invalidated. #8163
- Removed replicas are now garbage-collected sooner in many cases. #8172
- The resolution of the block profiler has been reduced, saving CPU. #8384
- Range lease extensions no longer block concurrent reads. #8352
UI Changes
- The "capacity used" is now computed correctly. #8048
- The CPU and garbage-collection graphs now display averages. #8048
- The Databases section now includes more details. #8364
Doc Updates
- The new SQL Feature Support page explains which standard SQL features are supported by CockroachDB. #550
- The new Features on Develop Branch page tracks features that are available on the
develop
branch but not yet onmaster
. #552 (Page no longer available.) - Added docs on foreign key constraints. #528
- Added docs on the
TRUNCATE
statement. #542 - Updated Recommended Production Settings to include cache size recommendations for machines running multiple applications and
systemd
-specific instructions for increasing the file descriptors limit. #532, #554 - Fixed errors in the commands for starting CockroachDB in Docker. #567
Contributors
This release includes 280 merged PRs by 26 authors. We would like to thank the following contributors from the CockroachDB community:
- Christian Koep
- Dolf Schimmel
- songhao
beta-20160728
Release Date:
New Features
- Foreign keys can now reference multiple columns. #8033
- The
dump
command can now be run by any user withSELECT
privilege on the table. #7974 INTEGER
andDECIMAL
types can now be mixed in arithmetic expressions without casts. #7756- The
--join
flag can now be specified multiple times, as an alternative to specifying a comma-separated list. #7876
Bug Fixes
- Range leases are now preserved across splits, fixing a source of inconsistent reads. #7955
- Fixed a panic when single-statement transactions were aborted after an automatic retry. #8010
- Parsing of time zone offsets is now more lenient, improving compatibility with JDBC drivers. #7929
- Unbounded columns are now allowed in empty column families. #7969
- The target columns of
INSERT
andUPDATE
statements are now required to be given in unqualified form. #7911 - Fixed a potential deadlock in the gossip subsystem and SQL leases. #8011, #8019
Performance Improvements
- Snapshots are now sent prior to the Raft configuration change, minimizing the window of reduced availability. #7833
Doc Updates
- Added docs on the
cockroach dump
command. #472 - Updated Recommended Production Settings to clarify how CockroachDB allocates file descriptors when the limit is under the recommended amount. #480
- SQL statements, data types, and data definition topics are now available at-a-glance in the sidebar. #483
Contributors
This release includes 63 merged PRs by 17 authors. We would like to thank first-time contributor Rushi Agrawal from the CockroachDB community.
beta-20160721
Release Date:
New Features
- Metrics are now exported on
/_status/vars
in a format suitable for aggregation by Prometheus. #7895
Build Changes
- Go 1.6.3 and 1.7rc2 are now supported. #7811
- The versions of Docker built for Mac and Windows are now supported. Users of a
docker-machine
VM may need to set environment variables by hand as this case is no longer detected automatically. #7820
UI Changes
- The Admin UI now displays a warning when there are fewer than three nodes. #7783
Performance Improvements
- Writes to different ranges are now performed in parallel. #7860
- The first range descriptor is kept more up-to-date. #7766
- Ranges are now considered for splits after any replication or rebalancing change. #7800
- An existing table lease can now be reused without writing to the lease table as long as it has enough time left before expiration. #7781
- The rebalancing system now avoids moving the current leader of a range. #7918
- Transaction records related to splits are now garbage-collected promptly. #7903
Bug Fixes
- Command history works again in the command-line SQL interface. #7818
- The
cockroach dump
command now works with tables that haveDECIMAL
columns that specify a precision and scale. #7842 - Fixed several panics when handling invalid SQL commands. #7867 #7868
ALTER TABLE ADD COLUMN
now supports theIF NOT EXISTS
modifier. #7898- Fixed a race in gossip status logging. #7836
Doc Updates
- Feedback can now be submitted from the bottom of any page of our docs. #467
- Updated Recommended Production Settings to provide OS-specific instructions for increasing the file descriptors limit. #459
- Updated INTERVAL to cover all supported interval formats: Golang, Traditional Postgres, and ISO 8601. #462
- Updated Start a Cluster in Docker to work for Docker on Windows. #457
Contributors
This release includes 76 merged PRs by 21 authors. We would especially like to thank first-time contributors Christian Meunier and Dharmesh Kakadia from the CockroachDB community.
beta-20160714
Release Date:
Upgrade Notes
- This release cannot be run concurrently with older beta releases. Please stop all nodes running older releases before restarting any node with this version.
- After running this release, it is impossible to downgrade to any release older than
beta-20160629
. - This release uses more open file descriptors than older releases. It is recommended to set the process's file descriptor limit to at least 10000. See Recommended Production Settings for more details.
New Features
- The
cockroach dump
command can now be used to back up the contents of a table. The output ofdump
is a series of SQL statements that can be used to recreate the table. #7511 - The
ILIKE
operator for case-insensitive matching is now supported. #7635 - Four new operators for regular expression matches are now supported:
~
(regex match),!~
(negated regex match),~*
(case-insensitive regex match),!~*
(negated case-insensitive regex matcH). #7686 - The new
SHOW CONSTRAINTS
statement can be used to show the constraints on a table. #7584 FOREIGN KEY
constraints can now have names. #7627- The
--http-addr
flag can be used to control the network interface used for the web UI. #7475 ALTER TABLE ADD COLUMN
can now be used to create column families. #7711- CockroachDB can now be built on FreeBSD. See this blog post for details. #7545
- The
uidebug
Makefile
target, used for development of the web UI, has been replaced with the environment variableCOCKROACH_DEBUG_UI=1
. #7601
Performance Improvements
- Column families are now used by default, improving performance of all tables created in this release and beyond. #7623
- Removed replicas are now garbage collected more quickly. #7533
- RocksDB is now configured to use more, smaller files. This improves performance by reducing the amount of data rewritten during compactions, but increases the number of open file descriptors used by the process. #7532
- The server now increases its soft file descriptor limit if it is too low and this is allowed by the hard limit. #7747
- The raft log can now be truncated even if a replica is behind, reducing the size of snapshots that must be transmitted over the network (but somewhat increasing the likelihood that a snapshot will be needed instead of replaying the log). #7438
- Raft-related messages are now sent in separate streams for each range. #7534
- Raft commands for queries that have been abandoned by the client are no longer retried internally. #7605
- Table leases are now released when connections are closed, allowing schema changes to proceed without waiting for leases to expire. #7661
Bug Fixes
- The command-line SQL client is now smarter about semicolons and `` commands inside string literals. #7510
LIMIT
is now applied correctly on queries that useJOIN
. #7546- The "CGo Calls" graph in the web UI is now displayed as a rate instead of a cumulative total. #7597
- The
cockroach quit
command now waits for the server to stop before returning. #7603 - Building CockroachDB in a Docker container on Linux with
build/builder.sh
no longer requires the container and host toolchains to be the same. #7626 - Fixed a deadlock in table lease acquisition. #7504
- The
TIMESTAMP WITH TIME ZONE
type is now reported correctly in the network protocol. #7642 - Constraint names are now required to be unique. #7629
- The "Events" tab in the web UI now includes events for schema changes. #7571
- Fixed several server panics in expression normalization. #7512
- Fixed a data race when a transaction is abandoned by the client. #7738
- Fixed a scenario in which intents could not be resolved. #7744
- RocksDB is no longer allowed to use all available file descriptors. #7747
- Using
*
as an argument to functions other thanCOUNT(*)
no longer causes the server to panic. #7751 - Fixed a deadlock during shutdown. #7770
Doc Updates
- Docs on installing CockroachDB in Docker now recommend using the new Docker applications for Mac and Windows.
- The new Start a Cluster in Docker page demonstrates how to run a multi-node cluster across multiple Docker containers on a single host, using Docker volumes to persist node data.
- Docs on the
DELETE
statement are now available.
Contributors
This release includes 131 merged PRs by 25 authors. We would like to thank the following contributors from the CockroachDB community, especially first-time contributor songhao:
- Jason E. Aten
- Jingguo Yao
- Kenji Kaneda
- Sean Loiselle
- songhao
beta-20160629
Release Date:
New Features
- A prototype implementation of
JOIN
(non-optimized) is now available. #7202 - Column Families are a new, more efficient representation of SQL tables. Each column family is a group of columns in a table that are stored as a single underlying key-value pair. New tables created with multi-column families will not be compatible with versions of CockroachDB earlier than
beta-20160629
. However, no migration of existing tables is necessary; the previous format corresponds to a separate column family for each column in the table. #7466, #7408, RFC EXPLAIN
can now be used withCREATE
,DROP
, andALTER
statements. #7269- The built-in SQL client now prints tab-separated values instead of ASCII-art tables when
stdout
is not a TTY (unless--pretty
is used). #7268 - In interactive mode, the built-in SQL client now prints the number of rows at the end of a result set. #7266
- Prepared statements can now be deallocated with the
DEALLOCATE
command. #7367 - Added support for interval types in placeholders. #7382
- Added support for hexadecimal-encoded
STRING
literals. #7138
Performance Improvements
- The load balancing system now operates at a steadier pace, reducing spikes in memory usage and reaching equilibrium more quickly. #7147
- The block cache is now shared across stores on the same node. #7496
- Initial replication in a new cluster is now significantly faster. #7355
- The Raft log is now more aggressively truncated. #7125
- The RocksDB block-size is now set to a more reasonable value. #7276
- A new reservation system now ensures that there is enough free space and not too many existing reservations before trying to replicate a range to a new store. This stops the thundering herd that can occur when adding a new node to a cluster. #7147
- Miscellaneous performance improvements in the underlying data distribution and replication protocol.
Bug Fixes
- Fixed a bug that could cause a server crash on startup. #7447
- Improved the handling of
NULL
values in arithmetic and comparison operations. #7341 - Fixed a crash when session arguments could not be parsed. #7231
- Improved error messages for parts of the PostgreSQL protocol we do not support. #7233
AS OF SYSTEM TIME
can now be used in prepared statements. #7251- Raft messages are no longer canceled due to unrelated errors. #7252
- Constraint names that are specified at the column level are now preserved. #7271
- When
COMMIT
returns an error, the transaction is considered closed and a separateROLLBACK
is no longer necessary. #7282 - The built-in SQL client now escapes strings in a format that the SQL parser will accept. #7294
- Fixed issues when two snapshots were being sent simultaneously. #7299
- When a column is renamed, any
CHECK
constraints referring to that column are now updated. #7311 - When piping commands into the built-in SQL client, the last line was previously ignored. Now it will be executed if it ends with a semicolon, or report an error if it is non-empty but not a complete statement. #7328
- When
cockroach quit
fails to drain a node, it is now forced to quit. #7483 - Fixed a case in which a removed replica could prevent the rebalance queue from making progress. #7507
- Fixed a bug that slowed down population of new replicas. #7252
Internal Changes
- The Admin UI has been rewritten in a new framework. #7242
- The Admin UI now uses serialized protocol buffers when communicating with CockroachDB servers. #7178, #7242
Contributors
This release includes 160 merged PRs by 22 authors. We would like to thank the following contributors from the CockroachDB community, especially first-time contributor phynalle:
- Jingguo Yao
- Kenji Kaneda
- phynalle
beta-20160616
Release Date:
Deprecation Notice
- Integers with a leading zero (e.g.,
0755
) are currently treated as octal. In a future release, leading zeros will be ignored and the numbers will be treated as decimal. #7205
New Features
SELECT
statements now accept anAS OF SYSTEM TIME
clause to read values from the recent past (up to the GC policy set in the zone configuration). #7139- Hexadecimal byte string literals of the form
x'f00d'
can now be used to create byte strings containing arbitrary characters. #7138 BIGSERIAL
andSMALLSERIAL
are now supported as aliases forSERIAL
. All three types use the same 64-bit value size. #7187
Bug Fixes
- Fixed a panic in some uses of subqueries. #6994, #7146
ALTER TABLE ADD COLUMN
now allows the addition of columns with a uniqueness constraint only when the table is empty. #7094- Improved availability when
--raft-tick-interval
is increased from its default value. #7086 - Improved reporting of errors from single statements run outside transactions. #7080
- Invalid octal literals (e.g.,
09
) no longer crash the server. #7134 - When
ALTER TABLE
fails, it now rolls back dependent items in the correct order. #6789 - Aggregate functions like
SUM()
are no longer allowed inCHECK
orDEFAULT
expressions. #7221
Performance Improvements
- Improved rate limiting of snapshots during rebalancing, reducing memory usage and improving availability. #6878
- Splitting a range that has grown beyond the target size is now faster. #7118
- Raft elections are now initiated lazily instead of shortly after server startup. #7085
- The raft log is now garbage-collected more eagerly. #7125
- Increased RocksDB block size, which reduces memory usage. #7219
Doc Updates
- Docs on the Built-in SQL client now cover pretty-printing to the standard output when executing SQL from the command line. The examples have been improved as well. #373
- Docs on the
STRING
andINT
data types now cover hexadecimal-encoded literal format. Also, theSTRING
docs now cover escape string format. #392 - On Functions and Operators, functions are now identified as "built-in" or "aggregate". Also, function categorization has been improved. #379, #387
- On
CREATE INDEX
, the syntax diagram has been clarified and expanded. #382
Contributors
This release includes 80 merged PRs by 19 authors. We would like to thank the following contributors from the CockroachDB community:
- Kenji Kaneda
- Paul Steffensen
beta-20160609
Release Date:
New Features
- The
SERIAL
column type is now supported as an alias forINT DEFAULT unique_rowid()
. In CockroachDB, this type defaults to a unique 64-bit signed integer that is the combination of the insert timestamp and the ID of the node executing the insert. It therefore differs from similar types in PostgreSQL and MySQL, which auto-increment integers in an approximate sequence. #7032 - For client-side transaction retries, reissuing the original
SAVEPOINT cockroach_restart
now has the same effect asROLLBACK TO SAVEPOINT cockroach_restart
. This improves compatibility with some client drivers. #6955 FAMILY
is now a reserved word in the SQL dialect in preparation for a future feature. #7069
Bug Fixes
- The command-line SQL shell is now able to print non-ASCII characters. #7045, #7048
- Commands issued with a timestamp outside the garbage collection window will now always fail. #6992
- All aggregate functions now return
NULL
when run on a table with no rows. #7043
Performance Improvements
jemalloc
is now used as the memory allocator for the C++ portions of the server. The build tagstdmalloc
can be used to switch back to the standardmalloc
. #7006- Raft logs are now garbage collected more aggressively. This should generally make snapshots smaller, reducing memory pressure, but sometimes it may cause more snapshots to be sent. #7040
- Reduced allocations in
INSERT
andUPDATE
statements involving secondary indexes. #7011 - Improved performance of conditional puts with no existing value. #7016
- Improved performance of small transactions. #7015
Doc Updates
- The Build an App tutorial now demonstrates connecting to CockroachDB from the Rust Postgres driver.
- Docs on the
CREATE TABLE
statement now offer both basic and expanded grammar diagrams. #347 - Docs on constraints now include diagrams of all table-level and row-level constraints. #361
Contributors
This release includes 56 merged PRs by 17 authors. We would like to thank the following contributors from the CockroachDB community, especially first-time contributor Alex Robinson:
- Alex Robinson
- Kenji Kaneda
- Paul Steffensen
beta-20160602
Release Date:
New Features
- String literals can now be parsed as
DATE
,TIMESTAMP
,TIMESTAMPTZ
, orINTERVAL
without an explicit cast. #6925 - Floor division is now supported with a new operator,
//
. #6642 - Sub-queries are now allowed in
LIMIT
,OFFSET
, andRETURNING
expressions. #6735
Bug Fixes
- Fixed a missing error check that could result in inconsistencies when transactions conflict. #6899
Performance Improvements
- Improved performance of one-phase transactions. #6857, #6861
- Improved the ability of
MIN()
andMAX()
functions to detect the ordering of the data and read only a single row. #6891
Doc Updates
- Added a tutorial on building an Application with CockroachDB and SQLAlchemy
- Added docs on how CockroachDB handles
NULL
values in various contexts. #333 - Improved guidance on Contributing to CockroachDB docs. #344
- Improved zone configuration examples. #327
Contributors
This release includes 55 merged PRs by 18 authors. We would like to thank the following contributors from the CockroachDB community, especially first-time contributors, Sean Loiselle and Thonakom Sangnetra:
- Sean Loiselle
- Thanakom Sangnetra
- Paul Steffensen
beta-20160526
Release Date:
Backwards-Incompatible Changes
- Numeric literals containing a decimal point are now treated as type
DECIMAL
instead of typeFLOAT
, unless type inference determines thatFLOAT
should be used. In some cases, an explicitCAST(x AS FLOAT)
may be needed. #6752 - The custom error codes
CR000
(indicating a transaction needs to be retried) andCR001
(indicating a transaction is in an invalid state) have been replaced with the PostgreSQL standard error codes40001
(serialization failure) and25000
(invalid transaction state), respectively. #6797
Bug Fixes
- Fixed problems when tables are renamed or dropped and recreated in rapid succession. #6595
DROP DATABASE
now works correctly with quoted names. #6851- Gracefully shutting down a node now completes faster. #6777
INSERT ... ON CONFLICT DO NOTHING
no longer crashes the server when no conflicting index is given. #6795INSERT ... ON CONFLICT DO NOTHING
now requires only theINSERT
permission instead of bothINSERT
andUPDATE
. #6827- Numeric literals in scientific notation are now case-insensitive. #6864
TIMESTAMP WITHOUT TIME ZONE
is now recognized as a synonym forTIMESTAMP
. #6888- Attempting to access a database that does not exist now returns PostgreSQL error code
3D000
("invalid catalog name") instead of a generic error. #6680
Internal Changes
- Most of the
/_status/
HTTP endpoints now use GRPC internally. #6702 #6788 - The
cockroach exterminate
command (which did not work) has been removed. #6780 - Garbage collection now retains the first value outside the configured interval, since it was the current value at the start of the interval. #6778
Doc Updates
- Docs on the
INSERT
statement are now available. #308 - Docs on the
UPSERT
statement are now available. #308
Contributors
This release includes 58 merged PRs by 16 authors. We would like to thank the following contributor from the CockroachDB community:
- Kenji Kaneda
beta-20160519
Release Date:
Backwards-Incompatible Changes
TIMESTAMP
values are now truncated to microsecond resolution when sent over the network for compatibility with the PostgreSQL protocol. Theformat_timestamp_ns(ts)
orextract(nanosecond from ts)
functions can be used to access the full nanosecond precision of a timestamp. Thenow()
,current_timestamp()
, andstatement_timestamp()
functions are truncated to microsecond resolution to avoid confusion when timestamp values are used in unique indexes; the newcurrent_timestamp_ns()
function can be used to get a non-truncated timestamp. #6604
New Features
DO NOTHING
is now supported inINSERT ... ON CONFLICT
statements. #6633CHECK
constraints can now be specified at the table level. #6625- Binary encoding is now supported in the network protocol for
BOOL
,FLOAT
,DECIMAL
, andSTRING
types, improving compatiblity with some PostgreSQL drivers. #6661 - The new
cockroach freeze-cluster
command has been added to the command-line interface; it will be used in the upgrade process for a future beta release. #6675
Bug Fixes
EXPLAIN DELETE
no longer executes theDELETE
statement. #6622CHECK
constraints are now enforced duringUPDATE
statements. #6753CHECK
constraints now work correctly when columns have been dropped. #6730- Tuples and the
DEFAULT
keyword now work inINSERT ... ON CONFLICT DO UPDATE
statements. #6636 - Errors are now reported with standard PostgreSQL error codes in more places. #6652, #6554
- Fixed a panic while a node is attempting a clean shutdown. #6677
- Internal retry logic has been improved so requests are no longer stuck retrying endlessly on the wrong replica. #6688
Performance Improvements
- Snapshot generation is now throttled to reduce peak memory consumption. #6632
- Improved performance for transactions with low contention. #6413
- Improved performance for
UPSERT
statements (and the equivalentINSERT ... ON CONFLICT DO UPDATE
statements) when the table has no secondary indexes and values are supplied for all columns in the table. #6673
Doc Updates
- SQL Grammar diagrams have been streamlined to reduce unnecessary duplication.
- Docs on SQL Constraints are now available. #280
- Docs on the
CREATE TABLE
statement are now available. #296
Contributors
This release includes 65 merged PRs by 18 authors. We would like to thank the following contributor from the CockroachDB community:
- Kenji Kaneda
- Paul Steffensen
beta-20160512
Release Date:
Upgrade Procedure
- This release cannot be run concurrently with older beta releases. Please stop all nodes running older releases before restarting any node with this version.
New Features
- The
INSERT
statement now accepts anON CONFLICT
clause, for a more flexible alternative toUPSERT
. #6591 - The new
EXPLAIN (TYPES)
subcommand prints information about the types of expressions in a statement. #6482 - Added the aggregate functions
BOOL_AND()
andBOOL_OR()
. #6535 - The aggregate functions
SUM(INT)
andAVG(INT)
now returnDECIMAL
instead ofINT
andFLOAT
respectively. #6532 - The new command-line flag
--raft-tick-interval
allows the raft heartbeat frequency to be changed in high-latency deployments. #6615 TIMESTAMP
values can now be cast to typeSTRING
. #6605- The
CREATE DATABASE
statement now accepts anENCODING
option for compatibility with PostgreSQL, althoughUTF8
is the only supported encoding. #6614
Bug Fixes
- Fixed a bug when a single
INSERT
statement inserts multiple values for the same primary key. #6564 - Fixed an inconsistency that could occur when a transaction in
SNAPSHOT
isolation used the internalDeleteRange
operation. #6548 - Fixed an integer underflow that could result in log messages like
transport: http2Server received 4294965918-bytes
. #6567 - Long-running transactions are no longer allowed to exceed their table descriptor lease. #6418
- Subtracting an
INTERVAL
from aTIMESTAMP WITH TIME ZONE
returns aTIMESTAMP WITH TIME ZONE
instead of one without a time zone. #6540 - Improved type checking of comparisons involving tuples. #6517
CREATE TABLE
,ALTER TABLE
, andDROP INDEX
now do more validation of their arguments. #6492
Performance improvments
- Improved tracking of keys modified during a transaction, improving performance of bulk inserts. #6611
- Schema changes can now continue past transient errors. #6552
Doc Updates
- The new Tech Talks page links to recordings and slides from talks by CockroachDB founders and engineers.
- Docs for the built-in SQL client now demonstrate various ways to execute SQL statements from the command line and run external commands from the interactive shell.
- Data type docs now provide details about storage size.
- Although it's not possible to access CockroachDB's key-value store directly, the FAQ now suggests a SQL alternative.
- Replication recommendations now address cross-datacenter scenarios.
Contributors
This release includes 87 merged PRs by 18 authors. We would like to thank the following contributor from the CockroachDB community:
- Kenji Kaneda
beta-20160505
Release Date:
New Features
- New SQL command
UPSERT
is available. This is syntactically similar toINSERT
but will update the row with the supplied columns if there is a conflicting row for the primary key. #6456 - The SQL type system has been overhauled, reducing the number of explicit casts required. RFC
- Tuples are now considered for index selection, so
SELECT * FROM t WHERE (a, b) > ($1, $2)
can use an index defined on(a, b)
. #6332
Performance improvements
- Bulk inserts to previously-empty table spans are now faster. #6375, #6414
- Ranges that have grown above the target size are now split before being rebalanced, reducing memory usage. #6447
- Reduced rapid memory growth during partitions. #6448
ALTER TABLE
now performs backfill operations in chunks. #6056DROP TABLE
now uses the schema change mechanism intead of synchronously deleting all data. #6336- Scanning over records that have only one MVCC version is faster. #6351
- The command queue now uses coarse-grained spans until a conflict has occurred. #6412
- When a replica is rebalanced from one node to another, the old node no longer triggers unnecessary Raft elections. #6423
Production
- Servers now attempt to drain more gracefully when restarted. #6313
- Metrics on lease requests are now available internally. #5596
- The RocksDB cache will no longer use all available memory if
cgroups
reports a limit higher than physical memory. #6379
Bug Fixes
- The range descriptor cache is now invalidated correctly, fixing a bug in which requests could be retried repeatedly on the wrong node. #6425
- Fixed a bug with some queries using aggregate functions like
MIN()
andMAX()
. #6380 - Tuple comparisons now work correctly when one tuple contains
NULL
. #6370
Doc Updates
- Community-supported docs and configuration files for running CockroachDB inside a single VirtualBox virtual machine. #263
- Docs on using environment variables as default values for command-line flags. #235
- Docs on using the
version
andnode
commands.
Contributors
This release includes 66 merged PRs by 18 authors. We would like to thank the following contributors from the CockroachDB community, especially first-time contributor Paul Steffensen.
- Bogdan Batog
- il9ue
- Kenji Kaneda
- Paul Steffensen
beta-20160428
Release Date:
Backwards-Incompatible Changes
- Time zone offsets are no longer shown when querying columns of type
TIMESTAMP
; the new typeTIMESTAMP WITH TIME ZONE
should be used instead. This is more consistent with other databases. #6165
New Features
INTERVAL
values accept two new formats: ISO8601 (P2H30M
) and the PostgreSQL format (2 hours 30 minutes
) in addition to the existing Go style (2h30m
). #6216- Tuples can now be compared in SQL expressions. #6217
- The server now implements the
systemd
NOTIFY_SOCKET
protocol. #6268 - The new flag
cockroach start --background
can be used to start a server in the background. This is better than appending&
because the process doesn't return until it is ready to receive traffic. #6268
Bug fixes
- The SQL shell can once again be suspended with
ctrl-z
. #6171 - Fixed an error in the SQL shell when the history file contains empty lines. #6192
- The
--store
and--key-size
command-line flags are no longer marked as required. #6229 - The command line interface is better about printing errors to
stderr
, not just the log file. #6258 - The
INFO
log file is now created in the correct default location (cockroach-data/logs
) instead of$TMPDIR
. #6265 - Fixed errors that could be introduced by updating tables while a schema change is in progress. #6160
- Fixed several potential panics. #6187, #6235, #6242
Performance Improvements
- Raft processing is no longer blocked while generating a snapshot for a new replica. #6253
Contributors
This release includes 89 merged PRs by 19 authors. We would like to thank the following contributors from the CockroachDB community, especially first-time contributor Karl Southern.
- Karl Southern
- Kenjiro Nakayama
beta-20160421
Release Date:
Upgrade Procedure
- This release cannot be run concurrently with older beta releases. Please stop all nodes running older releases before restarting any node with this version.
New Features
UPDATE
statements may now set columns which are part of the primary key. #6043CHECK
constraints can now be defined when creating tables and will be enforced forINSERT
statements (but not yet forUPDATE
statements). #6044- The
pow()
andexp()
functions onDECIMAL
values no longer lose precision. #6170 - In the
cockroach sql
shell, the special command!
can now be used to execute a system command and display its output.|
executes a system command and runs its output as a SQL statement. #5961 - Added
SHOW CREATE TABLE
. #6158 - The
RETURNING
clause ofINSERT
statements can now refer to tables by aliases defined withAS
. #5903 - The SQL parser now accepts the
CASCADE
andRESTRICT
keywords in theDROP INDEX
,TRUNCATE TABLE
,ALTER TABLE DROP COLUMN
, andALTER TABLE DROP CONSTRAINT
statements. These keywords relate to features we have not yet implemented, so they do nothing, but this change improves compatibility with frameworks that like to send these keywords. #5957
Admin UI
- The time scale used for graphs can now be changed. #6145
- Some UI elements now include tooltips with additional explanations. #6006
- A warning is displayed when the cluster is unreachable. #6042
- There are now fewer unnecessary scrollbars. #6018
Bug fixes
- The rebalancer is now better at distributing ranges across the nodes in a cluster. #6133
- Fixed a major cause of "timestamp in future" errors. #5845
- Fixed several potential panics. #6111 #6143
Performance Improvements
- Improved the performance of schema changes while data is being modified. #5996
- The RPC subsystem is now bypassed for requests to the local node. #6021
- Information about completed transactions is now cleaned up more efficiently. #5882
- Fixed a leak of goroutines. #6010
- Reduced memory allocations on the critical path. #6117 #6119 #6140 #6141 #6142
Doc Improvements
- Overview of SQL privileges.
- Summaries and required privileges for all supported SQL statements.
- Reference docs for
DROP DATABASE
,DROP TABLE
,GRANT
,RENAME DATABASE
,RENAME TABLE
,REVOKE
, andSHOW INDEX
.
Contributors
This release includes 74 merged PRs by 21 authors. We would like to thank the following contributors from the CockroachDB community, especially first-time contributor Andrew NS Yeow.
- Andrew NS Yeow
- Kenji Kaneda
- Kenjiro Nakayama
- Lu Guanqun
- Seif Lotfy
beta-20160414
Release Date:
Backwards-incompatible Changes
- Any databases using the
DECIMAL
type will need to be deleted and created from scratch. Columns of this type were encoded incorrectly in older beta releases. (Again! We apologize for the inconvenience.) #5994 - The SQL function
transaction_timestamp_unique
has been removed in favor of the newcluster_logical_timestamp
function described below.
New Features
ALTER TABLE
supports several new operations:ADD COLUMN
with a default value (#5759),ALTER COLUMN SET DEFAULT
,ALTER COLUMN DROP DEFAULT
, andALTER COLUMN DROP NOT NULL
(#5947)- The
TIMESTAMPTZ
type is now accepted as an alias forTIMESTAMP
for compatibility with PostgreSQL; ourTIMESTAMP
type already supports time zones in the same way as PostgreSQL'sTIMESTAMPTZ
. #5893 - The
STRING
type now accepts a length parameter (e.g.,STRING(50)
), similar toCHAR
andVARCHAR
. #5918 - The
LIMIT
clause now accepts placeholders. #5977 - The
RETURNING
clause ofINSERT
,DELETE
, andUPDATE
statements now accepts placeholders. #5934 - When sending queries to the
cockroach sql
tool viastdin
, a terminating semicolon is not required and instructions for interactive mode are no longer printed (similar to the existing behavior of-e
). #5988 - The
experimental_uuid_v4()
SQL function has been renamed touuid_v4()
. The old name remains as a deprecated alias. #5886
Performance Improvements
- Reduced the number of files created in the data directory, and fixed issues in which the process could run out of file descriptors. #5888
- Introduced a special fast path for transactions that are contained entirely within one range. #5966
- Reduced the number of unnecessary network round trips by ensuring that the range lease holder and the raft leader coincide. #5973
Bug Fixes
- The gossip system no longer recommends redundant forwarding addresses, which could prevent the cluster from fully connecting. #5901
- Timestamps are now correctly reported in the network protocol as having time zone offsets. #5909
- Buffered data is now flushed to the network immediately on error. #5909
- Timeseries data no longer diverges across replicas. #5905
Internal Changes
- SQL functions related to the current time (
now
,current_timestamp
,statement_timestamp
,statement_timestamp
) now use the clock of the node that executed them instead of a timestamp derived from the internal hybrid logical clock. This means that these functions are less likely to produce duplicate values, but it is more likely for one transaction to see a timestamp that is less than a timestamp already seen in another transaction. Applications that require a globally monotonic timestamp-like value can use the new functioncluster_logical_timestamp
instead. #5805 - New HTTP endpoint
/debug/metrics
exposes internal metric data in JSON format. #5894 - Logs are no longer written to
stderr
by default, only to thelogs
subdirectory of the data directory. #5979
Contributors
This release includes 58 merged PRs by 18 authors. We would like to thank the following contributors from the CockroachDB community, especially first-time contributor Andrey Shinkevich.
- Andrey Shinkevich
- Kenji Kaneda
- Seif Lotfy
- es-chow
beta-20160407
Release Date:
Backwards-incompatible Changes
- Any databases using the
DECIMAL
type will need to be deleted and created from scratch. Columns of this type were encoded incorrectly bybeta-20160330
. #5820 SELECT
statements must now specify one or more columns or expressions. Previously, statements such asSELECT FROM t
were allowed but the results would confuse many clients. #5859- It is now an error to insert a value that is too large into a column
with a type of limited length such as
VARCHAR(n)
. #5750
Compatibility
- Added support for the "flush" message in the PostgreSQL network protocol, which improves compatibility with the node.js driver. #5740
- Fixed a panic when handling certain queries sent by the PHP PDO library. #5783
- Improved parsing of timestamps for compatibility with the Go
lib/pq
client library. #5877
New Features
- Index hints:
SELECT FROM tbl@idx
orSELECT FROM tbl@{FORCE_INDEX=idx}
instructs the query planner to use the given index. #5785 and #5806 - The
cockroach
command-line client now accepts environment variables as default values for many command-line flags. See--help
for details. #5430 - Added SQL
version()
function. #5763 - Added compiler and platform information to
cockroach version
output. #5766 - Debugging tools show fractional seconds in timestamps. #5736
- In secure mode, plain HTTP requests to the
http-port
used by the admin UI are now redirected to HTTPS. #5746 - Links to debugging pages are available on the HTTP port at
/debug/
. #5795 - The
cockroach zone set
command now echos the new configuration. #5829
Bug Fixes
- Improved flow control for raft snapshots, fixing an issue that could lead to nodes running out of memory. #5721
- Fixed a deadlock scenario in which two conflicting transactions would both be unable to make progress. #5710
- Fixed a panic while executing certain
DELETE
statements. #5840
Internal Changes
- Clock offsets are now measured continuously. #5512
- Improved caching to avoid redundant range descriptor lookups. #5627
- Reduced log spam when nodes are down. #5883
Contributors
This release includes 77 merged PRs by 18 authors. We would like to thank the following contributors from the CockroachDB community, especially first-time contributor Seif Lotfy.
- Kenji Kaneda
- Seif Lotfy