What's New in v24.1

On this page Carat arrow pointing down
Note:

The releases on this page are testing releases, not supported or intended for production environments. The new features and bug fixes noted on this page may not yet be documented across CockroachDB’s documentation.

  • For CockroachDB Self-Hosted: All v24.1 testing binaries and Docker images are available for download.
  • For CockroachDB Dedicated: v24.1 testing releases are not available.
  • For CockroachDB Serverless: v24.1 testing releases are not available.

When a v24.1 release becomes Generally Available, a new v24.1.0 section on this page will describe key features and additional upgrade considerations.

Get future release notes emailed to you:

v24.1.0-beta.1

Release Date: April 17, 2024

Downloads

Warning:

CockroachDB v24.1.0-beta.1 is a testing release. Testing releases are intended for testing and experimentation only, and are not qualified for production environments and not eligible for support or uptime SLA commitments.

Note:

Experimental downloads are not qualified for production use and not eligible for support or uptime SLA commitments, whether they are for testing releases or production releases.

Full CockroachDB executable

SQL-only command-line client executable

Warning:

The CockroachDB executable for Windows is experimental and not suitable for production deployments. Windows 8 or higher is required.

Docker image

Multi-platform images include support for both Intel and ARM. Multi-platform images do not take up additional space on your Docker host.

Within the multi-platform image, both Intel and ARM images are generally available for production use.

To download the Docker image:

icon/buttons/copy
docker pull cockroachdb/cockroach-unstable:v24.1.0-beta.1

Changelog

View a detailed changelog on GitHub: v24.1.0-alpha.5...v24.1.0-beta.1

SQL language changes

  • SHOW JOBS no longer displays some internal retry counter columns (last_run, next_run, num_runs) and now only shows the statement, trace_id, and execution_errors columns when inspecting a specific job ID or IDs. #121286
  • SHOW JOBS now shortens long job descriptions to 100 characters to make the table easier to read while the full description and statement can be inspected using SHOW JOB or SHOW JOBS on specific job IDs. #121286
  • Extended pg_depend to include dependencies between UDFs. #121313
  • With sql_safe_updates set to true, SELECT FOR UPDATE and SELECT FOR SHARE statements now return an error if they do not contain either a WHERE clause or a LIMIT clause. Also, UPDATE and DELETE statements without WHERE clauses but with LIMIT clauses now bypass sql_safe_updates, which better matches MySQL behavior. #121466
  • Added support for PL/pgSQL CALL statements. It is now possible to call a stored procedure from a PL/pgSQL routine. #121743
  • DEFAULT expressions for input parameters of user-defined functions and stored procedures are now supported. #121811

Command-line changes

DB Console changes

  • The Commit Latency chart in the Changefeeds dashboard now aggregates by max instead of by sum for multi-node changefeeds. This more accurately reflects the amount of time for events to be acknowledged by the downstream sink. #120787
  • Introduced a license expiration message in the DB Console in the top-right corner of the primary header. This message indicates the remaining days before license expiration for clusters with an Enterprise or trial license. #120830
  • The Jobs table page no longer includes two columns related to a deprecated internal implementation detail (last execution time and execution count). #121286
  • The timeseries graphs shown on the SQL Activity statement details page in the DB Console will now render properly, after fixing a bug related to setting the time range of the charts. #121461
  • Index recommendations in the DB Console will now function properly for indexes on tables or columns whose names contain quotation marks or whitespace. For example: CREATE INDEX ON "my table" ("my col");. #122120

Bug fixes

  • Sequence options for NO MINVALUE and NO MAXVALUE now match PostgreSQL behavior. Sequence MINVALUE and MAXVALUE automatically adjust to new types bounds mirroring behavior of PostgreSQL. #121310
  • CockroachDB could previously "leak" reported memory usage as accounted by the internal memory accounting system, the limit for which is configured with the --max-sql-memory flag, on long-running sessions that issue many (hundreds of thousands or more) transactions. This, in turn, could result in "root: memory budget exceeded" errors for other queries. This bug was present in versions v23.1.17 and v23.2.3 and is now fixed. #121873
  • CockroachDB could previously incorrectly evaluate IN expressions that had INT2 or INT4 type on the left side and values outside of the range of the left side on the right side. The bug has been present since at least v21.1 and is now fixed. #121954
  • Fixed a slow memory leak in the deprecated Pub/Sub changefeeds, which can accumulate when restarting or canceling many deprecated Pub/Sub changefeeds. The bug had been present since the deprecated Pub/Sub changefeed was introduced in a testing release of v22.1. #121867

Contributors

This release includes 134 merged PRs by 36 authors.

v24.1.0-alpha.5

Release Date: April 1, 2024

Downloads

Warning:

CockroachDB v24.1.0-alpha.5 is a testing release. Testing releases are intended for testing and experimentation only, and are not qualified for production environments and not eligible for support or uptime SLA commitments.

Note:

Experimental downloads are not qualified for production use and not eligible for support or uptime SLA commitments, whether they are for testing releases or production releases.

Full CockroachDB executable

SQL-only command-line client executable

Warning:

The CockroachDB executable for Windows is experimental and not suitable for production deployments. Windows 8 or higher is required.

Docker image

Multi-platform images include support for both Intel and ARM. Multi-platform images do not take up additional space on your Docker host.

Within the multi-platform image, both Intel and ARM images are generally available for production use.

To download the Docker image:

icon/buttons/copy
docker pull cockroachdb/cockroach-unstable:v24.1.0-alpha.5

Changelog

View a detailed changelog on GitHub: v24.1.0-alpha.4...v24.1.0-alpha.5

Enterprise edition changes

  • Changefeeds now default to evenly distributing their work across all replicas, including followers, regardless of leaseholder placement. To disable this behavior, set the cluster setting changefeed.balanced_distribution.enabled to false. If disabled, changefeed planning reverts to its previous behavior for distributing work. #120077
  • When physical cluster replication is enabled, the output of the SHOW VIRTUAL CLUSTER ... WITH REPLICATION STATUS command now displays replication lag. #120782
  • When physical cluster replication is enabled, the output of the SHOW VIRTUAL CLUSTER WITH REPLICATION STATUS to 1 command has changed:
    • The output no longer displays replication_job_id or service_mode return fields.
    • The data_state field has been renamed to status.
    • The fields that are displayed are now ordered as follows: retained_time, replicated_time, replication_lag, cutover_time, status. #120782

SQL language changes

Operational changes

  • You can now enable asynchronous buffering of file-group log sinks using the buffering configuration options either by default or to an individual file-group. The buffering configuration option is incompatible with the buffered-writes configuration option. To try the buffering option, you must set buffered-writes: false. Cockroach Labs recommends setting max-staleness to 1s and flush-trigger-size to 256KiB. #120428
  • A minimum Raft scheduler concurrency is now enforced per store so that nodes with many stores do not spread workers too thin. This helps to avoid high scheduler latency across replicas on a store when load is imbalanced. #120162
  • The new metrics kv.split.estimated_stats and kv.split.total_bytes_estimates track the number of splits that produce MVCC statistic estimates and the total bytes of estimates produced. #119894
  • The new cluster setting storage.sstable.compression_algorithm configures the compression algorithm used when compressing sstable blocks. #120784
  • The new cluster setting kv.dist_sender.proxy.enabled, which is enabled by default, causes proxy requests to be routed through a follower replica when the leaseholder is unavailable. #117340
  • The new startup flag --wal-failover allows you to explicitly set the path for WAL failover of a single-store node. #120783
  • Cluster virtualization is now enabled using either of the new startup flags --virtualized or --virtualized-empty instead of the --config-profile flag. #120813
  • The following metrics, which track the SQL statistics subsystem's task to flush in-memory statistics to persisted storage, are now more consistent with other metrics used in the subsystem.
    • sql.stats.flushes.successful: Number of times SQL statistics have been flushed successfully to persistent storage.
    • sql.stats.flushes.failed: Number of attempted SQL statistics flushes that failed with errors.
    • sql.stats.flush.latency: The latency of attempted SQL statistics flushes to persistent storage, including both successes and failures. #120709
  • The following new metrics track the number and outcome of proxy requests when kv.dist_sender.proxy.enabled is set to true:
    • distsender.rpc.proxy.sent
    • distsender.rpc.proxy.err
    • distsender.rpc.proxy.forward.sent
    • distsender.rpc.proxy.forward.err

Cockroach Labs recommends monitoring and alerting on distsender.rpc.proxy.sent, because it indicates a possible network partition. #120239 - The provisioned-rate field of a node's store specification can no longer be used to add constraints for the disk name or bandwidth. By default, bandwidth is constrained according to the cluster setting kv.store.admission.provisioned_bandwidth. To override this setting for a specific node, the storage specification must contain provisioned-rate=bandwidth={bandwidth-bytes/s}. #120895 - Removal of the cluster setting kv.rangefeed.scheduler.enabled, which was announced in v24.1.0-alpha.1, has been reverted, and the cluster setting is reinstated. #121164

DB Console changes

  • In generated statement fingerprints in the DB Console Statements page, lists with only literals or placeholders or similar subexpressions are shortened to their first item followed by "more". #120507

Bug fixes

  • Fixed a bug introduced in v23.2 that could cause a PL/pgSQL routine to return incorrect results when the routine included:
    1. At least one parameter.
    2. An IF statement with one leak-proof branch and one branch with side effects. #120451
  • Fixed a rare bug where a BACKUP command issued shortly after an ALTER TABLE {table_name} SET (exclude_data_from_backup = true) could exclude data from an unrelated table from the backup. #120188
  • Fixed a behavior where a memory exhaustion error during a schema change was treated as a permanent failure and reverted. Such schema changes are now retried instead of reverted. #120806
  • Fixed a bug where the attname for a dropped column was not correctly padded with 8 . characters to be compatible with PostgreSQL. #120861

Performance improvements

  • Splits no longer hold latches for time proportional to the range size while computing MVCC statistics. Instead, MVCC statistics are pre-computed before the critical section of the split. As a side effect, the resulting statistics are no longer 100% accurate because they may correctly distribute writes concurrent with the split. To mitigate against this potential inaccuracy, and to prevent the statistics from drifting after successive splits, the existing stored statistics are re-computed and corrected if needed during the non-critical section of the split. #119894
  • The cost-based optimizer now generates more efficient query plans for some queries with OFFSET clauses. #121160

Contributors

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

  • Andrew Delph

v24.1.0-alpha.4

Release Date: March 25, 2024

Downloads

Warning:

CockroachDB v24.1.0-alpha.4 is a testing release. Testing releases are intended for testing and experimentation only, and are not qualified for production environments and not eligible for support or uptime SLA commitments.

Note:

Experimental downloads are not qualified for production use and not eligible for support or uptime SLA commitments, whether they are for testing releases or production releases.

Full CockroachDB executable

SQL-only command-line client executable

Warning:

The CockroachDB executable for Windows is experimental and not suitable for production deployments. Windows 8 or higher is required.

Docker image

Multi-platform images include support for both Intel and ARM. Multi-platform images do not take up additional space on your Docker host.

Within the multi-platform image, both Intel and ARM images are generally available for production use.

To download the Docker image:

icon/buttons/copy
docker pull cockroachdb/cockroach-unstable:v24.1.0-alpha.4

Changelog

View a detailed changelog on GitHub: v24.1.0-alpha.3...v24.1.0-alpha.4

Security updates

  • When configuring logs, file-permissions are now applied literally, such that file-permissions: 644 will result in files with permissions matching 644 (instead of the previous behavior's 640). Previously, CockroachDB's umask (which is always at least 007) was being applied after the file-permissions field was used to create files, meaning the resulting permissions did not match those specified in the log configuration. #120669

General changes

  • The following metrics were added for observability of per-store disk events:

    • storage.disk.read.count
    • storage.disk.read.bytes
    • storage.disk.read.time
    • storage.disk.write.count
    • storage.disk.write.bytes
    • storage.disk.write.time
    • storage.disk.io.time
    • storage.disk.weightedio.time
    • storage.disk.iopsinprogress

    The metrics match the definitions of the sys.host.disk.* system metrics. #119885

Enterprise edition changes

  • server.controller.default_target_cluster can now be set to any virtual cluster name by default, including a virtual cluster yet to be created or have service started. #120080
  • The READ COMMITTED isolation level now requires the cluster to have a valid enterprise license. #120154
  • The new boolean changefeed option ignore_disable_changefeed_replication, when set to true, prevents the changefeed from filtering events even if CDC filtering is configured via the disable_changefeed_replication session variable, sql.ttl.changefeed_replication.disabled cluster setting, or the ttl_disable_changefeed_replication table storage parameter. #120255

SQL language changes

Operational changes

  • The cluster setting admission.wal.failover.unlimited_tokens.enabled can be set to true to cause unlimited admission tokens during write-ahead log (WAL) failover. This should not be changed without significant expertise, since the default, which preserves the token counts from the preceding non-WAL-failover interval, is expected to be safer. #120135
  • The new cockroach start option --wal-failover=among-stores or COCKROACH_WAL_FAILOVER=among-stores environment variable will configure a multi-store CockroachDB node to fail over a store's write-ahead log (WAL) to another store's data directory. Failing over the write-ahead log may allow some operations against a store to continue to complete even if the underlying storage is temporarily unavailable. #120509
  • The new storage.wal_failover.unhealthy_op_threshold cluster setting allows configuring the latency threshold at which a WAL write is considered unhealthy. #120509
  • Two new metrics track the status of the SQL Activity Update job, which pre-aggregates top K information within the SQL statistics subsytem and writes the results to system.statement_activity and system.transaction_activity:
    • sql.stats.activity.updates.successful: Number of successful updates made by the SQL activity updater job.
    • sql.stats.activity.update.latency: The latency of updates made by the SQL activity updater job. Includes failed update attempts. #120522
  • Added a new counter metric, sql.stats.flush.done_signals.ignored, that tracks the number of times the SQL activity update job has ignored the signal that indicates that a flush has completed. This metric may indicate that the SQL activity update job is taking longer than expected to complete. #120522
  • Added a new counter metric, sql.stats.activity.updates.failed, to measure the number of update attempts made by the SQL activity update job that failed with errors. #120522
  • Added a new counter metric, sql.stats.flush.fingerprint.count, that tracks the number of unique statement and transaction fingerprints included in the SQL stats flush. #120522
  • The /_status/stores endpoint now includes node_id, dir, and wal_failover_path fields to show the store's node ID, data directory, and path to the configured WAL failover secondary, if configured. #120677

Command-line changes

  • The new --go-gc-percent flag of the cockroach start command controls the garbage collection target percentage of the Go runtime, mirroring the existing GOGC environment variable. A garbage collection is triggered when the ratio of freshly allocated data to live data remaining after the previous collection reaches this percentage. If left unspecified and if a Go soft memory limit is configured (i.e., not explicitly disabled via --max-go-memory or GOMEMLIMIT), the garbage collection target percentage defaults to 300%. Setting the flag to a negative value disables the target percentage garbage collection heuristic, and only the soft memory limit heuristic triggers garbage collection. #119605

DB Console changes

  • The Queues dashboard now includes lease queue metrics. #119386
  • The DB Console SQL Activity Statement Fingerprint page has replaced the Failed? boolean column with a Failure Count column that shows the number of failed executions for the given statement fingerprint.
    In the SQL Activity table, the same statement fingeprint no longer appears in separate rows for failed executions and successful executions. Instead, they are combined into a single statement fingerprint. #120236
  • The DB Console now displays an alert message when a license has expired or will expire in fewer than 15 days. #120490

Bug fixes

  • Fixed a bug with DROP SCHEMA ... CASCADE that could lead to dangling function references in other schemas accessing any functions. #119932
  • Fixed a bug where a RESTORE of a backup that itself contained a table created by the RESTORE of a table with an in-progress IMPORT INTO would fail to restore all rows. #120414
  • Fixed a bug where identity columns without any configured sequence options did not display the default values for identity attributes in information_schema. #119459
  • Fixed a bug where a GRANT ... ON ALL TABLES statement could fail if sequences existed and they did not support a privilege (e.g., BACKUP). #120685
  • Fixed a bug where an EXPLAIN (DDL) statement would generate event log entries for schema changes that were not executed. #120563

Contributors

This release includes 153 merged PRs by 179 authors.

v24.1.0-alpha.3

Release Date: March 18, 2024

Downloads

Warning:

CockroachDB v24.1.0-alpha.3 is a testing release. Testing releases are intended for testing and experimentation only, and are not qualified for production environments and not eligible for support or uptime SLA commitments.

Note:

Experimental downloads are not qualified for production use and not eligible for support or uptime SLA commitments, whether they are for testing releases or production releases.

Full CockroachDB executable

SQL-only command-line client executable

Warning:

The CockroachDB executable for Windows is experimental and not suitable for production deployments. Windows 8 or higher is required.

Docker image

Multi-platform images include support for both Intel and ARM. Multi-platform images do not take up additional space on your Docker host.

Within the multi-platform image, both Intel and ARM images are generally available for production use.

To download the Docker image:

icon/buttons/copy
docker pull cockroachdb/cockroach-unstable:v24.1.0-alpha.3

Changelog

View a detailed changelog on GitHub: v24.1.0-alpha.2...v24.1.0-alpha.3

Enterprise edition changes

  • cockroach gen encryption-key now accepts a --version=2 parameter. Version 2 keys activate a new encryption implementation with improved performance. This is expected to become the default in CockroachDB v24.2. #119913

SQL language changes

  • Mutation statements such as UPDATE and DELETE as well as locking statements such as SELECT FOR UPDATE are not allowed in read-only transactions or AS OF SYSTEM TIME transactions. This fixes an oversight where CockroachDB was allowing mutation statements and locking statements in implicit single-statement transactions using AS OF SYSTEM TIME. #120097
  • Added support for RETURN statements with no expression for routines with OUT parameters and routines with a VOID return type. #120043
  • ALTER COLUMN can now change columns to an identity column by using the syntax in one of the following:

    icon/buttons/copy
    ALTER TABLE t ALTER COLUMN c ADD GENERATED ALWAYS AS IDENTITY [( <opt_sequence_option_list> )]
    ALTER TABLE t ALTER COLUMN c ADD GENERATED BY DEFAULT AS IDENTITY[( <opt_sequence_option_list> )]
    

    Identity columns can have their identity type altered by using the syntax in one of the following statements:

    icon/buttons/copy
    ALTER TABLE t ALTER COLUMN c SET GENERATED ALWAYS
    ALTER TABLE t ALTER COLUMN c SET GENERATED BY DEFAULT
    

    #115889

  • Added support for the PL/pgSQL NULL statement. #119037

  • crdb_internal.leases is now behind the VIEWCLUSTERMETADATA privilege. #120014

  • PL/pgSQL blocks can now be nested in a block that has an exception handler. #120045

DB Console changes

  • Resolved an issue where clusters with multiple stores per node may list inaccurate region/node information in the Databases page. #119260
  • VIEW type tables will no longer display in the DB Console Databases pages. Previously these would be listed with no information, only displaying errors. #119890
  • Fixed an intermittent page crash in the Schema Insights tab. #120137
  • Fixed a bug where the Rows written value was incorrectly showing the Rows read value on the Insights page. #120145

Bug fixes

Contributors

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

  • Andrew Delph

v24.1.0-alpha.2

Release Date: March 11, 2024

Downloads

Warning:

CockroachDB v24.1.0-alpha.2 is a testing release. Testing releases are intended for testing and experimentation only, and are not qualified for production environments and not eligible for support or uptime SLA commitments.

Note:

Experimental downloads are not qualified for production use and not eligible for support or uptime SLA commitments, whether they are for testing releases or production releases.

Full CockroachDB executable

SQL-only command-line client executable

Warning:

The CockroachDB executable for Windows is experimental and not suitable for production deployments. Windows 8 or higher is required.

Docker image

Multi-platform images include support for both Intel and ARM. Multi-platform images do not take up additional space on your Docker host.

Within the multi-platform image, both Intel and ARM images are generally available for production use.

To download the Docker image:

icon/buttons/copy
docker pull cockroachdb/cockroach-unstable:v24.1.0-alpha.2

Security updates

  • DB Console session cookie is now marked HttpOnly to prevent it from being read by any JavaScript code. #119261
  • DB Console cookies are now marked Secure for the browser when the cluster is running in secure mode. #119261

General changes

  • Gateways will now detect faulty or stalled replicas and use other replicas instead, which can prevent them getting stuck in certain cases (e.g., with disk stalls). This behavior can be disabled via the cluster setting kv.dist_sender.circuit_breaker.enabled. #118943

Enterprise edition changes

  • Added a new SUBJECT role option. This role option can be set to a subject distinguished name in RFC 2253 or RFC 4514 format. If set, then during client certificate authentication, certs that do not match the configured distinguished name will be rejected. #119135
  • Changefeeds support a new scheme azure-event-hub:// for Kafka data streaming to Azure event hubs. The sinkURL must include mandatory parameters shared_access_key_name and shared_access_key. By default and as required, the options tls_enabled=true, sasl_handshake=true, sasl_enabled=true, and sasl_mechanism=PLAIN are applied, as they are the only supported options. Other parameters such as topic_name and topic_prefix are also supported. An example URI is: azure-event-hub://myeventhubs.servicebus.windows.net:9093?shared_access_key_name=abc&shared_access_key=123. #115806

SQL language changes

  • Added an option for node-level sequence caching. All the sessions on the node can share the same cache, which can be concurrently accessed. The serial_normalization session variable can now be set to the value sql_sequence_cached_node. If this value is set, the cluster setting sql.defaults.serial_sequences_cache_size can be used to control the number of values to cache in a node, with a default of 256. The PER NODE CACHE sequence option (syntax is [ [ PER NODE ] CACHE # ]) is now fully implemented and will allow nodes to cache sequence numbers. A cache size of 1 means there is no cache, and cache sizes of less than 1 are not valid. #118546

Bug fixes

  • Fixed a bug that prevented the use of PL/pgSQL routines with complex variable names that require double quotes. This bug had existed since v23.2. #119034
  • Fixed a bug that could cause creation of a syntactically invalid PL/pgSQL routine to return the wrong error. This bug had existed since v23.2. #119034
  • Fixed a bug that could result in a syntax error if a PL/pgSQL routine was created with an escaped string constant in the routine body. This bug had existed since v23.2. #119034
  • Fixed a bug where running a changefeed that targets a table with a user-defined type column and with the envelope option set to any value other than wrapped would cause a node panic due to a nil dereference. #119639
  • Fixed a bug where running RESTORE on certain backups would open a very large number of connections to the backup storage provider. #119840
  • Previously, a user with the VIEWACTIVITYREDACTED privilege could see constants inside of queries that originated from other users in the SHOW SESSIONS output. This information is now properly redacted. #119820
  • Previously, the SHOW QUERIES and SHOW STATEMENTS commands incorrectly required the user to have the VIEWACTIVITY or VIEWACTIVITYREDACTED privilege. This is now fixed, as a user should always be able to view their own queries, even without this privilege. #119820

Contributors

This release includes 1939 merged PRs by 109 authors.

v24.1.0-alpha.1

Release Date: March 7, 2024

Downloads

Warning:

CockroachDB v24.1.0-alpha.1 is a testing release. Testing releases are intended for testing and experimentation only, and are not qualified for production environments and not eligible for support or uptime SLA commitments.

Note:

Experimental downloads are not qualified for production use and not eligible for support or uptime SLA commitments, whether they are for testing releases or production releases.

Full CockroachDB executable

SQL-only command-line client executable

Warning:

The CockroachDB executable for Windows is experimental and not suitable for production deployments. Windows 8 or higher is required.

Docker image

Multi-platform images include support for both Intel and ARM. Multi-platform images do not take up additional space on your Docker host.

Within the multi-platform image, both Intel and ARM images are generally available for production use.

To download the Docker image:

icon/buttons/copy
docker pull cockroachdb/cockroach-unstable:v24.1.0-alpha.1

Backward-incompatible changes

  • AS OF SYSTEM TIME queries can no longer use a timestamp followed by a question mark to signifiy a future-time value. This was an undocumented syntax. #116830

Enterprise edition changes

  • ALTER CHANGEFEED no longer removes a CDC query when modifying changefeed properties. #116498
  • changefeed.balance_range_distribution.enable is now deprecated. Instead, use the new cluster setting changefeed.default_range_distribution_strategy. changefeed.default_range_distribution_strategy='balanced_simple' has the same effect as setting changefeed.balance_range_distribution.enable=true. It does not require initial_scan='only', which was required by the old setting. #115166
  • CDC queries now correctly handle the changefeed_creation_timestamp function. #117520
  • The new WITH PRIOR REPLICATION DETAILS option can now be passed when inspecting a virtual cluster with SHOW VIRTUAL CLUSTER. This will request additional details about where the virtual cluster was replicated from and when it was activated, if that virtual cluster was created via replication. #117636
  • The new syntax ALTER VIRTUAL CLUSTER virtual-cluster START REPLICATION OF virtual-cluster ON physical-cluster can now be used to reconfigure virtual clusters previously serving as sources for physical cluster replication to become standbys to a promoted standby. This reverses the direction of replication while maximizing data reuse. #117656
  • BACKUPs now load range information that is used to avoid a spike in metadata lookups when backups begin. #116520
  • Clusters created to run physical cluster replication no longer automatically disable the spanconfig.range_coalescing.system.enabled and spanconfig.range_coalescing.application.enabled cluster settings. Users who started using physical cluster replication on v23.1 or v23.2 may wish to manually reset these settings. #119221
  • Physical cluster replication is now always enabled, and the physical_replication.enabled cluster setting has been removed. #119149

SQL language changes

  • ALTER BACKUP SCHEDULE ... EXECUTE IMMEDIATELY can now be used to set the next scheduled execution of the backup schedule to the current time. #112118
  • Fixed the SQL Activity update job to avoid conflicts on update, reduced the amount of data cached to just what the overview page requires, and fixed the correctess of the top queries. #112350
  • Previously, user-defined composite types were not populated in two pg_catalog tables: pg_class (whose row entries pertain to the type) and pg_attribute (whose row entries pertain to the "columns" of the type). This PostgreSQL-incompatible behavior is now fixed by populating the tables with user-defined composite types. In addition, the typrelid column in the pg_type table has the proper oid for composite types. #111179
  • The newly added built-in function jsonb_array_to_string_array no longer removes NULL objects. It now includes them in the resulting array. #112975
  • Changed the display for RU estimates shown in EXPLAIN ANALYZE from integer to float. This will prevent small estimates from being rounded to zero, which makes the estimate less confusing for cheap queries. #111986
  • The information_schema._pg_char_octet_length built-in function is now supported, which improves compatibility with PostgreSQL. #111401
  • The pg_encoding_max_length built-in function is now supported, which improves compatibility with PostgreSQL. #111401
  • The information_schema._pg_datetime_precision built-in function is now supported, which improves compatibility with PostgreSQL. #111401
  • The information_schema._pg_interval_type built-in function is now supported, which improves compatibility with PostgreSQL. #111401
  • information_schema.user_defined_types is now populated with information about user-defined types, and information_schema.attributes is now populated with information about the attributes of composite data types. #111401
  • The cost-based optimizer will no longer generate a constrained scan that only uses filters from a check constraint. This prevents cases where a constrained scan actually scans the entire table because the constraints aren't selective. #114332
  • Reads rolled back by savepoints are now refreshable, matching the PostgreSQL behavior and avoiding potential serializability violations. #111424
  • Implemented the postgis ST_TileEnvelope built-in function. #112971
  • Added support for a third argument in the array_position built-in function. If provided, it gives the index from which to begin searching in the array. #112161
  • Added the bit_count built-in function for BIT and BYTES types. #115273
  • Added a pg_backend_pid column to crdb_internal.node_sessions and crdb_internal.cluster_sessions. This value corresponds to the numerical ID returned from pg_backend_pid. #116673
  • Column type changes now require an explicit cast when automatic casting is not possible. This aligns with PostgreSQL's behavior. Previously, certain type conversions, such as BOOL to INT, were allowed without an explicit cast. #115442
  • Added a new session setting, optimizer_merge_joins_enabled that, when true, instructs the cost-based optimizer to explore query plans with merge joins. The setting defaults to true. #116410
  • CockroachDB now supports parsing queries like SELECT FROM t that only produce the row count and do not output any columns. #116835
  • Added the metaphone built-in function, which converts a string to its Metaphone code. #110950
  • The new EXPIRATION WINDOW option for ALTER VIRTUAL CLUSTER allows the user to override the default producer job expiration window of 24 hours. For example, ALTER VIRTUAL CLUSTER appTenant SET REPLICATION EXPIRATION WINDOW ='100ms'. The producer job expiration window determines how long the producer job stays alive without a heartbeat from the consumer job. #117776
  • The SKIP LOCKED clause is now allowed with SELECT ... FOR SHARE. #117560
  • Added configurable cluster settings for total TCP keep alive probes (server.sql_tcp_keep_alive.count) and TCP probe intervals (server.sql_tcp_keep_alive.interval) for SQL connections. Removed the COCKROACH_SQL_TCP_KEEP_ALIVE environment variable subsuming it. #115833
  • Removed the sql.trace.session_eventlog.enabled cluster setting and the associated event log tracing. The information in these traces is still available in the DEV log channel by enabling --vmodule=conn_executor=2 with cockroach start. #117928
  • The array_agg aggregate function can now support arrays as the input. Note that CockroachDB does not yet fully support nested arrays, and array_agg does not support nested arrays as inputs. #117838
  • An execution statistic that measures "client time" is now included in plan.txt files of statement diagnostics bundles. Client time tracks how long the query execution was blocked on the client receiving the PGWire protocol messages. Note that when obtained via EXPLAIN ANALYZE (DEBUG), client time does not make sense because in this variant the output rows are discarded and not communicated to the client. #117591
  • Added the trace_id column to the response of the SHOW SESSIONS command. #118002
  • Added support for the ENCODING option of COPY, as long as the encoding of 'utf8' is specified. #118010
  • Added the SHOW VARIABLES FOR ROLE command, which allows the database administrator to easily view the default values for session variables applied to a given user. #117875
  • The sql.txn.read_committed_isolation.enabled cluster setting is now true by default. This means that any syntax and settings that configure the READ COMMITTED isolation level will now cause the transaction to use that isolation level, rather than automatically upgrading the transaction to SERIALIZABLE. #118479
  • Added a new cluster setting, sql.stats.virtual_computed_columns.enabled, which when set enables collection of table statistics on VIRTUAL computed columns. #118241
  • Added the autocommit_before_ddl session variable. When set to true, any schema change statement that is sent during an explicit transaction will cause the transaction to commit before executing the schema change. #118440
  • CREATE SEQUENCE is now enabled by default in the declarative schema changer. #117793
  • PL/pgSQL now supports nested blocks, with the following limitations: variable shadowing is disallowed, and exception handlers cannot be used in a routine with nested blocks. #117710
  • The cluster setting sql.index_recommendation.drop_unused_duration is now public. #118676
  • It is now possible to hint to the cost-based optimizer that it should plan a straight join by using the syntax ... INNER STRAIGHT JOIN .... If the hint is provided, the optimizer will now fix the join order as given in the query, even if it estimates that a different plan using join reordering would have a lower cost. #116013
  • Add column goroutine_id to the response of the SHOW SESSIONS command. #118644
  • Introduced a new session setting, close_cursors_at_commit, which causes a cursor to remain open even after its calling transaction commits. Note that transaction rollback still closes any cursor created in that transaction. #117910
  • Added the server.max_open_transactions_per_gateway cluster setting. When set to a non-negative value, non-admin users cannot execute a query if the number of transactions open on the current gateway node is already at the configured limit. #118781
  • Added the setseed built-in function. It sets the seed for the random generator used by the random built-in function. #119042
  • OUT and INOUT parameter classes are now supported in user-defined functions. #118610
  • Out-of-process SQL servers will now start exporting a new sql.aggregated_livebytes metric. This metric gets updated once every 60 seconds by default, and its update interval can be configured via the tenant_global_metrics_exporter_interval cluster setting. #119140
  • Added support for index hints with INSERT and UPSERT statements. This allows INSERT ... ON CONFLICT and UPSERT queries to use index hints in the same way they are already supported for UPDATE and DELETE statements. #119104
  • Added a new ttl_disable_changefeed_replication table storage parameter that can be used to disable changefeed replication for row-level TTL on a per-table basis. #119611

Operational changes

  • The internal versions that are reported during cluster upgrades have been renamed for clarity. For example, 23.2-8 is now named 23.2-upgrading-to-24.1-step-008. #115223
  • Introduced a new cluster setting, server.jwt_authentication.jwks_auto_fetch.enabled, enabling automatic fetching of JSON Web Key Sets (JWKS) from an issuer's remote endpoint. This prevents an administrator's need to update the JWKS specified in server.jwt_authentication.jwks - whether manually or by custom script - when the identity provider's keys rotate. That direct specification of JWKS remains the default, as the new cluster setting defaults to false. #117054
  • Updated the error message logged in the case of stalled disks to use the appropriate term "disk stall", matching the term used in metrics and dashboards. This was previously "file write stall". #114746
  • Introduced the changefeed.emitted_batch_sizes histogram metric that measures the batch sizes used when emitting data to sinks. This metric supports metrics labels. #115537
  • Introduced metrics log_fluent_sink_conn_attempts, log_fluent_sink_write_attempts, and log_fluent_sink_write_errors to enable more precise tracking of connection and write operations when logging to Fluentd-compatible network collectors. #116699
  • The cluster setting sql.contention.record_serialization_conflicts.enabled is now on by default. This means any 40001 errors that are returned containing conflicting transaction information will be recorded by the contention registry. #116664
  • Removed the kv.rangefeed.scheduler.enabled cluster setting because the rangefeed scheduler is now unconditionally enabled. #114410
  • Removed the kv.rangefeed.catchup_scan_concurrency cluster setting. Catchup scans are throttled via kv.rangefeed.concurrent_catchup_iterators on a per-node basis. #114408
  • Removed the changefeed.mux_rangefeed.enabled cluster setting because the functionality is enabled by default. #114408
  • The gossip status Advanced Debug page now includes information about the server's high water timestamps for every other node it knows about in the gossip cluster. #117011
  • Removed the cockroach_rangefeed_rpc_initial_window_size environment variable. The rangefeed connection now uses the same window size as other RPC connections. #117545
  • Events for cluster setting changes are now emitted to the OPS channel rather than the DEV channel. #117923
  • The new environment variable cockroach_rpc_use_default_connection_class enables operators to switch back to the prior default behavior of sending most network/RPC workloads, except system traffic, through a single RPC/TCP connection, in case the environment does not tolerate multiple TCP connections. v24.1 defaults to using multiple connections, each dedicated to a particular types of traffic, specifically for Raft or rangefeed data. For more information, see additional release notes that reference this variable name. #117810
  • In unredacted debug zips, the crdb_internal.transaction_contention_events table file has two new columns:
    • waiting_stmt_query: the query of the waiting statement.
    • blocking_txn_queries_unordered: the unordered list of the blocking transaction's queries. #118478
  • Transaction replay protection state is now passed between the outgoing and incoming leaseholder for a range during a lease transfer. This avoids cases where lease transfers can cause transactions to throw TransactionAbortedError(ABORT_REASON_NEW_LEASE_PREVENTS_TXN) errors. #118300
  • CockroachDB will now automatically generate CPU profiles if there is an increase in CPU utilization. This can help inform investigations into possible issues. #118850
  • Expanded the --include-range-info flag to include problem ranges. This flag still defaults to true. #119205

Command-line changes

  • Debug zips no longer include redundant hex_ columns for system table BYTES columns. #112033
  • Added the --follower-read-percent flag, which determines the percent (0-100) of read operations that are follower reads, to the cockroach workload kv run command. #113094
  • The workload schemachange now writes a .otlp.ndjson.gz archive containing OTLP trace bundles for debugging purposes. #114770
  • cockroach debug tsdump creates a tsdump.yaml file. The tsdump raw format automatically creates the YAML file in the default location /tmp/tsdump.yaml. Added a new flag --yaml that allows users to specify the path to create tsdump.yaml instead of using the default location. For example, cockroach debug tsdump --host <host>:<port> \ --format raw --yaml=/some_path/tsdump.yaml > /some_path/tsdump.gob. #114046
  • Removed the cockroach connect command functionality. This was deprecated in CockroachDB v23.2. #113893
  • Changed the SQL shell help URL to point to cockroach-sql. #118960
  • Added a new encode-uri utility to make generating connection strings for use with Physical Cluster Replication easier. #119528

DB Console changes

  • Store initialization now logs progress every 10 seconds showing the current and total number of replicas initialized. #115760
  • Introduced a new Lease Preferences graph on the Replication dashboard. The Lease Preferences graph will indicate when the current leaseholder is not the first lease preference and where the current leaseholder satisfies no applied lease preference. #116709
  • Updated the Statement Details page to always show the entire selected period, instead of just the period that had data. #118680
  • Error messages displayed upon failure to load DB Console views now include information about the HTTP response status code, if one is present. #118782
  • The Full Table/Index Scans chart in the SQL Metrics dashboard now shows the non-negative derivative of the number of full scans tracked. #118787
  • The Overload dashboard now includes two additional graphs:
    • Elastic CPU Utilization: displays the CPU utilization by elastic work, compared to the limit set for elastic work.
    • Elastic CPU Exhausted Duration Per Second: displays the duration of CPU exhaustion by elastic work, in microseconds. #118763
  • The txn.restarts.writetooold metric in the Transaction Restarts graph under the SQL Dashboard now includes all restarts previously categorized as txn.restarts.writetoooldmulti. The former is a now a superset of the latter. The txn.restarts.writetoooldmulti metric will be removed in a future release. #119411

Bug fixes

  • Fixed a bug that could cause an internal error during distributed execution for an expression like CASE that requires its inputs to be the same type with all NULL inputs. #108892
  • Fixed NULL input handling for the geospatial built-ins st_pointfromgeohash and st_geomfromgeohash. #113781
  • The geospatial st_makeenvelope built-in now correctly supports xmin or ymin to be greater than xmax or ymax, respectively. #113781
  • Fixed a bug that could cause v23.1 nodes in clusters that had not finalized the v23.1 version upgrade to use excessive CPU retrying expected errors related to the incomplete upgrade state. #113864
  • Debug zip now does not fail on corrupted log files. #113722
  • Placeholder arguments can now be used in SET TRANSACTION statements. #113689
  • Previously, when the session variable use_declarative_schema_changer was set to off, ALTER PRIMARY KEY would delete any comments associated with the old primary index and old primary key constraint. This is inconsistent with the behavior of use_declarative_schema_changer=on, which is the default setting, where those comments would be carried over to the new primary index. Furthermore, the old behavior also caused a bug that could prevent command SHOW CREATE t from working. #114354
  • Previously, when the session variable was set to use_declarative_schema_changer=off and there was an attempt to ALTER PRIMARY KEY on a table that has unique secondary indexes on new primary key columns, the unique secondary index would still incorrectly have old primary key columns as its keySuffixColumn after the ALTER PRIMARY KEY. This was problematic because a subsequent dropping of the old primary key columns would unexpectedly drop those unique secondary indexes as well, even without CASCADE. #114622
  • ALTER BACKUP SCHEDULE can now be used to set updates_cluster_last_backup_time_metric without providing an explicit value, matching the behavior of the option when specified during CREATE SCHEDULE FOR BACKUP. #113523
  • Previously, if a table had secondary indexes that stored certain columns (col) using the STORING clause, followed by an ALTER PRIMARY KEY to col, an incorrect secondary index would persist. The secondary index would continue to have the STORING clause, despite the column being part of the primary key and the fact that CockroachDB does not permit secondary indexes to store any primary key columns. Now, after the ALTER PRIMARY KEY, the STORING clause is dropped on those secondary indexes. #115214
  • Fixed a bug that caused uploads to object-locked buckets to fail because of the absence of an MD5 hash. #115713
  • ALTER PRIMARY KEY now preserves the name of the original primary index when the session variable is use_declarative_schema_changer=off. #115338
  • Fixed a bug where the unique-without-index-not-valid constraint added to a table would cause the create_statement from SHOW CREATE t to not be executable and error with unique constraint cannot be NOT VALID. #115354
  • Fixed a bug where an empty full backup followed by non-empty incremental backups taken inside an application tenant might not allow a restore due to the use of an incorrect SQL codec. #116316
  • Fixed a bug in the row-level TTL job that would cause it to skip expired rows if the primary key of the table included columns of the collated STRING or DECIMAL type. #116988
  • Incorrectly labeled PL/pgSQL blocks now return an expected syntax error. #117608
  • CREATE EXTERNAL CONNECTION IF NOT EXISTS no longer returns an error if the connection already exists. #117312
  • CockroachDB now correctly uses the histograms on columns of collated STRING type. The bug has been present since before v22.1. #117714
  • Improved an interaction during range lease transfers that could cause RETRY_ASYNC_WRITE_FAILURE errors to be returned to clients. #117840
  • Backfilling tables for CREATE TABLE AS or CREATE MATERIALIZED VIEW could get into a retry loop if data was deleted and those jobs took longer than the GC TTL. #117877
  • Decommissioning replicas that are part of a mis-replicated range will no longer get stuck on a rebalance operation that was falsely determined to be unsafe. #117900
  • A memory leak within the insights system was found to occur when sql.metrics.transaction_details.enabled was disabled, while leaving sql.metrics.statement_details.enabled enabled. This patch fixes the memory leak by preventing the collection of further statement and transaction insights when sql.metrics.transaction_details.enabled is disabled. #117709
  • Fixed a rare panic that could happen during a pg_dump import that contains a function that has a subquery in one of its arguments, like SELECT addgeometrycolumn(...). Now, attempting to import a pg_dump with such a function results in an expected error. #118569
  • AUTO CREATE STATS jobs could previously lead to growth in an internal system table resulting in slower job-system related queries. #118589
  • Fixed an issue in CockroachDB where, if operating on a Linux system outside of a CPU cgroup, the system would repeatedly log the error unable to get CPU capacity at 10-second intervals. #118657
  • Fixed a bug where casts of floats to integers simply truncated the decimal portion. These casts now match the PostgreSQL behavior of rounding to the nearest integer, and in cases of a value halfway between two integers, rounding to the nearest even number. This aligns with the "round half to even" rule or "bankers' rounding", offering greater overall precision across a group of such cast operations. #117798
  • Fixed a bug where statements like ADD COLUMN j INT, ADD UNIQUE WITHOUT INDEX (j), which add new columns with unique constraints without creating associated indexes, would fail with an internal error. #118291
  • Previously, altering from a REGIONAL BY ROW table to a REGIONAL BY TABLE table could cause leaseholders to never move to the database's primary region. This is now fixed. #118001
  • Users with the VIEWACTIVITY privilege can now request statement bundles using crdb_internal.request_statement_bundle or through the DB Console SQL Activity page. #118760
  • Fixed an internal error with a message like: LeafTxn ... incompatible with locking request that occurs when performing an update under READ COMMITTED isolation which cascades to a table with multiple other foreign keys. #118722
  • Fixed a bug where ALTER PRIMARY KEY could fail with an error non-nullable column <x> with no value! Index scanned .. when validating recreated secondary indexes. #118843
  • Fixed a bug where a sequence name allocated by SERIAL that conflicted with an existing type name would cause an error. #118861
  • Fixed a bug where COMMENT ON statements could fail with an "unexpected value" error if multiple COMMENT statements were running concurrently. #119007
  • Previously, in certain cases, using virtual tables such as crdb_internal.system_jobs could result in the internal error attempting to append refresh spans after the tracked timestamp has moved forward. This is now fixed. The bug was introduced in CockroachDB v23.1. #119176
  • Fixed a bug where operations on the crdb_internal.leases table could cause a node to become unavailable due to a deadlock in the leasing subsystem. #119305
  • If an individual replica's circuit breaker had tripped but the range was otherwise functional, for example, because the replica was partially partitioned away from the leaseholder, it was possible for a gateway to persistently error when contacting this replica instead of retrying against a functional leaseholder elsewhere. The gateway will now retry such errors against other replicas once. #118737
  • Fixed a bug in changefeed webhook sinks where the HTTP request body may not be initialized on retries, resulting in the error http: ContentLength=... with Body length 0. #119326
  • Fixed a bug where rangefeed resolved timestamps could get stuck, continually emitting the log message pushing old intents failed: range barrier failed, range split, typically following a range merge. #119512
  • Fixed a condition where some files were not closed when inspecting backup metadata during BACKUP and RESTORE. Epic: none. #119625
  • Fixed a bug where some backup metadata files opened during RESTORE were not closed. #119625
  • Fixed a bug that caused internal errors when executing an EXPORT statement where the query involved sorting by columns not explicitly included in the output, due to hidden columns in the input expression. #119538
  • Fixed a bug where a warning about the need to refresh data would remain displayed on the Active Executions view of the Statements and Transactions pages despite enabling Auto Refresh. #118675

Performance improvements

  • Follower reads for multi-region tables now default to prioritizing replicas in the same locality, when available, with node latency as a tie breaker. Previously, latency was the primary criteria. This can improve the performance and predictability of follower reads. #112993
  • During node startup, stores are now loaded in parallel by default, reducing start times for nodes with many stores. #115285
  • Improved the efficiency and performance of encryption at rest. #115454
  • Rangefeeds, the infrastructure used for changefeeds, now use a more efficient engine that reduces the number of goroutines and the associated Go scheduler pressure and latency. #114410
  • Rangefeeds, the infrastructure used for changefeeds, now use a more efficient multiplexing protocol. #114408
  • The cost-based optimizer now generates constrained scans on indexes containing boolean, computed expressions. #114798
  • A separate RPC connection class is now used for most Raft traffic. This improves isolation and reduces interference with foreground SQL traffic, which reduces chances of head-of-line blocking caused by unrelated traffic under high-load conditions. The new COCKROACH_RAFT_USE_DEFAULT_CONNECTION_CLASS environment variable can be set to use the default connection class instead (the previous behavior). #117385
  • Rangefeed traffic (typically for changefeeds) is now separated into its own RPC connection class. This improves isolation and reduces interference with the foreground SQL traffic, which reduces chances of head-of-line blocking caused by unrelated traffic. The new COCKROACH_RANGEFEED_USE_DEFAULT_CONNECTION_CLASS environment variable can be set to use the default connection class, the previous default choice for rangefeeds. #117730
  • The initial scan traffic for changefeeds, which can be significant, now uses a different RPC/TCP connection than the foreground SQL/KV traffic. This reduces interference between workloads, and reduces chances of head-of-line blocking issues. #117810
  • kafka_sink_config now supports specifying different client IDs for each changefeed, enabling users to define distinct Kafka quota configurations for each. For example, CREATE CHANGEFEED FOR ... WITH kafka_sink_config='{"ClientID": "clientID1"}' #118643
  • Added the changefeed.kafka_throttling_hist_nanos metric, enhancing visibility into throttling times when CockroachDB operations exceed Kafka's quota limits. #117693
  • The cost-based optimizer now generates more efficient query plans for queries with comparisons of timestamp and interval columns, for example, timestamp_col - '1 day'::INTERVAL > now(). #118307
  • Statements from internal executors (use of SQL queries by the cluster itself) now correctly display when filtering by application name $ internal on the Statements page in SQL Activity. Such statements are hidden when $ internal is not specified. #114498

Contributors

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

  • Andrew Delph (first-time contributor)
  • ChanYe East (first-time contributor)
  • Charles (first-time contributor)
  • Eric.Yang
  • Harshit Vishwakarma (first-time contributor)
  • HighPon
  • Jasmine Sun (first-time contributor)
  • Joshua Hildred (first-time contributor)
  • Kevin Mingtarja (first-time contributor)
  • Luis Pessoa (first-time contributor)
  • Nikolai Vladimirov (first-time contributor)
  • chavacava (first-time contributor)
  • craig
  • cty123
  • da-ket (first-time contributor)
  • lyang24 (first-time contributor)
  • zach.graves (first-time contributor)
  • zyf123123 (first-time contributor)

Yes No
On this page

Yes No