> ## Documentation Index
> Fetch the complete documentation index at: https://cockroachlabs.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# What's New in v24.2

export const InternalLink = ({version, path = "", children, ...props}) => {
  let detectedVersion = version || "stable";
  if (typeof window !== 'undefined' && !version) {
    const match = window.location.pathname.match(/\/docs\/([^/]+)/);
    if (match) {
      detectedVersion = match[1];
    }
  }
  const normalizedPath = path.startsWith("/") ? path.slice(1) : path;
  return <a href={`/docs/${detectedVersion}/${normalizedPath}`} {...props}>
      {children}
    </a>;
};

export const MarketoEmailForm = ({successMessage = "Thanks!"}) => {
  useEffect(() => {
    function initializeReleaseNotesSignup() {
      if (window.__cockroachReleaseNotesSignupInitialized) {
        if (window.__cockroachReleaseNotesRefresh) {
          window.__cockroachReleaseNotesRefresh();
        }
        return;
      }
      window.__cockroachReleaseNotesSignupInitialized = true;
      const MARKETO_BASE_URL = "https://go.cockroachlabs.com";
      const MARKETO_MUNCHKIN_ID = "350-QIN-827";
      const MARKETO_FORMS_SCRIPT = "https://go.cockroachlabs.com/js/forms2/js/forms2.min.js";
      const RELEASE_NOTES_FORM_ID = 1083;
      const EMAIL_ERROR = "Enter a valid email address.";
      const FORM_LOAD_ERROR = "Unable to load the release notes form. Disable content blockers and try again.";
      const LOCALHOST_ERROR = "Marketo rejects submissions from localhost. Test this form on a deployed preview URL.";
      const SUCCESS_MESSAGE = "Thanks!";
      const WIDGET_SELECTOR = "[data-release-notes-signup]";
      const FORM_MOUNT_ID = "cockroachReleaseNotesFormMount";
      const SUBMIT_FRAME_NAME = "cockroachReleaseNotesSubmitFrame";
      const widgetState = new WeakMap();
      let marketoScriptPromise;
      let marketoFormPromise;
      let activeWidget = null;
      function toSecureMarketoUrl(url) {
        if (typeof url !== "string") {
          return url;
        }
        return url.replace("http://go.cockroachlabs.com", "https://go.cockroachlabs.com");
      }
      function patchMarketoFrameTransport() {
        if (window.__cockroachReleaseNotesFrameTransportPatched || typeof HTMLIFrameElement === "undefined") {
          return;
        }
        const iframeProto = HTMLIFrameElement.prototype;
        const originalSetAttribute = iframeProto.setAttribute;
        iframeProto.setAttribute = function (name, value) {
          if (name === "src") {
            value = toSecureMarketoUrl(value);
          }
          return originalSetAttribute.call(this, name, value);
        };
        const srcDescriptor = Object.getOwnPropertyDescriptor(iframeProto, "src");
        if (srcDescriptor && typeof srcDescriptor.get === "function" && typeof srcDescriptor.set === "function") {
          try {
            Object.defineProperty(iframeProto, "src", {
              configurable: true,
              enumerable: srcDescriptor.enumerable,
              get: function () {
                return srcDescriptor.get.call(this);
              },
              set: function (value) {
                srcDescriptor.set.call(this, toSecureMarketoUrl(value));
              }
            });
          } catch (error) {}
        }
        window.__cockroachReleaseNotesFrameTransportPatched = true;
      }
      function getState(widget) {
        let state = widgetState.get(widget);
        if (!state) {
          state = {
            error: "",
            isSubmitted: false,
            isSubmitting: false,
            successMessage: widget.getAttribute("data-success-message") || SUCCESS_MESSAGE,
            submitTimeoutId: null
          };
          widgetState.set(widget, state);
        }
        return state;
      }
      function getElements(widget) {
        return {
          emailInput: widget.querySelector("[data-release-notes-email]"),
          error: widget.querySelector("[data-release-notes-error]"),
          errorText: widget.querySelector("[data-release-notes-error-text]"),
          submitButton: widget.querySelector("[data-release-notes-submit]"),
          success: widget.querySelector("[data-release-notes-success]"),
          successText: widget.querySelector("[data-release-notes-success-text]")
        };
      }
      function ensureFormMount() {
        let mount = document.getElementById(FORM_MOUNT_ID);
        if (mount) {
          return mount;
        }
        mount = document.createElement("div");
        mount.id = FORM_MOUNT_ID;
        mount.setAttribute("aria-hidden", "true");
        mount.style.display = "none";
        document.body.appendChild(mount);
        return mount;
      }
      function getDomForm(form) {
        const formElement = typeof form.getFormElem === "function" ? form.getFormElem() : null;
        return formElement && formElement[0] ? formElement[0] : formElement;
      }
      function mountMarketoForm(form) {
        const domForm = getDomForm(form);
        if (!domForm || domForm.isConnected) {
          return domForm;
        }
        ensureFormMount().appendChild(domForm);
        return domForm;
      }
      function applyFormValues(form, values) {
        if (typeof form.setValues === "function") {
          form.setValues(values);
          return;
        }
        if (typeof form.vals === "function") {
          form.vals(values);
        }
      }
      function ensureSubmitFrame() {
        let frame = document.querySelector('iframe[name="' + SUBMIT_FRAME_NAME + '"]');
        if (frame) {
          return frame;
        }
        frame = document.createElement("iframe");
        frame.name = SUBMIT_FRAME_NAME;
        frame.setAttribute("aria-hidden", "true");
        frame.tabIndex = -1;
        frame.style.display = "none";
        document.body.appendChild(frame);
        return frame;
      }
      function clearSubmitTimeout(widget) {
        const state = getState(widget);
        if (state.submitTimeoutId) {
          window.clearTimeout(state.submitTimeoutId);
          state.submitTimeoutId = null;
        }
      }
      function forceSecureMarketoFrame() {
        const frame = document.querySelector("#MktoForms2XDIframe");
        if (!frame) {
          return;
        }
        const currentSrc = frame.getAttribute("src") || frame.src;
        if (!currentSrc) {
          return;
        }
        const secureSrc = toSecureMarketoUrl(currentSrc);
        if (secureSrc !== currentSrc) {
          frame.setAttribute("src", secureSrc);
        }
      }
      function ensureSecureMarketoFrame() {
        patchMarketoFrameTransport();
        forceSecureMarketoFrame();
        if (window.__cockroachReleaseNotesFrameObserverInitialized || typeof MutationObserver === "undefined") {
          return;
        }
        const observer = new MutationObserver(function () {
          forceSecureMarketoFrame();
        });
        observer.observe(document.documentElement, {
          childList: true,
          subtree: true,
          attributes: true,
          attributeFilter: ["src"]
        });
        window.__cockroachReleaseNotesFrameObserverInitialized = true;
        window.__cockroachReleaseNotesFrameObserver = observer;
      }
      function render(widget) {
        if (!widget || !document.contains(widget)) {
          return;
        }
        const state = getState(widget);
        const elements = getElements(widget);
        if (elements.submitButton) {
          elements.submitButton.disabled = state.isSubmitting;
        }
        if (elements.emailInput) {
          elements.emailInput.setAttribute("aria-invalid", state.error ? "true" : "false");
        }
        if (elements.error) {
          elements.error.hidden = !state.error;
          elements.error.style.display = state.error ? "block" : "none";
        }
        if (elements.errorText) {
          elements.errorText.textContent = state.error;
        }
        if (elements.success) {
          elements.success.hidden = !state.isSubmitted;
          elements.success.style.display = state.isSubmitted ? "block" : "none";
        }
        if (elements.successText) {
          elements.successText.textContent = state.successMessage || SUCCESS_MESSAGE;
        }
      }
      function hideMarketoForm(form) {
        const formElement = form && typeof form.getFormElem === "function" ? form.getFormElem() : null;
        if (!formElement) {
          return;
        }
        if (typeof formElement.hide === "function") {
          formElement.hide();
          return;
        }
        if (formElement[0] && formElement[0].style) {
          formElement[0].style.display = "none";
          return;
        }
        if (formElement.style) {
          formElement.style.display = "none";
        }
      }
      function isValidEmail(value) {
        return (/^[^\s@]+@[^\s@]+\.[^\s@]+$/).test(value);
      }
      function isFormLoadError(error) {
        return Boolean(error && typeof error === "object" && (error.code === "marketo_load_failed" || error.code === "marketo_not_available" || error.code === "marketo_form_init_failed"));
      }
      function isLocalhost() {
        return window.location.hostname === "localhost" || window.location.hostname === "127.0.0.1";
      }
      function loadMarketoForms() {
        ensureSecureMarketoFrame();
        if (window.MktoForms2) {
          return Promise.resolve(window.MktoForms2);
        }
        if (!marketoScriptPromise) {
          marketoScriptPromise = new Promise(function (resolve, reject) {
            function finalizeLoad() {
              if (window.MktoForms2) {
                forceSecureMarketoFrame();
                resolve(window.MktoForms2);
                return;
              }
              marketoScriptPromise = null;
              const error = new Error("MktoForms2 did not load.");
              error.code = "marketo_not_available";
              reject(error);
            }
            function handleError() {
              marketoScriptPromise = null;
              const error = new Error("Failed to load Marketo forms.");
              error.code = "marketo_load_failed";
              reject(error);
            }
            const existingScript = document.querySelector('script[src="' + MARKETO_FORMS_SCRIPT + '"]');
            if (existingScript) {
              existingScript.addEventListener("load", finalizeLoad, {
                once: true
              });
              existingScript.addEventListener("error", handleError, {
                once: true
              });
              return;
            }
            const script = document.createElement("script");
            script.src = MARKETO_FORMS_SCRIPT;
            script.async = true;
            script.addEventListener("load", finalizeLoad, {
              once: true
            });
            script.addEventListener("error", handleError, {
              once: true
            });
            document.body.appendChild(script);
          });
        }
        return marketoScriptPromise;
      }
      function attachFormCallbacks(form) {
        if (form.__releaseNotesCallbacksAttached) {
          return;
        }
        form.__releaseNotesCallbacksAttached = true;
        form.onSuccess(function () {
          if (!activeWidget || !document.contains(activeWidget)) {
            return false;
          }
          const state = getState(activeWidget);
          clearSubmitTimeout(activeWidget);
          state.isSubmitting = false;
          state.isSubmitted = true;
          state.error = "";
          state.successMessage = activeWidget.getAttribute("data-success-message") || SUCCESS_MESSAGE;
          render(activeWidget);
          return false;
        });
        form.onValidate(function (isValid) {
          if (isValid || !activeWidget || !document.contains(activeWidget)) {
            return;
          }
          const state = getState(activeWidget);
          clearSubmitTimeout(activeWidget);
          state.isSubmitting = false;
          state.error = EMAIL_ERROR;
          render(activeWidget);
        });
      }
      function ensureForm() {
        if (!marketoFormPromise) {
          marketoFormPromise = loadMarketoForms().then(function (MktoForms2) {
            const existingForm = typeof MktoForms2.getForm === "function" ? MktoForms2.getForm(RELEASE_NOTES_FORM_ID) : null;
            if (existingForm) {
              forceSecureMarketoFrame();
              mountMarketoForm(existingForm);
              hideMarketoForm(existingForm);
              attachFormCallbacks(existingForm);
              ensureSubmitFrame();
              return existingForm;
            }
            return new Promise(function (resolve, reject) {
              MktoForms2.loadForm(MARKETO_BASE_URL, MARKETO_MUNCHKIN_ID, RELEASE_NOTES_FORM_ID, function (form) {
                if (!form) {
                  const error = new Error("Marketo form failed to initialize.");
                  error.code = "marketo_form_init_failed";
                  reject(error);
                  return;
                }
                forceSecureMarketoFrame();
                mountMarketoForm(form);
                hideMarketoForm(form);
                attachFormCallbacks(form);
                ensureSubmitFrame();
                resolve(form);
              });
            });
          }).catch(function (error) {
            marketoFormPromise = null;
            throw error;
          });
        }
        return marketoFormPromise;
      }
      function handleEmailInput(target) {
        const widget = target.closest(WIDGET_SELECTOR);
        if (!widget) {
          return;
        }
        const state = getState(widget);
        if (!state.error) {
          return;
        }
        state.error = "";
        render(widget);
      }
      function handleSubmit(button) {
        const widget = button.closest(WIDGET_SELECTOR);
        if (!widget) {
          return;
        }
        const state = getState(widget);
        const elements = getElements(widget);
        if (!elements.emailInput) {
          return;
        }
        const email = elements.emailInput.value.trim();
        if (!email) {
          state.error = EMAIL_ERROR;
          render(widget);
          return;
        }
        state.error = "";
        state.isSubmitted = false;
        state.isSubmitting = true;
        state.successMessage = widget.getAttribute("data-success-message") || SUCCESS_MESSAGE;
        render(widget);
        if (!isValidEmail(email)) {
          state.isSubmitting = false;
          state.error = EMAIL_ERROR;
          render(widget);
          return;
        }
        if (isLocalhost()) {
          state.isSubmitting = false;
          state.error = LOCALHOST_ERROR;
          render(widget);
          return;
        }
        activeWidget = widget;
        ensureForm().then(function (form) {
          const formValues = {
            Email: email,
            Send_me_product_and_feature_updates__c: "TRUE",
            subscriptionProductUpdates: "TRUE",
            optin: "TRUE"
          };
          applyFormValues(form, formValues);
          if (typeof form.validate === "function" && !form.validate()) {
            state.isSubmitting = false;
            state.error = EMAIL_ERROR;
            render(widget);
            return;
          }
          clearSubmitTimeout(widget);
          state.submitTimeoutId = window.setTimeout(function () {
            state.isSubmitting = false;
            state.error = EMAIL_ERROR;
            render(widget);
          }, 10000);
          if (typeof form.submit !== "function") {
            throw new Error("marketo_submit_missing");
          }
          form.submit();
        }).catch(function (error) {
          clearSubmitTimeout(widget);
          state.isSubmitting = false;
          state.error = isFormLoadError(error) ? FORM_LOAD_ERROR : EMAIL_ERROR;
          render(widget);
        });
      }
      document.addEventListener("click", function (event) {
        const submitButton = event.target.closest("[data-release-notes-submit]");
        if (!submitButton) {
          return;
        }
        event.preventDefault();
        handleSubmit(submitButton);
      });
      document.addEventListener("input", function (event) {
        if (!(event.target instanceof HTMLInputElement) || !event.target.matches("[data-release-notes-email]")) {
          return;
        }
        handleEmailInput(event.target);
      });
      window.__cockroachReleaseNotesRefresh = function () {
        ensureSecureMarketoFrame();
        const widgets = document.querySelectorAll(WIDGET_SELECTOR);
        widgets.forEach(render);
        if (widgets.length > 0) {
          ensureForm().catch(function () {});
        }
      };
      window.__cockroachReleaseNotesRefresh();
    }
    initializeReleaseNotesSignup();
  }, []);
  return <div data-release-notes-signup data-success-message={successMessage} className="not-prose my-4 max-w-xl">
      <div className="flex flex-col gap-3 sm:flex-row sm:items-start">
        <input data-release-notes-email type="email" inputMode="email" autoComplete="email" placeholder="Email*" aria-label="Email" className="min-w-0 flex-1 rounded-2xl border border-gray-300 bg-white px-4 py-3 text-sm text-gray-900 shadow-sm outline-none transition focus:border-primary dark:border-gray-700 dark:bg-gray-950 dark:text-white" />
        <button data-release-notes-submit type="button" className="inline-flex items-center justify-center rounded-2xl bg-primary px-5 py-3 text-sm font-semibold text-white transition hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-70">
          Submit
        </button>
      </div>

      <div data-release-notes-error hidden className="mt-3 rounded-2xl border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-700 dark:border-red-900/50 dark:bg-red-950/40 dark:text-red-300">
        <span data-release-notes-error-text />
      </div>

      <div data-release-notes-success hidden className="mt-3 rounded-2xl border border-green-200 bg-green-50 px-4 py-3 text-sm font-medium text-green-800 dark:border-green-900/50 dark:bg-green-950/40 dark:text-green-200">
        <span data-release-notes-success-text>{successMessage}</span>
      </div>
    </div>;
};

export const InlineImage = ({src, alt = "", height = "1.6em"}) => {
  return <img noZoom src={src} alt={alt} style={{
    display: "inline",
    verticalAlign: "start",
    height: height,
    margin: "0"
  }} />;
};

export const SearchLink = ({term, children}) => {
  const handleClick = e => {
    e.preventDefault();
    const searchButton = document.querySelector("button#search-bar-entry");
    if (!searchButton) return;
    searchButton.click();
    requestAnimationFrame(() => {
      const input = document.querySelector("input#search-input");
      if (!input) return;
      const nativeInputValueSetter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, "value")?.set;
      nativeInputValueSetter?.call(input, term);
      input.dispatchEvent(new Event("input", {
        bubbles: true
      }));
      input.dispatchEvent(new KeyboardEvent("keydown", {
        key: "Enter",
        bubbles: true
      }));
    });
  };
  return <a href="#" onClick={handleClick}>
      {children}
    </a>;
};

CockroachDB v24.2 is an optional <InternalLink version="releases" path="index#major-versions">Innovation release</InternalLink>. This version can be skipped for CockroachDB Advanced and self-hosted clusters. It is unavailable for CockroachDB Standard and CockroachDB Basic clusters.

* For a summary of the most significant changes in v24.2, refer to [Feature highlights](#feature-highlights).
* Before <InternalLink version="v24.2" path="upgrade-cockroach-version">upgrading to CockroachDB v24.2</InternalLink>, review the [backward-incompatible changes](#v24-2-0-backward-incompatible-changes), including [key cluster setting changes](#v24-2-0-cluster-settings) and [deprecations](#v24-2-0-deprecations); as well as newly identified [known limtiations](#v24-2-0-known-limitations).
* For details about the support window for this release type, review the <InternalLink path="release-support-policy">Release Support Policy</InternalLink>.
* For details about all supported releases, the release schedule, and licenses, refer to <InternalLink path="index">CockroachDB Releases Overview</InternalLink>.
* After downloading a supported CockroachDB binary, learn how to <InternalLink version="stable" path="install-cockroachdb">install CockroachDB</InternalLink> or <InternalLink version="stable" path="upgrade-cockroach-version">upgrade your cluster</InternalLink>.

Get future release notes emailed to you:

<MarketoEmailForm />

## v24.2.10

Release Date: February 6, 2025

### Downloads

<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.
</Note>

<table><thead><tr><th>Operating System</th><th>Architecture</th><th>Full executable</th><th>SQL-only executable</th></tr></thead><tbody><tr><td rowspan="2">Linux</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.10.linux-amd64.tgz">cockroach-v24.2.10.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.10.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.10.linux-amd64.tgz">cockroach-sql-v24.2.10.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.10.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.10.linux-arm64.tgz">cockroach-v24.2.10.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.10.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.10.linux-arm64.tgz">cockroach-sql-v24.2.10.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.10.linux-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td rowspan="2">Mac<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.10.darwin-10.9-amd64.tgz">cockroach-v24.2.10.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.10.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.10.darwin-10.9-amd64.tgz">cockroach-sql-v24.2.10.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.10.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.10.darwin-11.0-arm64.tgz">cockroach-v24.2.10.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.10.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.10.darwin-11.0-arm64.tgz">cockroach-sql-v24.2.10.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.10.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>Windows<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.10.windows-6.2-amd64.zip">cockroach-v24.2.10.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.10.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.10.windows-6.2-amd64.zip">cockroach-sql-v24.2.10.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.10.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td></tr></tbody></table>

### Docker image

[Multi-platform images](https://docs.docker.com/build/building/multi-platform) 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:

```shell theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
docker pull cockroachdb/cockroach:v24.2.10
```

### General changes

* The protected timestamp (PTS) records of running changefeeds are now updated when the set of targets changes, such as when system tables are added to the protected tables list.

### SQL language changes

* The `legacy_varchar_typing` session setting has been added, which reverts the changes of that cause the change in typing behavior described in. Specifically, it makes type-checking and overload resolution ignore the newly added "unpreferred" overloads. This setting defaults to `on`.
* Since v23.2 table statistics histograms had been collected for non-indexed JSON columns. Histograms are no longer collected for these columns if the `sql.stats.non_indexed_json_histograms.enabled` cluster setting is set to `false`. This reduces memory usage during table statistics collection, for both automatic and manual collection via `ANALYZE` and `CREATE STATISTICS`.
* Added support for a new index hint, `AVOID_FULL_SCAN`, which will prevent the optimizer from planning a full scan for the specified table if any other plan is possible. The hint can be used in the same way as other existing index hints. For example, `SELECT * FROM table_name@{AVOID_FULL_SCAN};`. This hint is similar to `NO_FULL_SCAN`, but will not error if a full scan cannot be avoided. Note that normally a full scan of a partial index would not be considered a "full scan" for the purposes of the `NO_FULL_SCAN` and `AVOID_FULL_SCAN` hints, but if the user has explicitly forced the partial index via `FORCE_INDEX=index_name`, CockroachDB does consider it a full scan.
* Added the `optimizer_prefer_bounded_cardinality` session setting, which instructs the optimizer to prefer query plans where every expression has a guaranteed upper-bound on the number of rows it will process. This may help the optimizer produce better query plans in some cases. This setting is disabled by default.
* Added the `optimizer_min_row_count` session setting, which sets a lower bound on row count estimates for relational expressions during query planning. A value of `0`, which is the default, indicates no lower bound. Note that if this is set to a value greater than `0`, a row count of zero can still be estimated for expressions with a cardinality of zero, e.g., for a contradictory filter. Setting this to a value higher than `0`, such as `1`, may yield better query plans in some cases, such as when statistics are frequently stale and inaccurate.

### Operational changes

* Schema object identifiers (e.g., database names, schema names, table names, function names, and type names) are no longer redacted when logging statements in the `EXEC` or `SQL_SCHEMA` log channels. If redaction of these names is required, then the new cluster setting `sql.log.redact_names.enabled` can be set to `true`. The default value of the setting is `false`.
* Added a metric, `sql.schema_changer.object_count`, that keeps track of the count of schema objects in the cluster.
* The `changefeed.max_behind_nanos` metric now supports scoping with metrics labels.

### Bug fixes

* `CLOSE CURSOR` statements are now allowed in read-only transactions, similar to PostgreSQL. This bug had been present since at least v23.1.
* `ALTER BACKUP SCHEDULE` no longer fails on schedules whose collection URI contains a space.
* Previously, `SHOW CREATE TABLE` was showing incorrect data with regard to inverted indexes. It now shows the correct data in a format that can be repeatedly entered back into CockroachDB to recreate the same table.
* Fixed a timing issue between `ALTER VIEW.. RENAME` and `DROP VIEW` that caused repeated failures in the `DROP VIEW` job.
* Fixed a bug where querying the `pg_catalog.pg_constraint` table while the schema changer was dropping a constraint could result in a query error.
* Queries that perform a cast from the string representation of an array containing `GEOMETRY` or `GEOGRAPHY` types to a SQL `ARRAY` type will now succeed.
* Fixed a bug where secondary tenants could fatal when issuing HTTP requests during tenant startup.
* Fixed a bug where CockroachDB could encounter an internal error `comparison of two different versions of enum` in some cases when a user-defined type was modified within a transaction and subsequent statements read the column of that user-defined type. The bug was introduced in v24.2.
* When the session variable `allow_role_memberships_to_change_during_transaction` is set, it is now possible to create and drop users quickly even when there are contending transactions on the `system.users` and `system.role_options` system tables.
* Fixed a bug where the error `batch timestamp... must be after replica GC threshold` could occur during a schema change backfill operation, and cause the schema change job to retry infinitely. Now this error is treated as permanent, and will cause the job to enter the `failed` state.

## v24.2.9

Release Date: January 31, 2025

### Downloads

<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.
</Note>

<table><thead><tr><th>Operating System</th><th>Architecture</th><th>Full executable</th><th>SQL-only executable</th></tr></thead><tbody><tr><td rowspan="2">Linux</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.9.linux-amd64.tgz">cockroach-v24.2.9.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.9.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.9.linux-amd64.tgz">cockroach-sql-v24.2.9.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.9.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.9.linux-arm64.tgz">cockroach-v24.2.9.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.9.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.9.linux-arm64.tgz">cockroach-sql-v24.2.9.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.9.linux-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td rowspan="2">Mac<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.9.darwin-10.9-amd64.tgz">cockroach-v24.2.9.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.9.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.9.darwin-10.9-amd64.tgz">cockroach-sql-v24.2.9.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.9.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.9.darwin-11.0-arm64.tgz">cockroach-v24.2.9.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.9.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.9.darwin-11.0-arm64.tgz">cockroach-sql-v24.2.9.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.9.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>Windows<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.9.windows-6.2-amd64.zip">cockroach-v24.2.9.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.9.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.9.windows-6.2-amd64.zip">cockroach-sql-v24.2.9.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.9.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td></tr></tbody></table>

### Docker image

[Multi-platform images](https://docs.docker.com/build/building/multi-platform) 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:

```shell theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
docker pull cockroachdb/cockroach:v24.2.9
```

### Bug fixes

* Fixed a bug that could cause `SHOW TABLES` and other introspection operations to encounter a `"batch timestamp... must be after replica GC threshold"` error.

## v24.2.8

Release Date: January 9, 2025

### Downloads

<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.
</Note>

<table><thead><tr><th>Operating System</th><th>Architecture</th><th>Full executable</th><th>SQL-only executable</th></tr></thead><tbody><tr><td rowspan="2">Linux</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.8.linux-amd64.tgz">cockroach-v24.2.8.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.8.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.8.linux-amd64.tgz">cockroach-sql-v24.2.8.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.8.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.8.linux-arm64.tgz">cockroach-v24.2.8.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.8.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.8.linux-arm64.tgz">cockroach-sql-v24.2.8.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.8.linux-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td rowspan="2">Mac<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.8.darwin-10.9-amd64.tgz">cockroach-v24.2.8.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.8.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.8.darwin-10.9-amd64.tgz">cockroach-sql-v24.2.8.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.8.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.8.darwin-11.0-arm64.tgz">cockroach-v24.2.8.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.8.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.8.darwin-11.0-arm64.tgz">cockroach-sql-v24.2.8.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.8.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>Windows<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.8.windows-6.2-amd64.zip">cockroach-v24.2.8.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.8.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.8.windows-6.2-amd64.zip">cockroach-sql-v24.2.8.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.8.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td></tr></tbody></table>

### Docker image

[Multi-platform images](https://docs.docker.com/build/building/multi-platform) 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:

```shell theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
docker pull cockroachdb/cockroach:v24.2.8
```

### General changes

* To improve the granularity of changefeed pipeline metrics, the changefeed metrics `changefeed.admit_latency` and `changefeed.commit_latency` have histogram buckets from `5ms` to `60m` (previously `500ms` to `5m` ). The following changefeed metrics have histogram buckets from `5ms` to `10m` (previously `500ms` to `5m` ):
  * `changefeed.parallel_io_queue_nanos`
  * `changefeed.parallel_io_result_queue_nanos`
  * `changefeed.sink_batch_hist_nanos`
  * `changefeed.flush_hist_nanos`
  * `changefeed.kafka_throttling_hist_nanos`
* Added support for multiple seed brokers in the new Kafka sink.
* Added a new metric ( `distsender.rangefeed.catchup_ranges_waiting_client_side` ) that counts how many rangefeeds are waiting on the client-side limiter to start performing catchup scans.
* Added changefeed support for the `mvcc_timestamp` option with the `avro` format. If both options are specified, the Avro schema includes an `mvcc_timestamp` metadata field and emits the row's MVCC timestamp with the row data.
* Added a no-op `AWS_USE_PATH_STYLE` parameter for forward compatibility with v24.3.

### SQL language changes

* Added the `legacy_varchar_typing` session setting, which reverts the changes of that causes the change in typing behavior described in. Specifically, it makes type-checking and overload resolution ignore the newly added "unpreferred" overloads. This setting defaults to `on`.

### Operational changes

* Removed the `sql.auth.resolve_membership_single_scan.enabled` cluster setting. This was added out of precaution in case it was necessary to revert back to the old behavior for looking up role memberships, but this escape hatch has never been needed in practice since this was added in v23.1.
* Telemetry delivery is now considered successful even in cases where we experience a network timeout. This will prevent throttling in cases outside an operator's control.
* When a schema change job is completed, rolls back, or encounters a failure, the time taken since the job began is now logged in a structured log in the `SQL_SCHEMA` log channel.
* Added a new configurable parameter `kv.transaction.max_intents_and_locks` that will prevent transactions from creating too many intents.
* Added the metric `txn.count_limit_rejected`, which tracks the KV transactions that have been aborted because they exceeded the max number of writes and locking reads allowed.
* Added the metric `txn.count_limit_on_response`, which tracks the number of KV transactions that have exceeded the count limit on a response.

### Bug fixes

* `ALTER COLUMN SET NOT NULL` was not enforced consistently when the table was created in the same transaction.
* Fixed a bug where `CREATE RELATION / TYPE` could leave dangling namespace entries if the schema was concurrently being dropped.
* The `idle_in_session_timeout` setting now excludes the time spent waiting for schema changer jobs to complete, preventing unintended session termination during schema change operations.
* Fixed a bug that causes the optimizer to use stale table statistics after altering an `ENUM` type used in the table.
* Table statistics collection in CockroachDB could previously run into `no bytes in account to release` errors in some edge cases (when the SQL memory budget, configured via `--max-sql-memory` flag, was close to being exhausted). The bug has been present since v21.2 and is now fixed.
* CockroachDB now better respects the `statement_timeout` limit on queries involving the top K sort and merge join operations.
* Fixed an issue where license enforcement was not consistently disabled for single-node clusters started with `cockroach start-single-node`. The fix ensures proper behavior on cluster restarts.
* Fixed a bug that caused queries against tables with user-defined types to sometimes fail with errors after restoring those tables.
* Fixed a bug that caused an incorrect filesystem to be logged as part of the store information.
* Fixed a bug that has existed since v24.1 that would cause a set-returning UDF with `OUT` parameters to return a single row.
* Fixed a bug that could cause an internal error if a table with an implicit ( `rowid` ) primary key was locked from within a subquery, like: `SELECT * FROM (SELECT * FROM foo WHERE x = 2) FOR UPDATE;`. The error could occur either under read-committed isolation, or with `optimizer_use_lock_op_for_serializable` enabled.
* Fixed an issue where adding an existing column with the `IF NOT EXISTS` option could exit too early, skipping necessary handling of the abstract syntax tree (AST). This could lead to failure of the `ALTER` statement.
* Fixed a bug related to displaying the names of composite types in the `SHOW CREATE TABLES` command. The names are now shown as two-part names, which disambiguates the output and makes it more portable to other databases.
* Fixed an issue where a schema change could incorrectly cause a changefeed to fail with an assertion error like `received boundary timestamp... of type... before reaching existing boundary of type...`.
* Internal scans are now exempt from the `sql.defaults.disallow_full_table_scans.enabled` setting, allowing index creation even when the cluster setting is active.

### Performance improvements

* Improved the internal caching logic for role membership information. This reduces the latency impact of commands such as `DROP ROLE`, `CREATE ROLE`, and `GRANT role TO user`, which cause the role membership cache to be invalidated.

## v24.2.7

Release Date: December 26, 2024

### Downloads

<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.
</Note>

<table><thead><tr><th>Operating System</th><th>Architecture</th><th>Full executable</th><th>SQL-only executable</th></tr></thead><tbody><tr><td rowspan="2">Linux</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.7.linux-amd64.tgz">cockroach-v24.2.7.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.7.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.7.linux-amd64.tgz">cockroach-sql-v24.2.7.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.7.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.7.linux-arm64.tgz">cockroach-v24.2.7.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.7.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.7.linux-arm64.tgz">cockroach-sql-v24.2.7.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.7.linux-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td rowspan="2">Mac<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.7.darwin-10.9-amd64.tgz">cockroach-v24.2.7.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.7.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.7.darwin-10.9-amd64.tgz">cockroach-sql-v24.2.7.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.7.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.7.darwin-11.0-arm64.tgz">cockroach-v24.2.7.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.7.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.7.darwin-11.0-arm64.tgz">cockroach-sql-v24.2.7.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.7.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>Windows<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.7.windows-6.2-amd64.zip">cockroach-v24.2.7.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.7.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.7.windows-6.2-amd64.zip">cockroach-sql-v24.2.7.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.7.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td></tr></tbody></table>

### Docker image

[Multi-platform images](https://docs.docker.com/build/building/multi-platform) 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:

```shell theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
docker pull cockroachdb/cockroach:v24.2.7
```

### SQL language changes

* Added the `legacy_varchar_typing` session setting. When set to `on`, type-checking comparisons involving `VARCHAR` columns behave as they did in all previous versions. When set to `off`, type-checking of these comparisons is more strict and queries that previously succeeded may now error with the message `unsupported comparison operator`. These errors can be fixed by adding explicit type casts. The `legacy_varchar_typing` session setting is on by default.

## v24.2.6

Release Date: December 12, 2024

### Downloads

<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.
</Note>

<table><thead><tr><th>Operating System</th><th>Architecture</th><th>Full executable</th><th>SQL-only executable</th></tr></thead><tbody><tr><td rowspan="2">Linux</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.6.linux-amd64.tgz">cockroach-v24.2.6.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.6.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.6.linux-amd64.tgz">cockroach-sql-v24.2.6.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.6.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.6.linux-arm64.tgz">cockroach-v24.2.6.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.6.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.6.linux-arm64.tgz">cockroach-sql-v24.2.6.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.6.linux-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td rowspan="2">Mac<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.6.darwin-10.9-amd64.tgz">cockroach-v24.2.6.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.6.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.6.darwin-10.9-amd64.tgz">cockroach-sql-v24.2.6.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.6.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.6.darwin-11.0-arm64.tgz">cockroach-v24.2.6.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.6.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.6.darwin-11.0-arm64.tgz">cockroach-sql-v24.2.6.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.6.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>Windows<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.6.windows-6.2-amd64.zip">cockroach-v24.2.6.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.6.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.6.windows-6.2-amd64.zip">cockroach-sql-v24.2.6.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.6.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td></tr></tbody></table>

### Docker image

[Multi-platform images](https://docs.docker.com/build/building/multi-platform) 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:

```shell theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
docker pull cockroachdb/cockroach:v24.2.6
```

### Security updates

* All cluster settings that accept strings are now fully redacted when transmitted as part of diagnostics telemetry. This payload includes a record of modified cluster settings and their values when they are not strings. Customers who previously applied the mitigations in <InternalLink path="a133479">Technical Advisory 133479</InternalLink> can safely set the value of cluster setting `server.redact_sensitive_settings.enabled` to false and turn on diagnostic reporting via the `diagnostics.reporting.enabled` cluster setting without leaking sensitive cluster settings values.

### General changes

* `COCKROACH_SKIP_ENABLING_DIAGNOSTIC_REPORTING` is no longer mentioned in the `cockroach demo` command.
* Added `system.users` to the list of system tables that changefeeds protect with protected timestamps. This table is required for change data capture queries.

### Operational changes

* The `goschedstats.always_use_short_sample_period.enabled` setting should be set to true for any production cluster, to prevent unnecessary queuing in admission control CPU queues.
* Added a new cluster setting `ui.database_locality_metadata.enabled` that allows operators to disable loading extended database and table region information in the DB Console Database and Table pages. This information can cause significant CPU load on large clusters with many ranges. Versions of this page from v24.3 and later do not have this problem. If customers require this data, they can use the `SHOW RANGES FROM {DATABASE| TABLE}` query via SQL to compute on-demand.
* Row-level TTL jobs now periodically log progress by showing the number of table spans that have been processed so far.

### Bug fixes

* Fixed a bug that caused non-reusable query plans, e.g., plans for DDL and `SHOW...` statements, to be cached and reused in future executions, possibly causing stale results to be returned. This bug only occurred when `plan_cache_mode` was set to `auto` or `force_generic_plan`, both of which are not currently the default settings.
* Previously, CockroachDB could encounter an internal error of the form `interface conversion: coldata.Column is` in an edge case and this is now fixed. The bug is present in v22.2.13+, v23.1.9+, v23.2+.
* Fixed a bug that caused incorrect `NOT NULL` constraint violation errors on `UPSERT` and `INSERT.. ON CONFLICT.. DO UPDATE` statements when those statements updated an existing row and a subset of columns that did not include a `NOT NULL` column of the table. This bug has been present since at least v20.1.0.
* Fixed an unhandled error that could occur when using `REVOKE... ON SEQUENCE FROM... user` on an object that is not a sequence.
* Addressed a panic inside `CREATE TABLE AS` if sequence builtin expressions had invalid function overloads.
* `STRING` constants can now be compared against collated strings.
* When executing queries with index / lookup joins when the ordering needs to be maintained, previously CockroachDB could experience increased query latency, possibly by several orders of magnitude. This bug was introduced in v22.2 and is now fixed.
* Fixed a minor bug where `DISCARD ALL` statements were counted under the `sql.ddl.count` metric. Now these will be counted under the `sql.misc.count` metric.
* Addressed a bug with `DROP CASCADE` that would occasionally panic with an undropped `backref` message on partitioned tables.
* Reduced the duration of partitions in the gossip network when a node crashes in order to eliminate false positives in the `ranges.unavailable` metric.
* Non- `admin` users that run `DROP ROLE IF EXISTS` on a user that does not exist will no longer receive an error message.
* Fixed a bug that caused quotes around the name of a routine to be dropped when it was called within another routine. This could prevent the correct routine from being resolved if the nested routine name was case sensitive. The bug has existed since v24.1, when nested routines were introduced.
* Fixed a bug that could cause incorrect query results when the optimizer planned a lookup join on an index containing a column of type `CHAR(N)`, `VARCHAR(N)`, `BIT(N)`, `VARBIT(N)`, or `DECIMAL(M, N)`, and the query held that column constant to a single value (e.g., with an equality filter).
* Fixed an unhandled error that would occur if `DROP SCHEMA` was executed on the `public` schema of the `system` database, or on an internal schema like `pg_catalog` or `information_schema`.
* Fixed a bug that caused incorrect evaluation of some binary expressions involving `CHAR(N)` values and untyped string literals with trailing whitespace characters. For example, the expression `'f'::CHAR = 'f '` now correctly evaluates to `true`.
* Fixed a bug where `ALTER DATABASE` operations that modify the zone config would hang if an invalid zone config already exists.
* `CREATE SCHEMA` now returns the correct error if a the schema name is missing.
* Using more than one `DECLARE` statment in the definition of a user-defined function now correctly declares additional variables.
* Fixed a bug where CockroachDB would encounter an internal error when evaluating `FETCH ABSOLUTE 0` statements. The bug has been present since v22.1.
* Fixed an issue where corrupted table statistics could cause the `cockroach` process to crash.
* Fixed a bug that causes the optimizer to use stale table statistics after altering an `ENUM` type used in the table.

## v24.2.5

Release Date: November 18, 2024

### Downloads

<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.
</Note>

<table><thead><tr><th>Operating System</th><th>Architecture</th><th>Full executable</th><th>SQL-only executable</th></tr></thead><tbody><tr><td rowspan="2">Linux</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.5.linux-amd64.tgz">cockroach-v24.2.5.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.5.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.5.linux-amd64.tgz">cockroach-sql-v24.2.5.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.5.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.5.linux-arm64.tgz">cockroach-v24.2.5.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.5.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.5.linux-arm64.tgz">cockroach-sql-v24.2.5.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.5.linux-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td rowspan="2">Mac<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.5.darwin-10.9-amd64.tgz">cockroach-v24.2.5.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.5.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.5.darwin-10.9-amd64.tgz">cockroach-sql-v24.2.5.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.5.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.5.darwin-11.0-arm64.tgz">cockroach-v24.2.5.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.5.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.5.darwin-11.0-arm64.tgz">cockroach-sql-v24.2.5.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.5.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>Windows<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.5.windows-6.2-amd64.zip">cockroach-v24.2.5.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.5.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.5.windows-6.2-amd64.zip">cockroach-sql-v24.2.5.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.5.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td></tr></tbody></table>

### Docker image

[Multi-platform images](https://docs.docker.com/build/building/multi-platform) 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:

```shell theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
docker pull cockroachdb/cockroach:v24.2.5
```

### Security updates

* Host-based authentication (HBA) configuration entries for LDAP will be evaluated for proper LDAP parameter values, and a valid and complete list of authentication method options is now required to amend HBA settings.
* You can now authenticate to the DB Console by passing a JWT as the bearer token.

### General changes

* Change the license `cockroach` is distributed under to the new CockroachDB Software License.
* The cluster setting `diagnostics.reporting.enabled` is now ignored if the cluster has an Enterprise Trial or Enterprise Free license, or if the license cannot be loaded.
* The new metrics `changefeed.sink_errors` and `changefeed.internal_retry_message_count` allow you to observe the rate of errors and internal retries for a sink, respectively.
* Added a timer for inner sink client flushes.

### DB Console changes

* The DB Console now shows a warning if the cluster is throttled or will be throttled soon due to an expired Enterprise Free or Enterprise Trial license or due to missing telemetry data. Clusters with an Enterprise license are not throttled.
* The Range Count column on the Databases page is no longer shown due to performance issues. This data is still available via the `SHOW RANGES` command.

### Bug fixes

* Fixed a bug where timers were not correctly registered with the metric system.
* Fixed a bug where the command-line interface would not correctly escape JSON values that had double quotes inside a string when using the `--format=sql` flag.
* Fixed an error that could occur if a `SET` command used an aggregate function as the value.
* Fixed a bug where ordering by `VECTOR` columns could result in an internal error in some cases. Now an `unimplemented` error is returned instead.
* Added automated clean-up/validation for dropped roles inside default privileges.
* Fixed a bug that that caused incorrect evaluation of a `CASE`, `COALESCE`, or `IF` expression with a branch that produced fixed-width string-like types, such as `CHAR`.
* Fixed a bug that could cause the `BPCHAR` type to incorrectly impose a length limit of 1.
* Fixed a rare bug that could prevent a backup from being restored and could cause the error `rewriting descriptor ids: missing rewrite for <id> in SequenceOwner...`. This bug could occur only if a `DROP COLUMN` operation dropped a sequence while the backup was running.
* Fixed a bug introduced in v23.1 that could cause incorrect results when a join evaluates columns with equivalent but non-identical types, such as `OID` and `REGCLASS`, for equality. The issue arises when the join performs an index lookup on an index that includes a computed column referencing one of the equivalent columns.
* Fixed a bug introduced before v23.1 that could cause a composite sensitive expression to compare differently if comparing equivalent but non-identical input values, such as `2.0::DECIMAL` and `2.00::DECIMAL`. The issue arises when the join performs an index lookup on a table with a computed index column where the computed column expression is composite sensitive.
* Fixed a bug where a span statistics request on a mixed-version cluster could result in a null pointer exception.
* Updated the `franz-go` library to fix a potential deadlock when a changefeed restarts.
* Fixed a bug where a changefeed could fail to update protected timestamp records after a retryable error.
* Fixed a bug where a changefeed that used change data capture queries could fail after a system table was garbage collected.
* Fixed a rare bug introduced in v22.2 where an update of a primary key column could fail to update the primary index if it is also the only column in a separate column family.
* Fixed a bug where the `proretset` column of the `pg_catalog.pg_proc` table was incorrectly set to `false` for builtin functions that return a set.
* Fixed a bug that could cause incorrect evaluation of scalar expressions with `NULL` values.
* Fixed a rare bug in the query optimizer that could cause a node to crash if a query contained a filter in the form `col IN (elem0, elem1,..., elemN)` when `N` is very large, in the order of millions, and when `col` exists in a hash-sharded index or when a table with an indexed computed column depends on `col`.
* Fixed a bug where an `ALTER DEFAULT PRIVILEGES FOR target_role...` command could result in an erroneous privilege error when run by a user with the `admin` role.
* Fixed a bug where a `REASSIGN OWNED BY` command would fail to transfer ownership of the public schema, even when the schema was owned by the target role.
* Fixed a panic when resolving the types of an `AS OF SYSTEM TIME` expression.
* Fixed a bug that could cause new connections to fail with the following error after upgrading: `ERROR: invalid value for parameter "vectorize": "unknown(1)" SQLSTATE: 22023 HINT: Available values: off,on,experimental_always`. To encounter this bug, the cluster must have:
  1. Run on version v21.1 at some point in the past.
  2. Run `SET CLUSTER SETTING sql.defaults.vectorize = 'on';` while running v21.1.
  3. **Not** set `sql.defaults.vectorize` after upgrading past v21.1 4.
  4. Subsequently upgraded to v24.2.

     To detect this bug, run the following query:

     ```sql theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
     SELECT * FROM system.settings WHERE name = 'sql.defaults.vectorize
     ```

     If the command returns `1` instead of `on`, run the following statement before upgrading.

     ```sql theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
     RESET CLUSTER SETTING sql.defaults.vectorize;
     ```

     `1` is now allowed as a value for this setting, and is equivalent to `on`.
* Fixed a rare bug that could cause unnecessarily high disk usage in the presence of high rebalance activity.

### Performance improvements

* Performance has been improved during periodic polling of table history when `schema_locked` is not used.

## v24.2.4

Release Date: October 17, 2024

### Downloads

<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.
</Note>

<table><thead><tr><th>Operating System</th><th>Architecture</th><th>Full executable</th><th>SQL-only executable</th></tr></thead><tbody><tr><td rowspan="2">Linux</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.4.linux-amd64.tgz">cockroach-v24.2.4.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.4.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.4.linux-amd64.tgz">cockroach-sql-v24.2.4.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.4.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.4.linux-arm64.tgz">cockroach-v24.2.4.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.4.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.4.linux-arm64.tgz">cockroach-sql-v24.2.4.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.4.linux-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td rowspan="2">Mac<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.4.darwin-10.9-amd64.tgz">cockroach-v24.2.4.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.4.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.4.darwin-10.9-amd64.tgz">cockroach-sql-v24.2.4.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.4.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.4.darwin-11.0-arm64.tgz">cockroach-v24.2.4.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.4.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.4.darwin-11.0-arm64.tgz">cockroach-sql-v24.2.4.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.4.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>Windows<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.4.windows-6.2-amd64.zip">cockroach-v24.2.4.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.4.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.4.windows-6.2-amd64.zip">cockroach-sql-v24.2.4.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.4.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td></tr></tbody></table>

### Docker image

[Multi-platform images](https://docs.docker.com/build/building/multi-platform) 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:

```shell theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
docker pull cockroachdb/cockroach:v24.2.4
```

### Enterprise edition changes

* Updated the cluster setting <InternalLink version="v24.2" path="cluster-settings">`changefeed.sink_io_workers`</InternalLink> with all the <InternalLink version="v24.2" path="changefeed-sinks">changefeed sinks</InternalLink> that support the setting.
* Added two network metrics, `changefeed.network.bytes_in` and `changefeed.network.bytes_out`. These metrics track the number of bytes sent by individual <InternalLink version="v24.2" path="change-data-capture-overview">changefeeds</InternalLink> to the following sinks:
  * <InternalLink version="v24.2" path="changefeed-sinks#kafka">Kafka sinks</InternalLink>. If <InternalLink version="v24.2" path="cluster-settings">child metrics are enabled</InternalLink>, the metric will have a `kafka` label.
  * <InternalLink version="v24.2" path="changefeed-sinks#webhook-sink">Webhook sinks</InternalLink>. If child metrics are enabled, the metric will have a `webhook` label.
  * <InternalLink version="v24.2" path="changefeed-sinks">Pub/Sub sinks</InternalLink>. If child metrics are enabled, the metric will have a `pubsub` label.
  * <InternalLink version="v24.2" path="changefeed-for">SQL sink</InternalLink>. If child metrics are enabled, the metric will have a `sql` label.
* Added a `changefeed.total_ranges` metric that can be used to monitor the number of ranges that are watched by <InternalLink version="v24.2" path="change-data-capture-overview">changefeed</InternalLink> aggregators. It shares the same polling interval as `changefeed.lagging_ranges`, which is controlled by the existing `lagging_ranges_polling_interval` option.
* Disambiguated <InternalLink version="v24.2" path="essential-metrics-self-hosted">metrics</InternalLink> and <InternalLink version="v24.2" path="logging-overview">logs</InternalLink> for the two buffers used by the KV feed. The following metrics now have a suffix indicating which buffer they correspond to: `changefeed.buffer_entries.*`, `changefeed.buffer_entries_mem.*`, or `changefeed.buffer_pushback_nanos.*`. The previous metric names are retained for backward compatibility.
* Added timers and corresponding \[metrics]\([https://www.cockroachlabs.com/docs/v24.2/metrics.html](https://www.cockroachlabs.com/docs/v24.2/metrics.html) for key parts of the <InternalLink version="v24.2" path="change-data-capture-overview">changefeed</InternalLink> pipeline to help debug issues with feeds. The `changefeed.stage.{stage}.latency` metrics now emit latency histograms for each stage. The metrics respect the changefeed `scope` label to debug a specific feed.

### SQL language changes

* The <InternalLink version="v24.2" path="set-vars">session variable</InternalLink> `enforce_home_region_follower_reads_enabled` is now deprecated, in favor of `enforce_home_region`. The deprecated variable will be removed in a future release.

### Operational changes

* Added the new <InternalLink version="v24.2" path="metrics">metric</InternalLink> `ranges.decommissioning` to show the number of ranges that have a replica on a <InternalLink version="v24.2" path="node-shutdown?filters=decommission">decommissioning node</InternalLink>.
* You can now configure the log format for the <InternalLink version="v24.2" path="configure-logs#output-to-stderr">`stderr` log sink</InternalLink> by setting the `stderr.format` field in the <InternalLink version="v24.2" path="configure-logs#yaml-payload">YAML configuration</InternalLink>.

### DB Console changes

* Streamlined <InternalLink version="v24.2" path="ui-overview#metrics">metric chart</InternalLink> legends by removing the name of the chart from labels, where it was an identical prefix for all labels on the chart.
* The <InternalLink version="v24.2" path="ui-overview">DB Console</InternalLink> now shows a notification if the cluster has no Enterprise license set. Refer to [upcoming license changes](https://www.cockroachlabs.com/enterprise-license-update) for more information.

### Bug fixes

* Fixed a bug that could prevent <InternalLink version="v24.2" path="upgrade-cockroach-version">upgrade finalization</InternalLink> when attempting to resolve a large number of corrupt descriptors.

* Fixed a potential memory leak in <InternalLink version="v24.2" path="change-data-capture-overview">changefeeds</InternalLink> using a <InternalLink version="v24.2" path="changefeed-sinks#cloud-storage-sink">cloud storage sink</InternalLink>. The memory leak could occur if both <InternalLink version="v24.2" path="cluster-settings">`changefeed.fast_gzip.enabled`</InternalLink> and `changefeed.cloudstorage.async_flush.enabled` were `true`, and the changefeed received an error while attempting to write to the cloud storage sink.

* Fixed a bug where zone configuration changes issued by the <InternalLink version="v24.2" path="online-schema-changes">declarative schema changer</InternalLink> were not blocked if a table had `schema_locked` set.

* Fixed a bug in which some <InternalLink version="v24.2" path="select-for-update">`SELECT FOR UPDATE`</InternalLink> or <InternalLink version="v24.2" path="select-for-update">`SELECT FOR SHARE`</InternalLink> queries using `NOWAIT` could still block on locked rows when using the `optimizer_use_lock_op_for_serializable` <InternalLink version="v24.2" path="session-variables">session setting</InternalLink> under <InternalLink version="v24.2" path="demo-serializable">`SERIALIZABLE`</InternalLink> isolation. This bug was introduced with <InternalLink version="v24.2" path="session-variables">`optimizer_use_lock_op_for_serializable`</InternalLink> in v23.2.0.

* Fixed a bug that caused the <InternalLink version="v24.2" path="cost-based-optimizer">optimizer</InternalLink> to plan unnecessary post-query uniqueness checks during <InternalLink version="v24.2" path="insert">`INSERT`</InternalLink>, <InternalLink version="v24.2" path="upsert">`UPSERT`</InternalLink>, and <InternalLink version="v24.2" path="update">`UPDATE`</InternalLink> statements on tables with <InternalLink version="v24.2" path="partial-indexes">partial</InternalLink>, <InternalLink version="v24.2" path="create-index#unique-indexes">unique</InternalLink> <InternalLink version="v24.2" path="hash-sharded-indexes">hash-sharded indexes</InternalLink>. These unnecessary checks added overhead to execution of these statements, and caused the statements to error when executed under <InternalLink version="v24.2" path="read-committed">`READ COMMITTED`</InternalLink> isolation.

* Fixed a bug that could result in the inability to garbage collect an <InternalLink version="v24.2" path="architecture/storage-layer#mvcc">MVCC</InternalLink> range tombstone within a <InternalLink version="v24.2" path="global-tables">global table</InternalLink>.

* Fixed a bug where a connection could be dropped if the client was attempting a <InternalLink version="v24.2" path="online-schema-changes">schema change</InternalLink> while the same schema objects were being dropped.

* Fixed a bug introduced in v23.2 where the <InternalLink version="v24.2" path="null-handling#nulls-and-simple-comparisons">`IS NOT NULL`</InternalLink> clause would incorrectly allow tuples containing `NULL` elements, e.g. `(1, NULL)` or `(NULL, NULL)`.

* Fixed a bug that could cause errors with the message `internal error: Non-nullable column...` when executing statements under <InternalLink version="v24.2" path="read-committed">`READ COMMITTED`</InternalLink> isolation that involved tables with <InternalLink version="v24.2" path="not-null">`NOT NULL`</InternalLink> <InternalLink version="v24.2" path="computed-columns">virtual columns</InternalLink>.

* Fixed a bug where <InternalLink version="v24.2" path="use-cloud-storage">AWS S3 and HTTP client configurations</InternalLink> were not considered when implicit authentication was used.

* Fixed a bug introduced in v23.1 that can cause incorrect query results under the following conditions:
  1. The query contains a correlated subquery.
  2. The correlated subquery has a `GroupBy` or `DistinctOn` operator with an outer-column reference in its input.
  3. The correlated subquery is in the input of a `SELECT` or `JOIN` clause that has a filter that sets the outer-column reference equal to an inner column that is in the input of the grouping operator.
  4. The set of grouping columns does not include the replacement column explicitly.

* Fixed a bug where jobs created in a session with a timezone offset configured could fail to start or could report an incorrect creation time in the output of <InternalLink version="v24.2" path="show-jobs">`SHOW JOBS`</InternalLink> and in the <InternalLink version="v24.2" path="ui-overview">DB Console</InternalLink>.

* Fixed a bug that could prevent a <InternalLink version="v24.2" path="change-data-capture-overview">changefeed</InternalLink> from resuming after a prolonged <InternalLink version="v24.2" path="create-and-configure-changefeeds#pause">paused state</InternalLink>.

* Fixed a bug where backup schedules could advance a protected timestamp too early, which caused incremental backups to fail.

### Performance improvements

* The <InternalLink version="v24.2" path="cost-based-optimizer">query optimizer</InternalLink> now plans limited <InternalLink version="v24.2" path="partial-indexes">partial index</InternalLink> scans in more cases when the new <InternalLink version="v24.2" path="session-variables">session variable</InternalLink> `optimizer_push_limit_into_project_filtered_scan` is set to `on`.
* Reduced the write-amplification impact of rebalances by splitting snapshot <InternalLink version="v24.2" path="architecture/storage-layer#pebble">SST files</InternalLink> before ingesting them into <InternalLink version="v24.2" path="architecture/storage-layer#ssts">Pebble</InternalLink>.

## v24.2.3

Release Date: September 25, 2024

### Downloads

<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.
</Note>

<table><thead><tr><th>Operating System</th><th>Architecture</th><th>Full executable</th><th>SQL-only executable</th></tr></thead><tbody><tr><td rowspan="2">Linux</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.3.linux-amd64.tgz">cockroach-v24.2.3.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.3.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.3.linux-amd64.tgz">cockroach-sql-v24.2.3.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.3.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.3.linux-arm64.tgz">cockroach-v24.2.3.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.3.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.3.linux-arm64.tgz">cockroach-sql-v24.2.3.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.3.linux-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td rowspan="2">Mac<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.3.darwin-10.9-amd64.tgz">cockroach-v24.2.3.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.3.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.3.darwin-10.9-amd64.tgz">cockroach-sql-v24.2.3.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.3.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.3.darwin-11.0-arm64.tgz">cockroach-v24.2.3.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.3.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.3.darwin-11.0-arm64.tgz">cockroach-sql-v24.2.3.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.3.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>Windows<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.3.windows-6.2-amd64.zip">cockroach-v24.2.3.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.3.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.3.windows-6.2-amd64.zip">cockroach-sql-v24.2.3.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.3.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td></tr></tbody></table>

### Docker image

[Multi-platform images](https://docs.docker.com/build/building/multi-platform) 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:

```shell theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
docker pull cockroachdb/cockroach:v24.2.3
```

### Enterprise edition changes

* Added a `changefeed.protect_timestamp.lag` metric, which controls how much the changefeed <InternalLink version="v24.2" path="protect-changefeed-data">protected timestamp (PTS)</InternalLink> should lag behind the <InternalLink version="v24.2" path="how-does-an-enterprise-changefeed-work">high-water mark</InternalLink>. A changefeed now only updates its PTS if `changefeed.protect_timestamp.lag` has passed between the last PTS and the changefeed high-water mark.
* Added two network metrics, `changefeed.network.bytes_in` and `changefeed.network.bytes_out`. These metrics track the number of bytes sent by individual changefeeds to the following sinks:
  * <InternalLink version="v24.2" path="changefeed-sinks#kafka">Kafka sinks</InternalLink>. If <InternalLink path="child-metrics">child metrics</InternalLink> are enabled, the metric will have a `kafka` label.
  * <InternalLink version="v24.2" path="changefeed-sinks#webhook-sink">Webhook sinks</InternalLink>. If <InternalLink path="child-metrics">child metrics</InternalLink> are enabled, the metric will have a `webhook` label.
  * <InternalLink version="v24.2" path="changefeed-sinks">Pub/Sub sinks</InternalLink>. If <InternalLink path="child-metrics">child metrics</InternalLink> are enabled, the metric will have a `pubsub` label.
  * <InternalLink version="v24.2" path="changefeed-for">SQL sink</InternalLink>. If <InternalLink path="child-metrics">child metrics</InternalLink> are enabled, the metric will have a `sql` label.

### Operational changes

* Added a new configuration parameter, `server.cidr_mapping_url`, which maps IPv4 CIDR blocks to arbitrary tag names.
* Modified the metrics `sql.bytesin` and `sql.bytesout` to become aggregation metrics if <InternalLink path="child-metrics">child metrics</InternalLink> are enabled.
* Added three new network tracking metrics:
  * `rpc.connection.connected` is the number of rRPC TCP-level connections established to remote nodes.
  * `rpc.client.bytes.egress` is the number of TCP bytes sent via gRPC on connections initiated by CockroachDB.
  * `rpc.client.bytes.ingress` is the number of TCP bytes received via gRPC on connections initiated by CockroachDB.

### DB Console changes

* Users with the `VIEWACTIVITY` <InternalLink version="v24.2" path="security-reference/authorization#supported-privileges">system privilege</InternalLink> can now download <InternalLink version="v24.2" path="ui-statements-page#diagnostics">statement bundles</InternalLink> from the DB Console.
* Users with the `VIEWACTIVITY` <InternalLink version="v24.2" path="security-reference/authorization#supported-privileges">system privilege</InternalLink> can now request, view, and cancel <InternalLink version="v24.2" path="ui-statements-page#diagnostics">statement bundles</InternalLink> from the DB Console.
* The DB Console now displays a notification to alert customers without an Enterprise license to upcoming license changes.

### Bug fixes

* Fixed a bug where `NaN` or `Inf` could not be used as the default value for a parameter in <InternalLink version="v24.2" path="create-function">`CREATE FUNCTION`</InternalLink> statements.
* Fix a bug in which <InternalLink version="v24.2" path="select-for-update">`SELECT... FOR UPDATE`</InternalLink> or <InternalLink version="v24.2" path="select-for-update">`SELECT... FOR SHARE`</InternalLink> queries using `SKIP LOCKED` and a `LIMIT` and/or an `OFFSET` could return incorrect results under <InternalLink version="v24.2" path="read-committed">`READ COMMITTED`</InternalLink> isolation. This bug was present when support for `SKIP LOCKED` under `READ COMMITTED` isolation was introduced in v24.1.0.
* Fixed a bug in which some <InternalLink version="v24.2" path="select-for-update">`SELECT... FOR UPDATE`</InternalLink> or <InternalLink version="v24.2" path="select-for-update">`SELECT... FOR SHARE`</InternalLink> queries using `SKIP LOCKED` could still block on locked rows when using <InternalLink version="v24.2" path="session-variables">`optimizer_use_lock_op_for_serializable`</InternalLink> under <InternalLink version="v24.2" path="demo-serializable">`SERIALIZABLE`</InternalLink> isolation. This bug was present when `optimizer_use_lock_op_for_serializable` was introduced in v23.2.0.
* Fixed a bug in which <InternalLink version="v24.2" path="show-cluster-setting">`SHOW CLUSTER SETTING FOR VIRTUAL CLUSTER`</InternalLink> would erroneously return `NULL` for some settings.
* <InternalLink version="v24.2" path="user-defined-functions">Function</InternalLink> input parameters can no longer have the `VOID` type.
* Fixed a bug in <InternalLink version="v24.2" path="cockroach-start#enable-wal-failover">WAL failover</InternalLink> that could prevent a node from starting if it crashed during a failover.
* Fixed a bug where starting up nodes could fail with `could not insert session...: unexpected value` if an ambiguous result error was hit while inserting into the `sqlliveness` table.
* Internally issued queries that are not initiated within a SQL session no longer respect a statement timeout. This includes: <InternalLink version="v24.2" path="show-jobs">background jobs</InternalLink>, queries issued by the DB Console that perform introspection, and the Cloud <InternalLink version="v24.2" path="cockroachcloud/sql-shell">SQL shell</InternalLink>.
* Fixed a rare bug in <InternalLink version="v24.2" path="show-cluster-setting">`SHOW CLUSTER SETTING`</InternalLink> that could cause it to fail with an error like `timed out: value differs between local setting and KV`.
* Fixed a bug where the <InternalLink version="v24.2" path="with-storage-parameter#table-parameters">`schema_locked` table parameter</InternalLink> did not prevent a table from being referenced by a <InternalLink version="v24.2" path="foreign-key">foreign key</InternalLink>.
* Fixed a bug that could cause <InternalLink version="v24.2" path="restore">`RESTORE`</InternalLink> to hang after encountering transient errors from the <InternalLink version="v24.2" path="architecture/storage-layer">storage layer</InternalLink>.
* Fixed a bug where the <InternalLink version="v24.2" path="session-variables">`require_explicit_primary_keys`</InternalLink> session variable would overly aggressively prevent all <InternalLink version="v24.2" path="create-table">`CREATE TABLE`</InternalLink> statements from working.
* Fixed a slow-building memory leak that could occur when using <InternalLink version="v24.2" path="gssapi_authentication">Kerberos authentication</InternalLink>.
* Fixed a bug that could result in the inability to garbage collect an <InternalLink version="v24.2" path="architecture/storage-layer#mvcc">MVCC</InternalLink> range tombstone within a <InternalLink version="v24.2" path="table-localities#global-tables">global table</InternalLink>.
* Fixed a potential memory leak in changefeeds using a <InternalLink version="v24.2" path="changefeed-sinks#cloud-storage-sink">cloud storage sink</InternalLink>. The memory leak could occur if both <InternalLink version="v24.2" path="cluster-virtualization-setting-scopes">`changefeed.fast_gzip.enabled`</InternalLink> and `changefeed.cloudstorage.async_flush.enabled` are true and the changefeed received an error while attempting to write to the cloud storage sink.
* Fixed a bug that prevented buffered file sinks from being included when iterating over all file sinks. This led to problems such as the `debug zip` command not being able to fetch logs for a cluster where buffering was enabled.

### Contributors

This release includes 94 merged PRs by 38 authors.

## v24.2.2

Release Date: September 23, 2024

### Downloads

<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.
</Note>

<table><thead><tr><th>Operating System</th><th>Architecture</th><th>Full executable</th><th>SQL-only executable</th></tr></thead><tbody><tr><td rowspan="2">Linux</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.2.linux-amd64.tgz">cockroach-v24.2.2.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.2.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.2.linux-amd64.tgz">cockroach-sql-v24.2.2.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.2.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.2.linux-arm64.tgz">cockroach-v24.2.2.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.2.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.2.linux-arm64.tgz">cockroach-sql-v24.2.2.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.2.linux-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td rowspan="2">Mac<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.2.darwin-10.9-amd64.tgz">cockroach-v24.2.2.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.2.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.2.darwin-10.9-amd64.tgz">cockroach-sql-v24.2.2.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.2.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.2.darwin-11.0-arm64.tgz">cockroach-v24.2.2.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.2.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.2.darwin-11.0-arm64.tgz">cockroach-sql-v24.2.2.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.2.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>Windows<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.2.windows-6.2-amd64.zip">cockroach-v24.2.2.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.2.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.2.windows-6.2-amd64.zip">cockroach-sql-v24.2.2.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.2.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td></tr></tbody></table>

### Docker image

[Multi-platform images](https://docs.docker.com/build/building/multi-platform) 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:

```shell theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
docker pull cockroachdb/cockroach:v24.2.2
```

### Bug fixes

* Fixed a bug that could result in the inability to garbage collect an <InternalLink version="v24.2" path="architecture/storage-layer#mvcc">MVCC</InternalLink> range tombstone within a <InternalLink version="v24.2" path="table-localities#global-tables">global table</InternalLink>.

### Contributors

This release includes 3 merged PRs by 2 authors.

## v24.2.1

Release Date: September 5, 2024

### Downloads

<Danger>
  This patch release has been withdrawn. We've removed the links to the downloads and Docker image.All the changes listed as part of this release will be in the next release. Do not upgrade to this release.
</Danger>

### Security updates

* The new cluster setting `server.jwt_authentication.issuers.configuration` is now aliased to <InternalLink version="v24.2" path="sso-sql#cluster-settings">`server.jwt_authentication.issuers`</InternalLink>. The new cluster setting reflects the value the setting can take. The setting can now take multiple values to support various kinds of providers and their mapped JWKS URIs. This can be set to one of the following values:
  * Simple string that Go can parse as a valid issuer URL: `'https://accounts.google.com'`.
  * String that can be parsed as a valid JSON array of issuer URLs list: `['example.com/adfs','https://accounts.google.com']`.
  * String that can be parsed as a valid JSON and deserialized into a map of issuer URLs to corresponding JWKS URIs. In this case, CockroachDB will override the JWKS URI present in the issuer's well-known endpoint: `'{ "issuer_jwks_map": { "https://accounts.google.com": "https://www.googleapis.com/oauth2/v3/certs", "example.com/adfs": "https://example.com/adfs/discovery/keys" } }'`.

    When `issuer_jwks_map` is set, CockroachDB directly uses the JWKS URI to get the key set. In all other cases where <InternalLink version="v24.2" path="sso-sql#cluster-settings">`server.jwt_authentication.jwks_auto_fetch.enabled`</InternalLink> is set, CockroachDB attempts to automatically obtain the JWKS URI first from the issuer's well-known endpoint.

### Enterprise edition changes

* The new Kafka <InternalLink version="v24.2" path="changefeed-sinks">changefeed sink</InternalLink> is now enabled by default. To disable it, set the cluster setting <InternalLink version="v24.2" path="cluster-settings">`changefeed.new_kafka_sink_enabled`</InternalLink> to `false`.
* The new Kafka sink and the Google Cloud Pub/Sub sink now display the topics that a changefeed will emit to.

### Operational changes

* The cluster setting <InternalLink version="v24.2" path="cluster-settings">`storage.ingestion.value_blocks.enabled`</InternalLink> can be set to `false` if a pathological huge <InternalLink version="v24.2" path="architecture/glossary#range">range</InternalLink> happens to occur in a cluster, and incoming <InternalLink version="v24.2" path="architecture/replication-layer#snapshots">snapshots</InternalLink> of that range are causing <InternalLink version="v24.2" path="cluster-setup-troubleshooting#out-of-memory-oom-crash">OOMs</InternalLink>.
* Two new structured logging events report connection breakage during node shutdown. Previously, these logs existed but were unstructured. These logs appear in the <InternalLink version="v24.2" path="logging#ops">`OPS` logging channel</InternalLink>.
  * The <InternalLink version="v24.2" path="eventlog#node_shutdown_connection_timeout">`node_shutdown_connection_timeout`</InternalLink> event is logged after the timeout defined by <InternalLink version="v24.2" path="cluster-settings">`server.shutdown.connections.timeout`</InternalLink> transpires, if there are still <InternalLink version="v24.2" path="show-sessions">open SQL connections</InternalLink>.
  * The <InternalLink version="v24.2" path="eventlog#node_shutdown_transaction_timeout">`node_shutdown_transaction_timeout`</InternalLink> event is logged after the timeout defined by <InternalLink version="v24.2" path="cluster-settings">`server.shutdown.transactions.timeout`</InternalLink> transpires, if there are still open <InternalLink version="v24.2" path="transactions">transactions</InternalLink> on those SQL connections.

### DB Console changes

* Corrected the series names in the legend for the <InternalLink version="v24.2" path="ui-overload-dashboard">`Admission Queueing Delay p99 – Background (Elastic) CPU` graph</InternalLink> on the <InternalLink version="v24.2" path="ui-overload-dashboard">Overload dashboard</InternalLink> by removing the \`KV write ' prefix.
* Hovering on graphs on <InternalLink version="v24.2" path="ui-overview#metrics">Metrics dashboards</InternalLink> now highlights the line under the mouse pointer and displays the corresponding value near the mouse pointer.

### Bug fixes

* Fixed a memory leak that could occur when a connection string specifies a <InternalLink version="v24.2" path="cluster-virtualization-overview">virtual cluster</InternalLink> that does not exist.
* Fixed a bug where <InternalLink version="v24.2" path="create-index">`CREATE INDEX IF NOT EXISTS`</InternalLink> would not correctly short-circuit if the given index already existed.
* Fixed a bug where syntax validation incorrectly prevented use of the `DESCENDING` clause for non-terminal columns of an <InternalLink version="v24.2" path="inverted-indexes">inverted index</InternalLink>. Now only the last column of an inverted index is prevented from using `DESCENDING`.
* Fixed a bug where an <InternalLink version="v24.2" path="indexes">index</InternalLink> could store a column in the primary index if that column had a mixed-case name.
* Setting or dropping a default value on a <InternalLink version="v24.2" path="computed-columns">computed column</InternalLink> is now disallowed -- even for null defaults. Previously, setting or dropping a default value on a computed column was a no-op; now it is an error.
* Fixed a bug where a hash-sharded constraint could not be created if it referred to a column that had a backslash in its name.
* Fixed a bug introduced in v23.1 where the output of <InternalLink version="v24.2" path="explain">`EXPLAIN (OPT, REDACT)`</InternalLink> for various `CREATE` statements was not redacted. This bug affects the following statements:
  * `EXPLAIN (OPT, REDACT) CREATE TABLE`
  * `EXPLAIN (OPT, REDACT) CREATE VIEW`
  * `EXPLAIN (OPT, REDACT) CREATE FUNCTION`
* Fixed a bug where legacy and <InternalLink version="v24.2" path="online-schema-changes">declarative schema changes</InternalLink> could be executed concurrently, which could lead to failing or hung schema change jobs.
* Fixed a bug that caused errors like `ERROR: column 'crdb_internal_idx_expr' does not exist` when accessing a table with an <InternalLink version="v24.2" path="expression-indexes">expression index</InternalLink> where the expression evaluates to an <InternalLink version="v24.2" path="enum">ENUM type</InternalLink>, such as `CREATE INDEX ON t ((col::an_enum))`.

## v24.2.0

Release Date: August 12, 2024

With the release of CockroachDB v24.2, we've added new capabilities to help you migrate, build, and operate more efficiently. Refer to our summary of the most significant user-facing changes under [Feature Highlights](#v24-2-0-feature-highlights).

### Downloads

<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.
</Note>

<table><thead><tr><th>Operating System</th><th>Architecture</th><th>Full executable</th><th>SQL-only executable</th></tr></thead><tbody><tr><td rowspan="2">Linux</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0.linux-amd64.tgz">cockroach-v24.2.0.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0.linux-amd64.tgz">cockroach-sql-v24.2.0.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0.linux-arm64.tgz">cockroach-v24.2.0.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0.linux-arm64.tgz">cockroach-sql-v24.2.0.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0.linux-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td rowspan="2">Mac<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0.darwin-10.9-amd64.tgz">cockroach-v24.2.0.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0.darwin-10.9-amd64.tgz">cockroach-sql-v24.2.0.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0.darwin-11.0-arm64.tgz">cockroach-v24.2.0.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0.darwin-11.0-arm64.tgz">cockroach-sql-v24.2.0.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>Windows<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0.windows-6.2-amd64.zip">cockroach-v24.2.0.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0.windows-6.2-amd64.zip">cockroach-sql-v24.2.0.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td></tr></tbody></table>

### Docker image

[Multi-platform images](https://docs.docker.com/build/building/multi-platform) 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:

```shell theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
docker pull cockroachdb/cockroach:v24.2.0
```

### Feature highlights

This section summarizes the most significant user-facing changes in v24.2.0 and other features recently made available to CockroachDB users across versions. For a complete list of features and changes in v24.2, including bug fixes and performance improvements, refer to the release notes for previous v24.2 testing releases. You can also search the docs for sections labeled <SearchLink term="new in v24.2">New in v24.2</SearchLink>.

* **Feature categories**
  * [Change data capture](#v24-2-0-change-data-capture)
  * [Migrations](#v24-2-0-migrations)
  * [SQL](#v24-2-0-sql)
  * [Operations](#v24-2-0-operations)
  * [Observability](#v24-2-0-observability)
* **Additional information**
  * [Backward-incompatible changes and deprecations](#v24-2-0-backward-incompatible-changes-and-deprecations)
  * [Features that require upgrade finalization](#features-that-require-upgrade-finalization)
  * [Key cluster setting changes](#v24-2-0-key-cluster-setting-changes)
  * [Known limitations](#v24-2-0-known-limitations)
  * [Additional resources](#v24-2-0-additional-resources)

<Note>
  In CockroachDB Self-Hosted, all available features are free to use unless their description specifies that an Enterprise license is required. For more information, refer to the <InternalLink version="v24.2" path="licensing-faqs">Licensing FAQ</InternalLink>.
</Note>

#### Change Data Capture

<table><thead><tr><th class="center-align" colspan="1" rowspan="2">Feature</th><th class="center-align" colspan="4" rowspan="1">Availability</th></tr><tr><th colspan="1" rowspan="1">Ver.</th><th colspan="1" rowspan="1">Self-Hosted</th><th colspan="1" rowspan="1">Dedicated</th><th colspan="1" rowspan="1">Serverless</th></tr></thead><tbody><tr><td>CockroachDB Changefeeds - Improved null handling usability<br /><br /><a href="https://www.cockroachlabs.com/docs/v24.2/change-data-capture-overview">Changefeed</a> users can distinguish between JSON <code>NULL</code> values and SQL <code>NULL</code> values in changefeed messages, by using the <a href="https://www.cockroachlabs.com/docs/v24.2/changefeed-messages#json"><code>encode\_json\_value\_null\_as\_object</code> option</a> with <code>CREATE CHANGEFEED</code>. This enables a consumer to distinguish an unset value from a null JSON token.</td><td>24.2</td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td></tr></tbody></table>

#### Migrations

<table><thead><tr><th class="center-align" colspan="1" rowspan="2">Feature</th><th class="center-align" colspan="4" rowspan="1">Availability</th></tr><tr><th colspan="1" rowspan="1">Ver.</th><th colspan="1" rowspan="1">Self-Hosted</th><th colspan="1" rowspan="1">Dedicated</th><th colspan="1" rowspan="1">Serverless</th></tr></thead><tbody><tr><td>MOLT tooling is now available as a Docker container<br /><br />Users can now deploy CockroachDB's MOLT <InternalLink version="molt" path="molt-fetch">Fetch</InternalLink> and <InternalLink version="molt" path="molt-verify">Verify</InternalLink> tools using a multi-platform Docker image that supports both <code>linux/amd64</code> and <code>linux/arm64</code> architectures. For installation details, refer to <InternalLink version="releases" path="molt">MOLT Releases</InternalLink>.</td><td>All<sup>★★</sup></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td></tr><tr><td>MOLT Fetch transformation rules<br /><br />Column exclusion, computed columns, and partitioned tables are now supported in table migrations with MOLT Fetch. They are supported via a new <InternalLink version="molt" path="molt-fetch">transformations framework</InternalLink> that allows the user to specify a JSON file with instructions on how MOLT Fetch should treat certain schemas, tables, or underlying columns.</td><td>All<sup>★★</sup></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td></tr></tbody></table>

#### SQL

<table><thead><tr><th class="center-align" colspan="1" rowspan="2">Feature</th><th class="center-align" colspan="4" rowspan="1">Availability</th></tr><tr><th colspan="1" rowspan="1">Ver.</th><th colspan="1" rowspan="1">Self-Hosted</th><th colspan="1" rowspan="1">Dedicated</th><th colspan="1" rowspan="1">Serverless</th></tr></thead><tbody><tr><td>Vector search<br /><br />Users can now store <a href="https://www.cockroachlabs.com/docs/v24.2/vector"><code>VECTOR</code></a> embeddings within CockroachDB with <code>pgvector</code>-compatible semantics to build AI-driven applications. Numerous <a href="https://www.cockroachlabs.com/docs/v24.2/functions-and-operators#pgvector-functions">built-in functions</a> have been added for running similarity search across vectors. Note that vector indexing is not supported in this release. This feature is in <a href="https://cockroachlabs.com/docs/v24.2/cockroachdb-feature-availability">Preview</a>.</td><td>24.2</td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td></tr><tr><td>Generic query plans<br /><br />Users can now enable <a href="https://www.cockroachlabs.com/docs/v24.2/cost-based-optimizer#query-plan-type">generic query plans</a>. Generic query plans optimize query execution for prepared statements by reusing precompiled query plans, and significantly reduce the CPU overhead associated with parsing and planning repeated queries, at the expense of plan quality. This feature is in <a href="https://cockroachlabs.com/docs/v24.2/cockroachdb-feature-availability">Preview</a>.</td><td>24.2</td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td></tr><tr><td>COMMENT ON TYPE<br /><br />CockroachDB users can now <a href="https://www.cockroachlabs.com/docs/v24.2/comment-on#add-a-comment-to-a-type">annotate a type with a comment</a> and reference the comment later for documentation purposes.</td><td>24.2</td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td></tr></tbody></table>

#### Operations

<table><thead><tr><th class="center-align" colspan="1" rowspan="2">Feature</th><th class="center-align" colspan="4" rowspan="1">Availability</th></tr><tr><th colspan="1" rowspan="1">Ver.</th><th colspan="1" rowspan="1">Self-Hosted</th><th colspan="1" rowspan="1">Dedicated</th><th colspan="1" rowspan="1">Serverless</th></tr></thead><tbody><tr><td>CockroachDB Cloud Terraform Provider - Operations at scale<br /><br />This release includes updates to enhance operations at scale using the <a href="https://github.com/cockroachdb/terraform-provider-cockroach">CockroachDB Cloud Terraform Provider</a> across multiple Terraform projects. A new Resource for User Role Grants makes it easier to manage user account access to clusters across projects. A new Data Source for Folders allows better access to clusters organized in folders across multiple projects. A new Service Account Resource brings CockroachDB Cloud API access under Terraform management.</td><td>All<sup>★★</sup></td><td class="icon-center"><InlineImage alt="Gray circle with horizontal white line (No)" src="https://upload.wikimedia.org/wikipedia/commons/b/b9/Eo_circle_grey_white_no-entry.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td></tr><tr><td>Support for Optional Innovation Releases<br /><br />As of v24.2, CockroachDB has shifted from a 6-month <InternalLink version="releases" path="release-support-policy">major version release cycle</InternalLink> to a 3-month cycle. The additional versions, called <a href="https://cockroachlabs.com/releases/release-support-policy#innovation-releases">Innovation releases</a>, are optional and can be skipped for CockroachDB Dedicated and Self-Hosted, but are required for CockroachDB Serverless. Innovation releases have shorter support windows than Regular releases. Users can upgrade directly from a Regular release to the next Regular release, without needing to upgrade to the intermediary Innovation release.<br /><br />In CockroachDB Dedicated, users can now choose to deploy or upgrade a cluster on any supported version. CockroachDB Serverless clusters continue to receive all major versions and patches for both Innovation releases and Regular releases as they become available.</td><td>24.2</td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Gray circle with horizontal white line (No)" src="https://upload.wikimedia.org/wikipedia/commons/b/b9/Eo_circle_grey_white_no-entry.svg" /><br />(not skippable)</td></tr></tbody></table>

#### Observability

<table><thead><tr><th class="center-align" colspan="1" rowspan="2">Feature</th><th class="center-align" colspan="4" rowspan="1">Availability</th></tr><tr><th colspan="1" rowspan="1">Ver.</th><th colspan="1" rowspan="1">Self-Hosted</th><th colspan="1" rowspan="1">Dedicated</th><th colspan="1" rowspan="1">Serverless</th></tr></thead><tbody><tr><td>CockroachDB Dedicated clusters on Azure now integrate with Azure Monitor for metrics and logs (limited access)<br /><br /><InternalLink version="cockroachcloud" path="export-logs?filters=azure-monitor-log-export">Exporting logs</InternalLink> to Azure Monitor Logs and <InternalLink version="cockroachcloud" path="export-metrics?filters=azure-monitor-metrics-export">exporting metrics</InternalLink> to Azure Monitor Metrics and Prometheus-compatible metric sinks from your CockroachDB Dedicated cluster hosted on Azure is now supported in <a href="https://cockroachlabs.com/docs/v24.2/cockroachdb-feature-availability">Limited Access</a>.</td><td>All<sup>★</sup></td><td class="icon-center"><InlineImage alt="Gray circle with horizontal white line (No)" src="https://upload.wikimedia.org/wikipedia/commons/b/b9/Eo_circle_grey_white_no-entry.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Gray circle with horizontal white line (No)" src="https://upload.wikimedia.org/wikipedia/commons/b/b9/Eo_circle_grey_white_no-entry.svg" /></td></tr><tr><td>Improved Overload Dashboard<br /><br />Updates to the <a href="https://www.cockroachlabs.com/docs/v24.2/ui-overload-dashboard">Overload dashboard</a> include moving important metrics nearer the top and adding more informative tooltips. These enhancements aim to help users more easily identify when <a href="https://www.cockroachlabs.com/docs/v24.2/admission-control">Admission Control</a> mechanisms are activated due to overload.</td><td>v24.2</td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td></tr></tbody></table>

<table><thead><tr><th colspan="2" id="feature-detail-key">Feature detail key</th></tr></thead><tbody><tr><td>★</td><td>Features marked "All\*" were recently made available in the CockroachDB Cloud platform. They are available for all supported versions of CockroachDB, under the deployment methods specified in their row under Availability.</td></tr><tr><td>★★</td><td>Features marked "All\*\*" were recently made available via tools maintained outside of the CockroachDB binary. They are available to use with all supported versions of CockroachDB, under the deployment methods specified in their row under Availability.</td></tr><tr><td><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td>Feature is available for this deployment method of CockroachDB as specified in the icon’s column: CockroachDB Self-Hosted, CockroachDB Dedicated, or CockroachDB Serverless.</td></tr><tr><td><InlineImage alt="Gray circle with horizontal white line (No)" src="https://upload.wikimedia.org/wikipedia/commons/b/b9/Eo_circle_grey_white_no-entry.svg" /></td><td>Feature is not available for this deployment method of CockroachDB as specified in the icon’s column: CockroachDB Self-Hosted, CockroachDB Dedicated, or CockroachDB Serverless.</td></tr></tbody></table>

#### Backward-incompatible changes and deprecations

CockroachDB v24.2.0 includes no backward-incompatible changes or deprecations.

#### Features that require upgrade finalization

During a major-version upgrade, certain features and performance improvements may not be available until the upgrade is finalized. However, when upgrading to v24.2, all features are available immediately, and no features require finalization.

#### Key Cluster Setting Changes

The following changes should be reviewed prior to upgrading. Default cluster settings will be used unless you have manually set a value for a setting. This can be confirmed by running the SQL statement `SELECT * FROM system.settings` to view the non-default settings.

* [Settings added](#v24-2-0-settings-added)
* [Settings removed](#v24-2-0-settings-removed)
* [Settings with changed defaults](#v24-2-0-settings-with-changed-defaults)
* [Settings with new options](#v24-2-0-settings-with-new-options)
* [Settings with new aliases](#v24-2-0-settings-with-new-aliases)

##### Settings added

* `debug.zip.redact_addresses`: Added the <InternalLink version="v24.2" path="cluster-settings">cluster setting</InternalLink> `debug.zip.redact_addresses.enabled` that allows the user to enable or disable redaction of fields like `hostname` and IP addresses.
* `kv.transaction.randomized_anchor_key`: Previously, concurrent transactions that constructed large write batches could cause <InternalLink version="v24.2" path="ui-hot-ranges-page">hotspots</InternalLink>. This was because the <InternalLink version="v24.2" path="architecture/transaction-layer#transaction-records">transaction record</InternalLink> for all <InternalLink version="v24.2" path="architecture/reads-and-writes-overview#range">ranges</InternalLink> would coalesce on a single range, which would then cause this range's <InternalLink version="v24.2" path="architecture/reads-and-writes-overview#leaseholder">leaseholder</InternalLink> to perform all intent resolution work. This is fixed by distributing transaction records randomly across the ranges the write batch touches. In turn, hotspots are prevented.
* `server.oidc_authentication.client.timeout`: The new <InternalLink version="v24.2" path="cluster-settings">cluster setting</InternalLink> `server.oidc_authentication.client.timeout` allows configuration of the HTTP client timeout for external requests made during <InternalLink version="v24.2" path="sso-db-console">OIDC authentication</InternalLink>. The default timeout is 30 seconds.
* `sql.auth.grant_option_for_owner.enabled`: The new <InternalLink version="v24.2" path="cluster-settings">cluster setting</InternalLink> <InternalLink version="v24.2" path="cluster-settings">`sql.auth.grant_option_for_owner.enabled`</InternalLink> controls whether the owner of an object has permission to grant permission on the object to other <InternalLink version="v24.2" path="security-reference/authorization#roles">users</InternalLink>. When set to `true` (the default), the <InternalLink version="v24.2" path="show-grants#privilege-grants">`GRANT OPTION`</InternalLink> is implicitly granted to the object owner, who can grant permissions on the object to other users, preserving the existing behavior of CockroachDB. When set to `false`, the `GRANT OPTION` is not implicitly given to the owner of an object. The owner's permissions do not change, but they can no longer grant permissions to others unless the `GRANT OPTION` is granted to them explicitly.
* `sql.auth.grant_option_inheritance.enabled`: Added the <InternalLink version="v24.2" path="cluster-settings">`sql.auth.grant_option_inheritance.enabled` cluster setting</InternalLink>. The default value is `true`, which maintains consistency with CockroachDB's previous behavior: users granted a privilege with <InternalLink version="v24.2" path="grant">`WITH GRANT OPTION`</InternalLink> can in turn grant that privilege to others. When `sql.auth.grant_option_inheritance.enabled` is set to `false`, the `GRANT OPTION` is not inherited through role membership, thereby preventing descendant roles from granting the privilege to others. However, the privilege itself continues to be inherited through role membership.
* `storage.sstable.compression_algorithm_backup_storage`, `storage.sstable.compression_algorithm_backup_transport`: Added two new <InternalLink version="v24.2" path="cluster-settings">cluster settings</InternalLink>, `storage.sstable.compression_algorithm_backup_storage` and `storage.sstable.compression_algorithm_backup_transport`, which in addition to the existing cluster setting `storage.sstable.compression_algorithm`, can be used to alter the compression algorithm used for various types of <InternalLink version="v24.2" path="architecture/storage-layer#ssts">SSTs</InternalLink>.

##### Settings removed

* `kv.rangefeed.range_stuck_threshold`: Removed the stuck rangefeed cancel feature and its related <InternalLink version="v24.2" path="cluster-settings">cluster setting</InternalLink> `kv.rangefeed.range_stuck_threshold`, because it was only available in <InternalLink version="v24.2" path="advanced-changefeed-configuration#mux-rangefeeds">non-mux rangefeeds</InternalLink>. Previously, the stuck rangefeed cancel feature was introduced to restart single rangefeeds automatically if they had not received KV updates for some time.
* `storage.value_blocks.enabled`: The `storage.value_blocks.enabled` <InternalLink version="v24.2" path="cluster-settings">cluster setting</InternalLink> has been removed; value blocks are always enabled.

##### Settings with changed defaults

* `kv.dist_sender.circuit_breakers.mode` has had its default changed to `liveness range only = 1`.
* `sql.defaults.results_buffer.size` has had its default changed to `512 KiB`: The default value of the `sql.defaults.results_buffer.size` <InternalLink version="v24.2" path="cluster-settings">cluster setting</InternalLink> has been changed from 16KiB to 512KiB. This reduces the chance that clients using <InternalLink version="v24.2" path="read-committed">`READ COMMITTED`</InternalLink> transactions will encounter errors that cannot automatically be retried within CockroachDB.
* `sql.metrics.max_mem_stmt_fingerprints` and `sql.metrics.max_mem_txn_fingerprints` have had their defaults changed to `7500`: The default values for the <InternalLink version="v24.2" path="cluster-settings">cluster settings</InternalLink> `sql.metrics.max_mem_stmt_fingerprints` and `sql.metrics.max_mem_txn_fingerprints` have been changed from `100000` to `7500`, thus lowering the default limits for in-memory statement and transaction fingerprints.
* `sql.stats.histogram_samples.count` has had its default changed to `0`: Histograms are no longer constructed using a default sample size of `10k`. Samples are now sized dynamically based on table size unless the sample count has been set in the table or <InternalLink version="v24.2" path="cluster-settings">cluster settings</InternalLink>.
* `sql.ttl.default_delete_rate_limit` has had its default changed to `100`: The storage parameter `ttl_delete_rate_limit`, which determines the rate limit for deleting expired rows, is now set to `100` by default.

##### Settings with new options

* `storage.sstable.compression_algorithm` has added the option `none = 3`: The compression option `none` was added to allow for the disabling of SSTable compression. This option is disabled by default, but can can be used with any of the three existing cluster settings that control SSTable compression: `storage.sstable.compression_algorithm`, `storage.sstable.compression_algorithm_backup_storage`, and `storage.sstable.compression_algorithm_backup_transport`.

##### Settings with new aliases

* `changefeed.batch_reduction_retry.enabled` is aliased to `changefeed.batch_reduction_retry_enabled`.
* `kv.closed_timestamp.follower_reads.enabled` is aliased to `kv.closed_timestamp.follower_reads_enabled`.
* `kv.range_split.by_load.enabled` is aliased to `kv.range_split.by_load_enabled`.
* `kv.transaction.write_pipelining.enabled` is aliased to `kv.transaction.write_pipelining_enabled`.
* `kv.transaction.write_pipelining.max_batch_size` is aliased to `kv.transaction.write_pipelining_max_batch_size`.
* `physical_replication.consumer.minimum_flush_interval` is aliased to `builkio.stream_ingestion.minimum_flush_interval`.
* `server.clock.forward_jump_check.enabled` is aliased to `server.clock.forward_jump_check_enabled`.
* `server.oidc_authentication.autologin.enabled` is aliased to `server.oidc_authentication.autologin`.
* `server.shutdown.connections.timeout` is aliased to `server.shutdown.connection_wait`.
* `server.shutdown.initial_wait` is aliased to `server.shutdown.drain_wait`.
* `server.shutdown.jobs.timeout` is aliased to `server.shutdown.jobs_wait`.
* `server.shutdown.lease_transfer_iteration.timeout` is aliased to `server.shutdown.lease_transfer_wait`.
* `server.shutdown.transactions.timeout` is aliased to `server.shutdown.query_wait`.
* `server.web_session.timeout` is aliased to `server.web_session_timeout`.
* `spanconfig.range_coalescing.application.enabled` is aliased to `spanconfig.tenant_coalesce_adjacent.enabled`.
* `spanconfig.range_coalescing.system.enabled` is aliased to `spanconfig.storage_coalesce_adjacent.enabled`.
* `sql.log.all_statements.enabled` is aliased to `sql.trace.log_statement_execute`.
* `sql.metrics.statement_details.dump_to_logs.enabled` is aliased to `sql.metrics.statement_details.dump_to_logs`.
* `trace.debug_http_endpoint.enabled` is aliased to `trace.debug.enable`.

#### Known limitations

For information about new and unresolved limitations in CockroachDB v24.2, with suggested workarounds where applicable, refer to <InternalLink version="v24.2" path="known-limitations">Known Limitations</InternalLink>.

#### Additional resources

<table><thead><tr><th>Resource</th><th>Topic</th><th>Description</th></tr></thead><tbody><tr><td>Cockroach University</td><td><a href="https://university.cockroachlabs.com/courses/course-v1:crl+intro-to-distributed-sql-and-cockroachdb+self-paced/about">Introduction to Distributed SQL and CockroachDB</a></td><td>This course introduces the core concepts behind distributed SQL databases and describes how CockroachDB fits into this landscape. You will learn what differentiates CockroachDB from both legacy SQL and NoSQL databases and how CockroachDB ensures consistent transactions without sacrificing scale and resiliency. You'll learn about CockroachDB's seamless horizontal scalability, distributed transactions with strict ACID guarantees, and high availability and resilience.</td></tr><tr><td>Cockroach University</td><td><a href="https://university.cockroachlabs.com/courses/course-v1:crl+practical-first-steps-with-crdb+self-paced/about">Practical First Steps with CockroachDB</a></td><td>This course will give you the tools you need to get started with CockroachDB. During the course, you will learn how to spin up a cluster, use the Admin UI to monitor cluster activity, and use SQL shell to solve a set of hands-on exercises.</td></tr><tr><td>Cockroach University</td><td><a href="https://university.cockroachlabs.com/courses/course-v1:crl+client-side-txn-handling+self-paced/about">Enterprise Application Development with CockroachDB</a></td><td>This course is the first in a series designed to equip you with best practices for mastering application-level (client-side) transaction management in CockroachDB. We'll dive deep on common differences between CockroachDB and legacy SQL databases and help you sidestep challenges you might encounter when migrating to CockroachDB from Oracle, PostgreSQL, and MySQL.</td></tr><tr><td>Cockroach University</td><td><a href="https://university.cockroachlabs.com/courses/course-v1:crl+intro-to-resilience-in-multi-region+self-paced/about">Building a Highly Resilient Multi-region Database using CockroachDB</a></td><td>This course is part of a series introducing solutions to running low-latency, highly resilient applications for data-intensive workloads on CockroachDB. In this course we focus on surviving large-scale infrastructure failures like losing an entire cloud region without losing data during recovery. We'll show you how to use CockroachDB survival goals in a multi-region cluster to implement a highly resilient database that survives node or network failures across multiple regions with zero data loss.</td></tr><tr><td>Docs</td><td><InternalLink version="molt" path="migration-overview">Migration Overview</InternalLink></td><td>This page summarizes the steps of migrating a database to CockroachDB, which include testing and updating your schema to work with CockroachDB, moving your data into CockroachDB, and testing and updating your application.</td></tr><tr><td>Docs</td><td><a href="https://www.cockroachlabs.com/docs/v24.2/architecture/overview">Architecture Overview</a></td><td>This page provides a starting point for understanding the architecture and design choices that enable CockroachDB's scalability and consistency capabilities.</td></tr><tr><td>Docs</td><td><a href="https://www.cockroachlabs.com/docs/v24.2/sql-feature-support">SQL Feature Support</a></td><td>The page summarizes the standard SQL features CockroachDB supports as well as common extensions to the standard.</td></tr><tr><td>Docs</td><td><a href="https://www.cockroachlabs.com/docs/v24.2/change-data-capture-overview">Change Data Capture Overview</a></td><td>This page summarizes CockroachDB's data streaming capabilities. Change data capture (CDC) provides efficient, distributed, row-level changefeeds into a configurable sink for downstream processing such as reporting, caching, or full-text indexing.</td></tr><tr><td>Docs</td><td><a href="https://www.cockroachlabs.com/docs/v24.2/backup-architecture">Backup Architecture</a></td><td>This page describes the backup job workflow with a high-level overview, diagrams, and more details on each phase of the job.</td></tr></tbody></table>

## v24.2.0-rc.1

Release Date: August 7, 2024

### Downloads

<Danger>
  CockroachDB v24.2.0-rc.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.
</Danger>

<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.
</Note>

<table><thead><tr><th>Operating System</th><th>Architecture</th><th>Full executable</th><th>SQL-only executable</th></tr></thead><tbody><tr><td rowspan="2">Linux</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-rc.1.linux-amd64.tgz">cockroach-v24.2.0-rc.1.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-rc.1.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-rc.1.linux-amd64.tgz">cockroach-sql-v24.2.0-rc.1.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-rc.1.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-rc.1.linux-arm64.tgz">cockroach-v24.2.0-rc.1.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-rc.1.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-rc.1.linux-arm64.tgz">cockroach-sql-v24.2.0-rc.1.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-rc.1.linux-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td rowspan="2">Mac<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-rc.1.darwin-10.9-amd64.tgz">cockroach-v24.2.0-rc.1.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-rc.1.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-rc.1.darwin-10.9-amd64.tgz">cockroach-sql-v24.2.0-rc.1.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-rc.1.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-rc.1.darwin-11.0-arm64.tgz">cockroach-v24.2.0-rc.1.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-rc.1.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-rc.1.darwin-11.0-arm64.tgz">cockroach-sql-v24.2.0-rc.1.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-rc.1.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>Windows<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-rc.1.windows-6.2-amd64.zip">cockroach-v24.2.0-rc.1.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-rc.1.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-rc.1.windows-6.2-amd64.zip">cockroach-sql-v24.2.0-rc.1.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-rc.1.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td></tr></tbody></table>

### Docker image

[Multi-platform images](https://docs.docker.com/build/building/multi-platform) 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:

```shell theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
docker pull cockroachdb/cockroach-unstable:v24.2.0-rc.1
```

### Enterprise edition changes

* Added a new Kafka <InternalLink version="v24.2" path="changefeed-sinks">changefeed sink</InternalLink> that uses the [`franz-go` library](https://github.com/twmb/franz-go) and CockroachDB's `batching_sink` implementation. The new Kafka sink can be enabled with the <InternalLink version="v24.2" path="cluster-settings">`changefeed.new_kafka_sink_enabled`</InternalLink> cluster setting, which is disabled by default.
* The v2 Kafka <InternalLink version="v24.2" path="changefeed-sinks">changefeed sink</InternalLink> now supports [Amazon Managed Streaming for Apache Kafka (MSK)](https://aws.amazon.com/msk) IAM SASL authentication.

### DB Console changes

* The <InternalLink version="v24.2" path="ui-databases-page">Databases</InternalLink> and <InternalLink version="v24.2" path="ui-databases-page#tables-view">Tables</InternalLink> pages in the <InternalLink version="v24.2" path="ui-overview">DB Console</InternalLink> will show a loading state while loading information for databases and tables including size and range counts.
* On the <InternalLink version="v24.2" path="ui-databases-page">Database details</InternalLink> page, the table name will no longer appear with quotes around the schema and table name.

### Bug fixes

* Fixed a bug that caused a memory leak when executing SQL statements with comments, for example, `SELECT /* comment */ 1;`. Memory owned by a SQL session would continue to grow as these types of statements were executed. The memory would only be released when closing the <InternalLink version="v24.2" path="show-sessions">SQL session</InternalLink>. This bug has been present since v23.1.
* Fixed a bug in <InternalLink version="v24.2" path="cockroach-debug-zip">debug zip</InternalLink> generation where an error was produced while fetching unstructured/malformed <InternalLink version="v24.2" path="log-formats">logs</InternalLink>.
* Fixed small memory leaks that occur during <InternalLink version="v24.2" path="create-changefeed">changefeed creation</InternalLink>.
* Fixed a <InternalLink version="v24.2" path="physical-cluster-replication-overview#known-limitations">known limitation</InternalLink> in which <InternalLink path="cutover-replication#cut-back-to-the-original-primary-cluster">fast cutback</InternalLink> could fail. Users can now protect data for the <InternalLink version="v24.2" path="physical-cluster-replication-technical-overview">default protection window</InternalLink> of 4 hours on both the primary and the standby clusters.

### Contributors

This release includes 29 merged PRs by 21 authors.

## v24.2.0-beta.3

Release Date: August 1, 2024

### Downloads

<Danger>
  CockroachDB v24.2.0-beta.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.
</Danger>

<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.
</Note>

<table><thead><tr><th>Operating System</th><th>Architecture</th><th>Full executable</th><th>SQL-only executable</th></tr></thead><tbody><tr><td rowspan="2">Linux</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-beta.3.linux-amd64.tgz">cockroach-v24.2.0-beta.3.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-beta.3.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-beta.3.linux-amd64.tgz">cockroach-sql-v24.2.0-beta.3.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-beta.3.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-beta.3.linux-arm64.tgz">cockroach-v24.2.0-beta.3.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-beta.3.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-beta.3.linux-arm64.tgz">cockroach-sql-v24.2.0-beta.3.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-beta.3.linux-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td rowspan="2">Mac<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-beta.3.darwin-10.9-amd64.tgz">cockroach-v24.2.0-beta.3.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-beta.3.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-beta.3.darwin-10.9-amd64.tgz">cockroach-sql-v24.2.0-beta.3.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-beta.3.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-beta.3.darwin-11.0-arm64.tgz">cockroach-v24.2.0-beta.3.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-beta.3.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-beta.3.darwin-11.0-arm64.tgz">cockroach-sql-v24.2.0-beta.3.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-beta.3.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>Windows<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-beta.3.windows-6.2-amd64.zip">cockroach-v24.2.0-beta.3.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-beta.3.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-beta.3.windows-6.2-amd64.zip">cockroach-sql-v24.2.0-beta.3.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-beta.3.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td></tr></tbody></table>

### Docker image

[Multi-platform images](https://docs.docker.com/build/building/multi-platform) 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:

```shell theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
docker pull cockroachdb/cockroach-unstable:v24.2.0-beta.3
```

### Command-line changes

* A `--locality-file` flag is now available on the <InternalLink version="v24.2" path="cockroach-start">`cockroach start`</InternalLink> and <InternalLink version="v24.2" path="cockroach-start-single-node">`cockroach start-single-node`</InternalLink> commands. This provides the option of specifing node <InternalLink version="v24.2" path="cockroach-start#locality">locality</InternalLink> (typically a `region` value) as a file, as an alternative to specifying this using the <InternalLink version="v24.2" path="cockroach-start#locality">`--locality` flag</InternalLink>.

### Bug fixes

* Fixed a formatting issue with the `sql_sequence_cached_node` value of the `serial_normalization` <InternalLink version="v24.2" path="session-variables">setting</InternalLink>. This could lead to an error connecting to CockroachDB if this value was set as the default for `serial_normalization` via cluster setting <InternalLink version="v24.2" path="cluster-settings">`sql.defaults.serial_normalization`</InternalLink>.
* Dropping <InternalLink version="v24.2" path="enum">ENUM</InternalLink> -type values which were referenced by <InternalLink version="v24.2" path="expression-indexes">index expressions</InternalLink> could fail with an error.

This release includes 13 merged PRs by 7 authors.

## v24.2.0-beta.2

Release Date: July 24, 2024

### Downloads

<Danger>
  CockroachDB v24.2.0-beta.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.
</Danger>

<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.
</Note>

<table><thead><tr><th>Operating System</th><th>Architecture</th><th>Full executable</th><th>SQL-only executable</th></tr></thead><tbody><tr><td rowspan="2">Linux</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-beta.2.linux-amd64.tgz">cockroach-v24.2.0-beta.2.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-beta.2.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-beta.2.linux-amd64.tgz">cockroach-sql-v24.2.0-beta.2.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-beta.2.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-beta.2.linux-arm64.tgz">cockroach-v24.2.0-beta.2.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-beta.2.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-beta.2.linux-arm64.tgz">cockroach-sql-v24.2.0-beta.2.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-beta.2.linux-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td rowspan="2">Mac<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-beta.2.darwin-10.9-amd64.tgz">cockroach-v24.2.0-beta.2.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-beta.2.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-beta.2.darwin-10.9-amd64.tgz">cockroach-sql-v24.2.0-beta.2.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-beta.2.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-beta.2.darwin-11.0-arm64.tgz">cockroach-v24.2.0-beta.2.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-beta.2.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-beta.2.darwin-11.0-arm64.tgz">cockroach-sql-v24.2.0-beta.2.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-beta.2.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>Windows<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-beta.2.windows-6.2-amd64.zip">cockroach-v24.2.0-beta.2.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-beta.2.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-beta.2.windows-6.2-amd64.zip">cockroach-sql-v24.2.0-beta.2.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-beta.2.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td></tr></tbody></table>

### Docker image

[Multi-platform images](https://docs.docker.com/build/building/multi-platform) 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:

```shell theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
docker pull cockroachdb/cockroach-unstable:v24.2.0-beta.2
```

### Security updates

* URLs in the following SQL statements are now sanitized of any secrets before being written to <InternalLink version="v24.2" path="configure-logs#redact-logs">unredacted logs</InternalLink>.
* <InternalLink version="v24.2" path="alter-backup">`ALTER BACKUP SCHEDULE`</InternalLink>
* <InternalLink version="v24.2" path="alter-backup">`ALTER BACKUP`</InternalLink>
* <InternalLink version="v24.2" path="alter-changefeed">`ALTER CHANGEFEED SET sink`</InternalLink>
* <InternalLink version="v24.2" path="backup">`BACKUP`</InternalLink>
* <InternalLink version="v24.2" path="copy">`COPY`</InternalLink>
* <InternalLink version="v24.2" path="create-changefeed">`CREATE CHANGEFEED`</InternalLink>
* <InternalLink version="v24.2" path="create-external-connection">`CREATE EXTERNAL CONNECTION`</InternalLink>
* <InternalLink version="v24.2" path="create-schedule-for-backup">`CREATE SCHEDULE FOR BACKUP`</InternalLink>
* <InternalLink version="v24.2" path="create-schedule-for-changefeed">`CREATE SCHEDULE FOR CHANGEFEED`</InternalLink>
* <InternalLink version="v24.2" path="export">`EXPORT`</InternalLink>
* <InternalLink version="v24.2" path="import-into">`IMPORT INTO`</InternalLink>
* <InternalLink version="v24.2" path="restore">`RESTORE`</InternalLink>
* <InternalLink version="v24.2" path="show-backup">`SHOW BACKUPS`</InternalLink>
* <InternalLink version="v24.2" path="show-backup">`SHOW BACKUP`</InternalLink>

### SQL language changes

* The new <InternalLink version="v24.2" path="cluster-settings">cluster setting</InternalLink> <InternalLink version="v24.2" path="cluster-settings">`sql.auth.grant_option_for_owner.enabled`</InternalLink> controls whether the owner of an object has permission to grant permission on the object to other <InternalLink version="v24.2" path="security-reference/authorization#roles">users</InternalLink>. When set to `true` (the default), the <InternalLink version="v24.2" path="show-grants#privilege-grants">`GRANT OPTION`</InternalLink> is is implicitly granted to the object owner, who can grant permissions on the object to other users, preserving the existing behavior of CockroachDB. When set to `false`, the `GRANT OPTION` is not implicitly given to the owner of an object. The owner's permissions do not change, but they can no longer grant permissions to others unless the `GRANT OPTION` is granted to them explicitly.
* Fixed a bug in which the `DISCARD` statement was disallowed when the <InternalLink version="v24.2" path="session-variables">session setting</InternalLink> `default_transaction_read_only = on`.

### Bug fixes

* Fixed a bug that could cause <InternalLink version="v24.2" path="create-index#create-gin-indexes">`CREATE INVERTED INDEX`</InternalLink> and <InternalLink version="v24.2" path="alter-table#set-the-table-locality-to-regional-by-row">`ALTER TABLE... SET LOCALITY REGIONAL BY ROW`</InternalLink> statements to fail if the corresponding table contained columns with non-standard characters in their names, such as tabs or newlines. This bug was introduced along with <InternalLink version="v24.2" path="inverted-indexes">inverted indexes</InternalLink> in v2.0.
* Fixed a bug introduced in v23.2 that could cause a <InternalLink version="v24.2" path="architecture/life-of-a-distributed-transaction#gateway">gateway node</InternalLink> to crash while executing an <InternalLink version="v24.2" path="insert">`INSERT`</InternalLink> statement in a <InternalLink version="v24.2" path="alter-table#set-the-table-locality-to-regional-by-row">`REGIONAL BY ROW`</InternalLink> table.
* Fixed a bug where a <InternalLink version="v24.2" path="online-schema-changes">schema change</InternalLink> could hang if the <InternalLink version="v24.2" path="architecture/replication-layer#leases">lease</InternalLink> <InternalLink version="v24.2" path="create-and-configure-changefeeds#enable-rangefeeds">rangefeed</InternalLink> stopped receiving updates.

### Contributors

This release includes 45 merged PRs by 18 authors.

## v24.2.0-beta.1

Release Date: July 18, 2024

### Downloads

<Danger>
  CockroachDB v24.2.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.
</Danger>

<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.
</Note>

<table><thead><tr><th>Operating System</th><th>Architecture</th><th>Full executable</th><th>SQL-only executable</th></tr></thead><tbody><tr><td rowspan="2">Linux</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-beta.1.linux-amd64.tgz">cockroach-v24.2.0-beta.1.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-beta.1.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-beta.1.linux-amd64.tgz">cockroach-sql-v24.2.0-beta.1.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-beta.1.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-beta.1.linux-arm64.tgz">cockroach-v24.2.0-beta.1.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-beta.1.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-beta.1.linux-arm64.tgz">cockroach-sql-v24.2.0-beta.1.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-beta.1.linux-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td rowspan="2">Mac<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-beta.1.darwin-10.9-amd64.tgz">cockroach-v24.2.0-beta.1.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-beta.1.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-beta.1.darwin-10.9-amd64.tgz">cockroach-sql-v24.2.0-beta.1.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-beta.1.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-beta.1.darwin-11.0-arm64.tgz">cockroach-v24.2.0-beta.1.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-beta.1.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-beta.1.darwin-11.0-arm64.tgz">cockroach-sql-v24.2.0-beta.1.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-beta.1.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>Windows<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-beta.1.windows-6.2-amd64.zip">cockroach-v24.2.0-beta.1.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-beta.1.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-beta.1.windows-6.2-amd64.zip">cockroach-sql-v24.2.0-beta.1.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-beta.1.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td></tr></tbody></table>

### Docker image

[Multi-platform images](https://docs.docker.com/build/building/multi-platform) 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:

```shell theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
docker pull cockroachdb/cockroach-unstable:v24.2.0-beta.1
```

### Security updates

* Added support for a custom certificate authority (CA) to verify certificates from the JWT issuer domain, which hosts the JSON Web Key Set (JWKS) configuration that is fetched to validate JWT, along with the new <InternalLink version="v24.2" path="cluster-settings">cluster setting</InternalLink> `server.jwt_authentication.issuer_custom_ca` to set the custom root CA.

### General changes

* <InternalLink version="v24.2" path="show-jobs">Job</InternalLink> status changes now log events to the <InternalLink version="v24.2" path="logging#logging-channels">OPS channel</InternalLink>, to indicate the previous and new status of the job.

### Enterprise edition changes

* The new <InternalLink version="v24.2" path="cluster-settings">cluster setting</InternalLink> `server.oidc_authentication.client.timeout` allows configuration of the HTTP client timeout for external calls made during <InternalLink version="v24.2" path="sso-db-console">OIDC authentication</InternalLink>. The default timeout is 30 seconds.
* The <InternalLink version="v24.2" path="changefeed-sinks">Kafka sink for changefeeds</InternalLink> now supports authentication using AWS IAM roles, providing a more secure method for connecting to AWS Managed Streaming for Apache Kafka (MSK) clusters.

### SQL language changes

* Added [pgvector](https://github.com/pgvector/pgvector) encoding, decoding, and operators, without index acceleration.
* Added support for generic query plans to the <InternalLink version="v24.2" path="cost-based-optimizer">optimizer</InternalLink> to reduce the computational burden of query optimization by caching and reusing plans in later executions of the same statement. "Custom" query plans are optimized on every execution, while "generic" plans are optimized once and reused on future executions. Generic query plans are beneficial in cases where query optimization contributes significant overhead to the total cost of executing a query.
  * When the <InternalLink version="v24.2" path="session-variables">session setting</InternalLink> `plan_cache_mode` is set to `auto`, the system automatically determines whether to use custom or generic query plans for the execution of a prepared statement.
  * When the <InternalLink version="v24.2" path="session-variables">session setting</InternalLink> `plan_cache_mode` is set to `force_generic_plan`, prepared statements will reuse optimized query plans without re-optimization, as long as the plans do not become stale due to schema changes or new table statistics.
  * The setting is used during `EXECUTE` commands and the `EXPLAIN ANALYZE` output includes a `plan type` field that displays: `generic, re-optimized` if the plan is optimized for the current execution, `generic, reused` if the plan is reused without re-optimization, or `custom` for other plans.
* The output of <InternalLink version="v24.2" path="show-grants">`SHOW GRANTS`</InternalLink> for a role now includes privileges inherited from the `public` role, which is a <InternalLink version="v24.2" path="security-reference/authorization#default-roles">default role</InternalLink> defined on every cluster.

### Operational changes

* For the <InternalLink version="v24.2" path="logging#telemetry">TELEMETRY channel</InternalLink>, TCL `sampled_query` events will now be sampled at the rate specified by the setting `sql.telemetry.query_sampling.max_event_frequency`, which is already used to limit the rate of sampling DML statements.
* The `encode-uri` command now supports the `--certs-dir` option as an alternative to passing individual certificate paths.
* Changed the metric type of runtime metrics that are semantically counters from `GAUGE` to `COUNTER`.
  * `storage.disk.io.time`
  * `storage.disk.read.bytes`
  * `storage.disk.read.count`
  * `storage.disk.read.time`
  * `storage.disk.weightedio.time`
  * `storage.disk.write.bytes`
  * `storage.disk.write.count`
  * `storage.disk.write.time`
  * `sys.cgocalls`
  * `sys.cpu.now.ns`
  * `sys.cpu.sys.ns`
  * `sys.cpu.user.ns`
  * `sys.gc.assist.ns`
  * `sys.gc.count`
  * `sys.gc.pause.ns`
  * `sys.go.heap.allocbytes`
  * `sys.host.disk.io.time`
  * `sys.host.disk.read.bytes`
  * `sys.host.disk.read.count`
  * `sys.host.disk.read.time`
  * `sys.host.disk.weightedio.time`
  * `sys.host.disk.write.bytes`
  * `sys.host.disk.write.count`
  * `sys.host.disk.write.time`
  * `sys.host.net.recv.bytes`
  * `sys.host.net.recv.drop`
  * `sys.host.net.recv.err`
  * `sys.host.net.recv.packets`
  * `sys.host.net.send.bytes`
  * `sys.host.net.send.drop`
  * `sys.host.net.send.err`
  * `sys.host.net.send.packets`
  * `sys.uptime`

### Command-line changes

* The new `--shutdown` flag of the <InternalLink version="v24.2" path="cockroach-node#subcommands">`cockroach node drain`</InternalLink> command shuts down the node automatically after draining successfully completes.

### Bug fixes

* Fixed a bug on the node list of the <InternalLink version="v24.2" path="ui-cluster-overview-page">Cluster overview</InternalLink> page where the icons present on certain tables to expand and collapse expandable rows did not work.
* Fixed a bug that prevented fast path inserts into regional by row tables with uniqueness constraints under <InternalLink version="v24.2" path="read-committed">`READ COMMITTED`</InternalLink> isolation.
* Fixed a bug where the `sql.stats.discarded.current` <InternalLink version="v24.2" path="metrics">metric</InternalLink> omitted discarded statements from its count. Both discarded statements and transactions are included in the metric.
* Fixed a bug where the <InternalLink version="v24.2" path="ui-databases-page">Database page</InternalLink> could crash if range information is not available.
* Fixed a bug that caused <InternalLink version="v24.2" path="show-jobs">background jobs</InternalLink> to incorrectly respect a statement timeout.
* Fixed a bug when <InternalLink version="v24.2" path="create-statistics">creating partial statistics</InternalLink> with the <InternalLink version="v24.2" path="sql-grammar">USING EXTREMES option</InternalLink> (disabled by default) where the merged statistic could contain inaccurate `DISTINCT` counts.
* Fixed bug where a <InternalLink version="v24.2" path="configure-replication-zones">replication zone configuration</InternalLink> for a partition key could disappear during truncation.

### Performance improvements

* The efficiency of merging partial statistics into existing <InternalLink version="v24.2" path="create-statistics">statistics</InternalLink> has been improved.
* The <InternalLink version="v24.2" path="cost-based-optimizer">optimizer</InternalLink> now generates more efficient plans for queries with clauses like `ORDER BY col ASC NULLS LAST` and `ORDER BY col DESC NULLS FIRST` when `col` is guaranteed to not be `NULL`.

### Contributors

This release includes 96 merged PRs by 49 authors.

## v24.2.0-alpha.2

Release Date: July 10, 2024

### Downloads

<Danger>
  CockroachDB v24.2.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.
</Danger>

<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.
</Note>

<table><thead><tr><th>Operating System</th><th>Architecture</th><th>Full executable</th><th>SQL-only executable</th></tr></thead><tbody><tr><td rowspan="2">Linux</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-alpha.2.linux-amd64.tgz">cockroach-v24.2.0-alpha.2.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-alpha.2.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-alpha.2.linux-amd64.tgz">cockroach-sql-v24.2.0-alpha.2.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-alpha.2.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-alpha.2.linux-arm64.tgz">cockroach-v24.2.0-alpha.2.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-alpha.2.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-alpha.2.linux-arm64.tgz">cockroach-sql-v24.2.0-alpha.2.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-alpha.2.linux-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td rowspan="2">Mac<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-alpha.2.darwin-10.9-amd64.tgz">cockroach-v24.2.0-alpha.2.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-alpha.2.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-alpha.2.darwin-10.9-amd64.tgz">cockroach-sql-v24.2.0-alpha.2.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-alpha.2.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-alpha.2.darwin-11.0-arm64.tgz">cockroach-v24.2.0-alpha.2.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-alpha.2.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-alpha.2.darwin-11.0-arm64.tgz">cockroach-sql-v24.2.0-alpha.2.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-alpha.2.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>Windows<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-alpha.2.windows-6.2-amd64.zip">cockroach-v24.2.0-alpha.2.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-alpha.2.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-alpha.2.windows-6.2-amd64.zip">cockroach-sql-v24.2.0-alpha.2.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-alpha.2.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td></tr></tbody></table>

### Docker image

[Multi-platform images](https://docs.docker.com/build/building/multi-platform) 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:

```shell theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
docker pull cockroachdb/cockroach-unstable:v24.2.0-alpha.2
```

### General changes

* The compression option `none` was added to allow for the disabling of SSTable compression. This option can be used with any of the three existing cluster settings that control SSTable compression:
  * <InternalLink version="v24.2" path="cluster-settings">`storage.sstable.compression_algorithm`</InternalLink>
  * <InternalLink version="v24.2" path="cluster-settings">`storage.sstable.compression_algorithm_backup_storage`</InternalLink>
  * <InternalLink version="v24.2" path="cluster-settings">`storage.sstable.compression_algorithm_backup_transport`</InternalLink>

### SQL language changes

* Added the <InternalLink version="v24.2" path="cluster-settings">`sql.auth.grant_option_inheritance.enabled` cluster setting</InternalLink>. The default value is `true`, which maintains consistency with CockroachDB's previous behavior: users granted a privilege with <InternalLink version="v24.2" path="grant">`WITH GRANT OPTION`</InternalLink> can in turn grant that privilege to others. When `sql.auth.grant_option_inheritance.enabled` is set to `false`, the `GRANT OPTION` is not inherited through role membership, thereby preventing descendant roles from granting the privilege to others. However, the privilege itself continues to be inherited through role membership.
* The <InternalLink version="v24.2" path="pg-catalog">`pg_catalog.pg_attribute`</InternalLink> table now has a column named `attishidden`, which indicates if the table column or attribute is <InternalLink version="v24.2" path="create-table#not-visible-property">`NOT VISIBLE`</InternalLink>.

### Bug fixes

* Fixed a bug that could cause internal errors when a <InternalLink version="v24.2" path="user-defined-functions">routine</InternalLink> had polymorphic parameters or a polymorphic return type or both. The bug has existed since v22.2 when <InternalLink version="v24.2" path="user-defined-functions">user-defined functions (UDFs)</InternalLink> were introduced.
* In <InternalLink version="v24.2" path="show-create">`SHOW CREATE`</InternalLink> output, the name of an <InternalLink version="v24.2" path="enum">enum type</InternalLink> is now formatted as a two-part name ( `schema.enum_type` ) instead of a three-part name ( `database.schema.enum_type` ). This change makes it easier to apply the output with enum types to other databases.
* When <InternalLink version="v24.2" path="alter-table#alter-column">altering the data type of columns</InternalLink> with the <InternalLink version="v24.2" path="create-table#not-visible-property">hidden attribute (`NOT VISIBLE`)</InternalLink>, the alteration now preserves the hidden attribute in the column. Additionally, type alterations for columns with <InternalLink version="v24.2" path="create-table#on-update-expressions">`ON UPDATE`</InternalLink> expressions or <InternalLink version="v24.2" path="default-value">`DEFAULT`</InternalLink> expressions are now allowed.
* Fixed a bug where a <InternalLink version="v24.2" path="user-defined-functions">user-defined function (UDF)</InternalLink> that shared a name with a <InternalLink version="v24.2" path="functions-and-operators#built-in-functions">built-in function</InternalLink> would not be resolved, even if the UDF had higher precedence according to the <InternalLink version="v24.2" path="sql-name-resolution#search-path">`search_path`</InternalLink> variable.
* Expressions of type [`BYTES[]`](https://www.cockroachlabs.com/docs/v24.2/bytes) are now correctly formatted in <InternalLink version="v24.2" path="pg-catalog">`pg_catalog`</InternalLink> tables.
* Fixed a bug that could cause spurious user permission errors when multiple databases shared a common schema with a routine referencing a table. The bug has existed since v22.2 when <InternalLink version="v24.2" path="user-defined-functions">user-defined functions (UDFs)</InternalLink> were introduced.
* <InternalLink version="v24.2" path="create-table#not-visible-property">Hidden columns</InternalLink> are now included in the `indkey` column of <InternalLink version="v24.2" path="pg-catalog">`pg_catalog.pg_index`</InternalLink>.
* Fixed a bug when inputting `public` role as user name for <InternalLink version="v24.2" path="functions-and-operators">built-in compatibility functions</InternalLink>, such as `has_database_privilege` and `has_schema_privilege`.
* Fixed a bug when <InternalLink version="v24.2" path="restore">restoring</InternalLink> a database with a <InternalLink version="v24.2" path="create-type#create-a-composite-data-type">composite type</InternalLink>.
* Fixed a bug when <InternalLink version="v24.2" path="create-statistics">creating partial statistics</InternalLink> with the <InternalLink version="v24.2" path="sql-grammar">`USING EXTREMES` option</InternalLink> (which is disabled by default) where it would occasionally use incorrect extreme values and collect no stats. This bug occurred when outer buckets were added to the previous histogram to account for extra distinct count.
* In the <InternalLink version="v24.2" path="ui-overview-dashboard#events-panel">DB Console event log</InternalLink>, <InternalLink version="v24.2" path="alter-role">`ALTER ROLE`</InternalLink> events now display correctly even when no <InternalLink version="v24.2" path="alter-role#role-options">role options</InternalLink> are included in the `ALTER ROLE` statement.
* Fixed a bug where <InternalLink version="v24.2" path="alter-database#drop-region">`ALTER DATABASE... DROP REGION`</InternalLink> could fail if any tables under the given database have <InternalLink version="v24.2" path="expression-indexes">indexes on expressions</InternalLink>.

### Performance improvements

* Starting a `cockroach` process will no longer flush <InternalLink version="v24.2" path="configure-logs#log-buffering-for-network-sinks">buffered logs</InternalLink> to <InternalLink version="v24.2" path="configure-logs#configure-log-sinks">configured logging sinks</InternalLink> unless the process is running under `systemd`, where `cockroach` runs with the `NOTIFY_SOCKET` environment variable.

### Contributors

This release includes 130 merged PRs by 42 authors.

## v24.2.0-alpha.1

Release Date: July 1, 2024

### Downloads

<Danger>
  CockroachDB v24.2.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.
</Danger>

<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.
</Note>

<table><thead><tr><th>Operating System</th><th>Architecture</th><th>Full executable</th><th>SQL-only executable</th></tr></thead><tbody><tr><td rowspan="2">Linux</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-alpha.1.linux-amd64.tgz">cockroach-v24.2.0-alpha.1.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-alpha.1.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-alpha.1.linux-amd64.tgz">cockroach-sql-v24.2.0-alpha.1.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-alpha.1.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-alpha.1.linux-arm64.tgz">cockroach-v24.2.0-alpha.1.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-alpha.1.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-alpha.1.linux-arm64.tgz">cockroach-sql-v24.2.0-alpha.1.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-alpha.1.linux-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td rowspan="2">Mac<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-alpha.1.darwin-10.9-amd64.tgz">cockroach-v24.2.0-alpha.1.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-alpha.1.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-alpha.1.darwin-10.9-amd64.tgz">cockroach-sql-v24.2.0-alpha.1.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-alpha.1.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-alpha.1.darwin-11.0-arm64.tgz">cockroach-v24.2.0-alpha.1.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-alpha.1.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-alpha.1.darwin-11.0-arm64.tgz">cockroach-sql-v24.2.0-alpha.1.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-alpha.1.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>Windows<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-alpha.1.windows-6.2-amd64.zip">cockroach-v24.2.0-alpha.1.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.2.0-alpha.1.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-alpha.1.windows-6.2-amd64.zip">cockroach-sql-v24.2.0-alpha.1.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.2.0-alpha.1.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td></tr></tbody></table>

### Docker image

[Multi-platform images](https://docs.docker.com/build/building/multi-platform) 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:

```shell theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
docker pull cockroachdb/cockroach-unstable:v24.2.0-alpha.1
```

### General changes

* The following <InternalLink version="v24.2" path="metrics">metrics</InternalLink> were added for observability into the source of <InternalLink version="v24.2" path="common-issues-to-monitor">disk writes</InternalLink>:
  * `storage.category-pebble-wal.bytes-written`
  * `storage.category-pebble-compaction.bytes-written`
  * `storage.category-pebble-ingestion.bytes-written`
  * `storage.category-pebble-memtable-flush.bytes-written`
  * `storage.category-raft-snapshot.bytes-written`
  * `storage.category-encryption-registry.bytes-written`
  * `storage.category-crdb-log.bytes-written`
  * `storage.category-sql-row-spill.bytes-written`
  * `storage.category-sql-col-spill.bytes-written`
  * `storage.category-unspecified.bytes-written`
* The `storage.value_blocks.enabled` <InternalLink version="v24.2" path="cluster-settings">cluster setting</InternalLink> has been removed; value blocks are always enabled.
* The following <InternalLink version="v24.2" path="metrics">metrics</InternalLink> were added for improved observability into <InternalLink version="v24.2" path="common-issues-to-monitor">disk bandwidth</InternalLink>:
  * `storage.disk.read-max.bytespersecond`
  * `storage.disk.write-max.bytespersecond`
* Added two new <InternalLink version="v24.2" path="cluster-settings">cluster settings</InternalLink>, `storage.sstable.compression_algorithm_backup_storage` and `storage.sstable.compression_algorithm_backup_transport`, which in addition to the existing cluster setting `storage.sstable.compression_algorithm`, can be used to alter the compression algorithm used for various types of <InternalLink version="v24.2" path="architecture/storage-layer#ssts">SSTs</InternalLink>.

### Enterprise edition changes

* `SHOW CHANGEFEED JOB`, <InternalLink version="v24.2" path="show-jobs#show-changefeed-jobs">`SHOW CHANGEFEED JOBS`</InternalLink>, and <InternalLink version="v24.2" path="show-jobs">`SHOW JOBS`</InternalLink> no longer expose user sensitive information like `client_key`.
* Added the new option <InternalLink version="v24.2" path="create-changefeed">`encode_json_value_null_as_object`</InternalLink> to JSON-formatted <InternalLink version="v24.2" path="change-data-capture-overview">changefeeds</InternalLink> that outputs `'null'::jsonb` as `{"__crdb_json_null__": true}` instead of `null`, to disambiguate between SQL-null and JSON-null. With this option enabled, if the literal value `{"__crdb_json_null__": true}` is present in a JSON value, it will have the same representation as JSON-null with this option enabled. If such a value is encountered in a changefeed, a (rate-limited) warning will be printed to the <InternalLink version="v24.2" path="logging">`DEV` channel</InternalLink>.
* Added an error message for <InternalLink version="v24.2" path="change-data-capture-overview">changefeed</InternalLink> options and parameters that are not supported by the <InternalLink version="v24.2" path="changefeed-sinks#apache-pulsar">Apache Pulsar sink</InternalLink>.
* <InternalLink version="v24.2" path="create-schedule-for-changefeed">Scheduled changefeeds</InternalLink> now pause after being <InternalLink version="v24.2" path="restore">restored</InternalLink> onto a different cluster, and after completion of <InternalLink version="v24.2" path="physical-cluster-replication-overview">physical cluster replication</InternalLink> to avoid inadvertent concurrent execution of the same schedule on multiple clusters.
* The `DEBUG_PAUSE_ON` option has been removed and replaced with the `restore.restore_after_failure` <InternalLink version="v24.2" path="pause-job">pause</InternalLink> point to match other pause points used throughout CockroachDB. You can set this pause point by running: `SET CLUSTER SETTING jobs.debug.pausepoints = 'restore.after_restore_failure'`.

### SQL language changes

* Default schema privilege changes will now be reflected and can be monitored in the <InternalLink version="v24.2" path="pg-catalog">`pg_default_acl`</InternalLink> table.
* The schema of the <InternalLink version="v24.2" path="pg-catalog">`pg_catalog.pg_proc`</InternalLink> virtual table now matches exactly that of PostgreSQL versions 14–16. The following changes are applied:
  * `proisagg` and `proiswindow` columns are removed (done in v11).
  * `protransform` column is removed (done in v12).
  * `prosqlbody` column is added (done in v14).
  * `prosupport` and `prokind` columns are moved into their correct spot (these were incorrectly present at the end of the columns list).
* Added <InternalLink version="v24.2" path="create-external-connection">`SHOW EXTERNAL CONNECTIONS`</InternalLink> and `SHOW EXTERNAL CONNECTION <connection name>`. These queries display redacted connection URIs and other useful information, such as the connection type. Access to these queries is restricted to the owner of the connection or users with `USAGE` privilege. `admin` or `root` users will have unrestricted access to all connections.
* Using the <InternalLink version="v24.2" path="create-statistics">`CREATE STATISTICS`</InternalLink> query without the <InternalLink version="v24.2" path="as-of-system-time">`AS OF SYSTEM TIME`</InternalLink> option could contend with concurrent transactions and cost performance. Running `CREATE STATISTICS` without specifying `AS OF SYSTEM TIME` now uses a default of `-1us`.
* The `nodes` field of the <InternalLink version="v24.2" path="explain-analyze">`EXPLAIN ANALYZE`</InternalLink> output has been renamed to `sql nodes` to clarify that this field describes SQL processing and it does not include any information about KV nodes that might have participated in the query execution.
* <InternalLink version="v24.2" path="explain-analyze">`EXPLAIN ANALYZE`</InternalLink> output now has a new field `KV nodes` that includes all KV nodes that were used to serve read requests by a particular SQL operator.
* Fixed the `Regions` field in the <InternalLink version="v24.2" path="explain-analyze">`EXPLAIN ANALYZE`</InternalLink> output to include regions of KV nodes. Previously, only regions of SQL nodes involved in query processing were included.
* Allow <InternalLink version="v24.2" path="foreign-key">foreign keys</InternalLink> to be created over stored <InternalLink version="v24.2" path="computed-columns">computed columns</InternalLink>. However, most `ON UPDATE` and `ON DELETE` options for foreign key constraints are not allowed with computed columns. Only `ON UPDATE (NO ACTION|RESTRICT)` and `ON DELETE (NO ACTION|RESTRICT|CASCADE)` are supported.
* <InternalLink version="v24.2" path="explain-analyze">`EXPLAIN ANALYZE`</InternalLink> output now has a new field `used follower read` to SQL operators whenever their reads were served by the follower replicas. Previously, this information was only available in the trace.
* The new attribute `historical: AS OF SYSTEM TIME...` is now included in <InternalLink version="v24.2" path="explain-analyze">`EXPLAIN ANALYZE`</InternalLink> output whenever the query performs <InternalLink version="v24.2" path="as-of-system-time">historical reads</InternalLink>.
* <InternalLink version="v24.2" path="explain-analyze">`EXPLAIN ANALYZE`</InternalLink> statements are now supported when executed via UI SQL shell.
* Histograms are no longer constructed using a default sample size of `10k`. Samples are now dynamically sized based on table size unless the sample count has been set in the table or <InternalLink version="v24.2" path="cluster-settings">cluster settings</InternalLink>.
* The <InternalLink version="v24.2" path="cost-based-optimizer">optimizer</InternalLink> will now generate plans utilizing partial indexes with `IS NOT NULL` predicates in more cases.
* The <InternalLink version="v24.2" path="show-types">`SHOW TYPES`</InternalLink> statement now includes user-defined composite types. It omitted those types ever since composite types were added in v23.1.
* Added the <InternalLink version="v24.2" path="comment-on">`COMMENT ON TYPE`</InternalLink> statement for implicit transactions.

### Operational changes

* Added a distinction between <InternalLink version="v24.2" path="changefeed-messages">row updates</InternalLink> ( `row` ) and <InternalLink version="v24.2" path="changefeed-messages#resolved-messages">resolved timestamp</InternalLink> ( `resolved` ) messages in some changefeed metrics.
* Modified the default Grafana dashboards to include a breakdown by <InternalLink version="v24.2" path="changefeed-messages">message</InternalLink> type for the `changefeed_emitted_rows` <InternalLink version="v24.2" path="monitor-and-debug-changefeeds">metric</InternalLink>.
* Updated the generated doc descriptions for system visible <InternalLink version="v24.2" path="cluster-settings">cluster settings</InternalLink> to reflect these are read-only for CockroachDB Serverless and read-write for the other deployments.
* Added the <InternalLink version="v24.2" path="cluster-settings">cluster setting</InternalLink> `debug.zip.redact_addresses.enabled` that allows the user to enable or disable redaction of fields like `hostname` and IP addresses.
* Improved <InternalLink version="v24.2" path="ui-storage-dashboard#capacity-metrics">disk usage metric</InternalLink> reporting over volumes that dynamically change their size over the life of the `cockroach` process.
* `crdb_internal.cluster_execution_insights.txt` and `crdb_internal.cluster_txn_execution_insights.txt` have been removed from the <InternalLink version="v24.2" path="cockroach-debug-zip">debug zip</InternalLink>. These files contained cluster-wide insights for statements and transactions. Users can still rely on the <InternalLink version="v24.2" path="cockroach-debug-zip#files">per-node execution</InternalLink> insights in `crdb_internal.node_execution_insights.txt` and `crdb_internal.node_txn_execution_insights.txt`.
* Removed the stuck rangefeed cancel feature and its related <InternalLink version="v24.2" path="cluster-settings">cluster setting</InternalLink> `kv.rangefeed.range_stuck_threshold`, because it was only available in <InternalLink version="v24.2" path="advanced-changefeed-configuration#mux-rangefeeds">non-mux rangefeeds</InternalLink>. Previously, the stuck rangefeed cancel feature was introduced to restart single rangefeeds automatically if they had not received KV updates for some time.
* Fixed a bug where collection of debug information for very long-running <InternalLink version="v24.2" path="show-jobs">jobs</InternalLink> could use excessive space in the `job_info` system table and/or cause some interactions with the jobs system to become slow.
* All system tables are now visible in application <InternalLink version="v24.2" path="cluster-virtualization-overview">virtual clusters</InternalLink> that were created before v24.1.

### DB Console changes

* The **Goroutine Scheduling Latency** graph has been added to the <InternalLink version="v24.2" path="ui-runtime-dashboard">**Runtime** dasboard</InternalLink>.
* Updated the time format to use a `.` (dot) as separation between seconds and milliseconds, which affects many pages in the <InternalLink version="v24.2" path="ui-overview">DB Console</InternalLink>.
* The <InternalLink version="v24.2" path="ui-storage-dashboard">**Storage** dashboard</InternalLink> now contains a graph categorizing disk writes that contribute to `sys.host.disk.write.bytes` according to the source of the write (WAL, compactions, SSTable ingestion, memtable flushes, raft snapshots, encryption registry, logs, SQL columnar spill, or SQL row spill).
* The favicon now renders properly for the <InternalLink version="v24.2" path="ui-overview">DB Console</InternalLink> along with other image files.
* The color of **Unavailable Ranges** in the <InternalLink version="v24.2" path="ui-replication-dashboard#summary-panel">**Summary** panel</InternalLink> of the <InternalLink version="v24.2" path="ui-replication-dashboard">**Replication** dashboard</InternalLink> is now red when nonzero.
* Removed the `$` sign on the <InternalLink version="v24.2" path="ui-databases-page">Databases</InternalLink> and <InternalLink version="v24.2" path="ui-jobs-page">Jobs</InternalLink> pages in the <InternalLink version="v24.2" path="ui-overview">DB Console</InternalLink>.
* Added two graphs to the <InternalLink version="v24.2" path="ui-storage-dashboard">**Storage** dashboard</InternalLink> that display count and size of L0 SSTables in <InternalLink version="v24.2" path="architecture/storage-layer#pebble">Pebble</InternalLink>. This provides increased visibility into L0 compaction issues.
* Removed the p95 metrics from the tooltip on the <InternalLink version="v24.2" path="ui-ttl-dashboard#job-latency">**Job Latency**</InternalLink> graph of the <InternalLink version="v24.2" path="ui-ttl-dashboard">**TTL** dashboard</InternalLink>, because there are no p95 values computed for any of the metrics.
* Updated the <InternalLink version="v24.2" path="ui-storage-dashboard">**Storage** dashboard</InternalLink> graphs to show most metrics on a <InternalLink version="v24.2" path="architecture/storage-layer">per-store</InternalLink> basis when viewing a single node's metrics. This provides increased visibility into issues caused by specific stores on each node.

### Bug fixes

* Fixed a crash introduced in v23.2.5 and v24.1.0-beta.2 that could occur when planning <InternalLink version="v24.2" path="cost-based-optimizer#table-statistics">statistics collection</InternalLink> on a table with a <InternalLink version="v24.2" path="computed-columns">virtual computed column</InternalLink> using a user-defined type when the newly introduced <InternalLink version="v24.2" path="cluster-settings">cluster setting</InternalLink> `sql.stats.virtual_computed_columns.enabled` is set to `true`. This setting was introduced in v23.2.4 and v24.1.0-alpha.1.
* Fixed handling in the <InternalLink version="v24.2" path="online-schema-changes">declarative schema changer</InternalLink> when columns are included in the <InternalLink version="v24.2" path="create-index#store-columns">`STORING()`</InternalLink> clause of <InternalLink version="v24.2" path="create-index">`CREATE INDEX`</InternalLink>. It now checks if the column is <InternalLink version="v24.2" path="computed-columns">virtual</InternalLink> beforehand, and properly detects when a column is already handled by an existing index when the column name has UTF-8 characters.
* Fixed an issue where <InternalLink version="v24.2" path="alter-table#add-column">adding a column</InternalLink> with a default value of an empty array would not succeed.
* <InternalLink version="v24.2" path="alter-table">`ALTER TABLE... ADD CONSTRAINT UNIQUE`</InternalLink> will now fail with a well-formed error message and code `42601` if a statement tries to add a <InternalLink version="v24.2" path="unique">`UNIQUE` constraint</InternalLink> on an expression.
* Resolved a log message that read: `expiration of liveness record... is not greater than expiration of the previous lease... after liveness heartbeat`. This message is no longer possible.
* Fixed a bug in v24.1, v23.2, and v23.1 where using the `changefeed.aggregator.flush_jitter` <InternalLink version="v24.2" path="cluster-settings">cluster setting</InternalLink> with <InternalLink version="v24.2" path="create-changefeed">`min_checkpoint_frequency`</InternalLink> set to `0` could cause panics.
* Fixed a bug where the <InternalLink version="v24.2" path="sql-name-resolution#naming-hierarchy">`public` schema</InternalLink> would be created with the wrong owner. Previously, the <InternalLink version="v24.2" path="security-reference/authorization#admin-role">`admin` role</InternalLink> would own the `public` schema. Now the database owner is also the owner of the `public` schema. The ownership can be altered after the schema is created.
* Previously, CockroachDB would hit an internal error when evaluating inserts into <InternalLink version="v24.2" path="table-localities#regional-by-row-tables">`REGIONAL BY ROW`</InternalLink> tables where the source is a <InternalLink version="v24.2" path="insert#insert-default-values">`VALUES`</InternalLink> clause with a single row and at least one boolean expression. The bug was introduced in v23.2.0 and is now fixed.
* Fixed a bug in <InternalLink version="v24.2" path="logging">logging</InternalLink> where an error code was misreported for canceled queries. This bug affected the <InternalLink version="v24.2" path="logging#sql_perf">`SQL_PERF`</InternalLink> (slow query logs) and <InternalLink version="v24.2" path="logging#sql_exec">`SQL_EXEC`</InternalLink> (sql exec logs) logging channels.
* Fixed a bug in which constant `LIKE` patterns containing certain sequences of backslashes did not become constrained scans. This bug has been present since v21.1.13 when support for building constrained scans from `LIKE` patterns containing backslashes was added.
* Fixed a bug introduced in v22.1 where <InternalLink version="v24.2" path="cockroach-sql-binary">`cockroach-sql`</InternalLink> does not recognize the <InternalLink version="v24.2" path="cockroach-sql-binary#flags">`--format`</InternalLink> flag.
* Fixed a bug where <InternalLink version="v24.2" path="create-table">`CREATE TABLE`</InternalLink> with <InternalLink version="v24.2" path="expression-indexes">index expressions</InternalLink> could hit undefined column errors on <InternalLink version="v24.2" path="transactions#transaction-retries">transaction retries</InternalLink>.
* Fixed a bug where some DDL and administrative statements used within a <InternalLink version="v24.2" path="common-table-expressions">common table expression</InternalLink> would fail with an `unrecognized relational expression type` internal error.
* Fixed a bug in <InternalLink version="v24.2" path="cockroach-debug-tsdump">`cockroach debug tsdump`</InternalLink> where the command fails when a custom SQL port is used and the <InternalLink version="v24.2" path="cockroach-debug-tsdump#flags">`--format=raw`</InternalLink> flag is provided.
* Attempts to alter the data type of a column used in a <InternalLink version="v24.2" path="computed-columns">computed column</InternalLink> expression are now blocked.
* Fixed the statistics estimation code in the <InternalLink version="v24.2" path="cost-based-optimizer">optimizer</InternalLink> so it does not use the empty histograms produced if <InternalLink version="v24.2" path="cost-based-optimizer#control-histogram-collection">histogram collection</InternalLink> has been disabled during stats collection due to excessive memory utilization. Now the optimizer will rely on distinct counts instead of the empty histograms and should produce better plans as a result. This bug has existed since CockroachDB v22.1.

### Performance improvements

* More efficient <InternalLink version="v24.2" path="cost-based-optimizer">query plans</InternalLink> are now generated for queries with <InternalLink version="v24.2" path="trigram-indexes#how-do-trigram-indexes-work">text similarity filters</InternalLink>, e.g., `text_col % 'foobar'`. These plans are generated if the `optimizer_use_trigram_similarity_optimization` <InternalLink version="v24.2" path="session-variables">session setting</InternalLink> is enabled, which it is by default. This setting is disabled by default in previous versions.
* <InternalLink version="v24.2" path="online-schema-changes">Schema changes</InternalLink> that cause a data backfill, such as adding a non-nullable column or changing the primary key, will now split and scatter the temporary indexes used to perform the change. This reduces the chance of causing a write hotspot that can slow down foreground traffic.
* Multiple or large numbers of <InternalLink version="v24.2" path="show-grants">grants</InternalLink> on tables and types within one <InternalLink version="v24.2" path="transactions">transaction</InternalLink> now run faster.
* <InternalLink version="v24.2" path="architecture/transaction-layer#writes-and-reads-phase-1">Lock operations</InternalLink> are now removed from <InternalLink version="v24.2" path="cost-based-optimizer">query plans</InternalLink> when the optimizer can prove that no rows would be locked.
* Some privilege checks when scanning the <InternalLink version="v24.2" path="crdb-internal">`crdb_internal.system_jobs`</InternalLink> internal table now happen once before the scan, instead of once for each row. This will improve performance for queries that read from `crdb_internal.system_jobs`.
* Improved the initial range descriptor scan on startup. <InternalLink version="v24.2" path="cockroach-start">Node startup</InternalLink> should now be faster on larger stores.
* Previously, concurrent transactions that constructed large write batches could cause <InternalLink version="v24.2" path="ui-hot-ranges-page">hotspots</InternalLink>. This was because the <InternalLink version="v24.2" path="architecture/transaction-layer#transaction-records">transaction record</InternalLink> for all <InternalLink version="v24.2" path="architecture/reads-and-writes-overview#range">ranges</InternalLink> would coalesce on a single range, which would then cause this range's <InternalLink version="v24.2" path="architecture/reads-and-writes-overview#leaseholder">leaseholder</InternalLink> to perform all intent resolution work. This is fixed by distributing transaction records randomly across the ranges the write batch touches. In turn, hotspots are prevented.

### Contributors

This release includes 1234 merged PRs by 97 authors.
