> ## 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.1

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.1 <InternalLink path="release-support-policy#support-types">(LTS)</InternalLink> is a required <InternalLink path="index#major-versions">Regular release</InternalLink>. This page contains a complete list of features and changes in v24.1.

* For a summary of the most significant changes in v24.1, refer to [Feature highlights](#feature-highlights).
* Before <InternalLink version="v24.1" path="upgrade-cockroach-version">upgrading to CockroachDB v24.1</InternalLink>, review the [backward-incompatible changes](#v24-1-0-backward-incompatible-changes), including [key cluster setting changes](#v24-1-0-cluster-settings) and [deprecations](#v24-1-0-deprecations); as well as newly identified [known limtiations](#v24-1-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.1.31

Release Date: June 26, 2026

### 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.1.31.linux-amd64.tgz">cockroach-v24.1.31.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.31.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.31.linux-amd64.tgz">cockroach-sql-v24.1.31.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.31.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.31.linux-arm64.tgz">cockroach-v24.1.31.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.31.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.31.linux-arm64.tgz">cockroach-sql-v24.1.31.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.31.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.1.31.darwin-10.9-amd64.tgz">cockroach-v24.1.31.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.31.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.31.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.31.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.31.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.31.darwin-11.0-arm64.tgz">cockroach-v24.1.31.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.31.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.31.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.31.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.31.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.1.31.windows-6.2-amd64.zip">cockroach-v24.1.31.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.31.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.31.windows-6.2-amd64.zip">cockroach-sql-v24.1.31.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.31.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.1.31
```

### Security updates

* Security: Fixed an issue where a tenant-scoped client certificate could bypass tenant-scope checks and gain cluster-wide RPC access if its subject distinguished name (DN) matched the configured root or node DN.

## v24.1.30

Release Date: June 11, 2026

### 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.1.30.linux-amd64.tgz">cockroach-v24.1.30.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.30.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.30.linux-amd64.tgz">cockroach-sql-v24.1.30.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.30.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.30.linux-arm64.tgz">cockroach-v24.1.30.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.30.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.30.linux-arm64.tgz">cockroach-sql-v24.1.30.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.30.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.1.30.darwin-10.9-amd64.tgz">cockroach-v24.1.30.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.30.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.30.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.30.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.30.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.30.darwin-11.0-arm64.tgz">cockroach-v24.1.30.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.30.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.30.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.30.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.30.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.1.30.windows-6.2-amd64.zip">cockroach-v24.1.30.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.30.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.30.windows-6.2-amd64.zip">cockroach-sql-v24.1.30.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.30.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.1.30
```

### Bug fixes

* Fixed a bug where the view owner's privileges on underlying tables were not checked when selecting from a view. A view would continue to work even after the owner lost access to the underlying tables. To enforce privilege checks on underlying tables, set the `sql.auth.skip_underlying_view_privilege_checks.enabled` cluster setting to `false`. This setting defaults to `true` to prevent backward-incompatible behavior.

### Build changes

* Replaces bors with Trunk merge queue for better performance and reliability. Configuration-only change with no runtime impact - maintains same safety checks while improving CI workflow.

## v24.1.29

Release Date: May 12, 2026

### 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.1.29.linux-amd64.tgz">cockroach-v24.1.29.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.29.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.29.linux-amd64.tgz">cockroach-sql-v24.1.29.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.29.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.29.linux-arm64.tgz">cockroach-v24.1.29.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.29.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.29.linux-arm64.tgz">cockroach-sql-v24.1.29.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.29.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.1.29.darwin-10.9-amd64.tgz">cockroach-v24.1.29.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.29.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.29.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.29.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.29.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.29.darwin-11.0-arm64.tgz">cockroach-v24.1.29.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.29.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.29.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.29.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.29.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.1.29.windows-6.2-amd64.zip">cockroach-v24.1.29.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.29.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.29.windows-6.2-amd64.zip">cockroach-sql-v24.1.29.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.29.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.1.29
```

### Bug fixes

* Fixed a bug that would allow a race condition in foreign key cascades under `READ COMMITTED` and `REPEATABLE READ` isolation levels.
* Fixed a bug that allowed foreign-key violations to result from some combinations of concurrent `READ COMMITTED` and `SERIALIZABLE` transactions. If both `SERIALIZABLE` and weaker-isolation transactions will concurrently modify rows involved in foreign-key relationships, the `SERIALIZABLE` transactions must have the following session variables set in order to prevent any possible foreign-key violations:
  * `SET enable_implicit_fk_locking_for_serializable = on;`
  * `SET enable_shared_locking_for_serializable = on;`
  * `SET enable_durable_locking_for_serializable = on;`

## v24.1.28

Release Date: April 22, 2026

### 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.1.28.linux-amd64.tgz">cockroach-v24.1.28.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.28.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.28.linux-amd64.tgz">cockroach-sql-v24.1.28.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.28.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.28.linux-arm64.tgz">cockroach-v24.1.28.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.28.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.28.linux-arm64.tgz">cockroach-sql-v24.1.28.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.28.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.1.28.darwin-10.9-amd64.tgz">cockroach-v24.1.28.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.28.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.28.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.28.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.28.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.28.darwin-11.0-arm64.tgz">cockroach-v24.1.28.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.28.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.28.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.28.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.28.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.1.28.windows-6.2-amd64.zip">cockroach-v24.1.28.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.28.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.28.windows-6.2-amd64.zip">cockroach-sql-v24.1.28.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.28.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.1.28
```

### Bug fixes

* Fixed a bug where concurrent updates to a table using multiple column families during a partial index creation could result in data loss, incorrect `NULL` values, or validation failures in the resulting index.

## v24.1.27

Release Date: April 8, 2026

### 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.1.27.linux-amd64.tgz">cockroach-v24.1.27.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.27.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.27.linux-amd64.tgz">cockroach-sql-v24.1.27.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.27.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.27.linux-arm64.tgz">cockroach-v24.1.27.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.27.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.27.linux-arm64.tgz">cockroach-sql-v24.1.27.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.27.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.1.27.darwin-10.9-amd64.tgz">cockroach-v24.1.27.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.27.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.27.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.27.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.27.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.27.darwin-11.0-arm64.tgz">cockroach-v24.1.27.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.27.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.27.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.27.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.27.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.1.27.windows-6.2-amd64.zip">cockroach-v24.1.27.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.27.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.27.windows-6.2-amd64.zip">cockroach-sql-v24.1.27.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.27.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.1.27
```

### Bug fixes

* Fixed a bug where generating a debug zip could trigger an out-of-memory (OOM) condition on a node if malformed log entries were present in logs using `json` or `json-compact` formatting. This bug was introduced in v24.1.

## v24.1.26

Release Date: February 19, 2026

### 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.1.26.linux-amd64.tgz">cockroach-v24.1.26.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.26.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.26.linux-amd64.tgz">cockroach-sql-v24.1.26.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.26.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.26.linux-arm64.tgz">cockroach-v24.1.26.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.26.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.26.linux-arm64.tgz">cockroach-sql-v24.1.26.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.26.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.1.26.darwin-10.9-amd64.tgz">cockroach-v24.1.26.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.26.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.26.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.26.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.26.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.26.darwin-11.0-arm64.tgz">cockroach-v24.1.26.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.26.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.26.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.26.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.26.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.1.26.windows-6.2-amd64.zip">cockroach-v24.1.26.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.26.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.26.windows-6.2-amd64.zip">cockroach-sql-v24.1.26.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.26.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.1.26
```

### Bug fixes

* Fixed a rare race condition between range splits and MVCC garbage collection where a GCRequest could target keys outside its declared span. In rare cases, this could result in data on the post-split right-hand side (RHS) being incorrectly garbage collected, potentially leading to lost writes. The system now detects and rejects such malformed GC requests.
* Fixed a bug where generating a debug zip could trigger an out-of-memory (OOM) condition on a node if malformed log entries were present in logs using json or json-compact formatting. Debug zip generation now safely handles malformed log lines and prevents excessive memory consumption.

## v24.1.25

Release Date: October 17, 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.1.25.linux-amd64.tgz">cockroach-v24.1.25.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.25.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.25.linux-amd64.tgz">cockroach-sql-v24.1.25.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.25.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.25.linux-arm64.tgz">cockroach-v24.1.25.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.25.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.25.linux-arm64.tgz">cockroach-sql-v24.1.25.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.25.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.1.25.darwin-10.9-amd64.tgz">cockroach-v24.1.25.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.25.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.25.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.25.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.25.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.25.darwin-11.0-arm64.tgz">cockroach-v24.1.25.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.25.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.25.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.25.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.25.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.1.25.windows-6.2-amd64.zip">cockroach-v24.1.25.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.25.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.25.windows-6.2-amd64.zip">cockroach-sql-v24.1.25.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.25.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.1.25
```

### Bug fixes

* Fixed a bug where an `INSERT` statement could fail with a type checking error while adding a `BIT(n)` column.
* Fixed a bug that caused panics when executing `COPY` into a table with hidden columns and expression indexes. The panic only occurred when the session setting `expect_and_ignore_not_visible_columns_in_copy` was enabled. This bug was introduced with `expect_and_ignore_not_visible_columns_in_copy` in v22.1.0.
* Fixed a bug where the presence of duplicate temporary tables in a backup caused the restore to fail with an error containing the text `restoring table desc and namespace entries: table already exists`.

## v24.1.24

Release Date: September 22, 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.1.24.linux-amd64.tgz">cockroach-v24.1.24.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.24.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.24.linux-amd64.tgz">cockroach-sql-v24.1.24.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.24.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.24.linux-arm64.tgz">cockroach-v24.1.24.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.24.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.24.linux-arm64.tgz">cockroach-sql-v24.1.24.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.24.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.1.24.darwin-10.9-amd64.tgz">cockroach-v24.1.24.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.24.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.24.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.24.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.24.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.24.darwin-11.0-arm64.tgz">cockroach-v24.1.24.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.24.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.24.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.24.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.24.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.1.24.windows-6.2-amd64.zip">cockroach-v24.1.24.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.24.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.24.windows-6.2-amd64.zip">cockroach-sql-v24.1.24.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.24.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.1.24
```

### SQL language changes

* When `sql_safe_updates` is enabled, the `ALTER TABLE... LOCALITY` statement will be blocked when trying to convert an existing table to `REGIONAL BY ROW`, unless a region column has been added to the table. This protects against undesired behavior that caused `UPDATE` or `DELETE` statements to fail against the table while the locality change was in progress.

### Operational changes

* Updated TTL job replanning to be less sensitive by focusing specifically on detecting when nodes become unavailable rather than reacting to all plan differences. The cluster setting `sql.ttl.replan_flow_threshold` may have been set to `0` to work around the TTL replanner being too sensitive; this fix will alleviate that and any instance that had set `replan_flow_threshold` to `0` can be reset back to the default.

### Bug fixes

* Fixed a bug where `debug.zip` files collected from clusters with `disallow_full_table_scans` enabled were missing system table data.
* Fixed a bug where updating column default expressions would incorrectly remove sequence ownerships for the affected column.
* Fixed a bug where views could not reference the `crdb_region` column from their underlying tables in expressions.

### Performance improvements

* Lookup joins can now be used on tables with virtual columns even if the type of the search argument is not identical to the column type referenced in the virtual column.

## v24.1.23

Release Date: August 22, 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.1.23.linux-amd64.tgz">cockroach-v24.1.23.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.23.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.23.linux-amd64.tgz">cockroach-sql-v24.1.23.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.23.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.23.linux-arm64.tgz">cockroach-v24.1.23.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.23.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.23.linux-arm64.tgz">cockroach-sql-v24.1.23.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.23.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.1.23.darwin-10.9-amd64.tgz">cockroach-v24.1.23.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.23.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.23.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.23.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.23.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.23.darwin-11.0-arm64.tgz">cockroach-v24.1.23.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.23.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.23.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.23.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.23.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.1.23.windows-6.2-amd64.zip">cockroach-v24.1.23.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.23.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.23.windows-6.2-amd64.zip">cockroach-sql-v24.1.23.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.23.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.1.23
```

### General changes

* Backporting detailed error logging logic gated behind a cluster setting. The cluster setting enables detailed error logging for messages exceeding Kafka v2 size limit.
* Changefeeds emitting to Kafka sinks that were created in CockroachDB v24.2.1+, or v23.2.10+ and v24.1.4+ with the `changefeed.new_kafka_sink.enabled` cluster setting enabled now include the message key, size, and MVCC timestamp in "message too large" error logs.

### Bug fixes

* Fixed an issue where the `mvcc_timestamp` field was incorrectly returning zero values when used with CDC queries. The timestamp is now emitted correctly.
* Fixed a bug that could cause some errors returned by attempts to upload backup data to external storage providers to be undetected, potentially causing incomplete backups.

### Build changes

* Upgrade Go to consume security fixes

### Miscellaneous

* Restore will now re-attempt `AdminSplit` KV requests instead of immediately failing and pausing the job.

## v24.1.22

Release Date: August 1, 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.1.22.linux-amd64.tgz">cockroach-v24.1.22.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.22.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.22.linux-amd64.tgz">cockroach-sql-v24.1.22.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.22.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.22.linux-arm64.tgz">cockroach-v24.1.22.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.22.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.22.linux-arm64.tgz">cockroach-sql-v24.1.22.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.22.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.1.22.darwin-10.9-amd64.tgz">cockroach-v24.1.22.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.22.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.22.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.22.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.22.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.22.darwin-11.0-arm64.tgz">cockroach-v24.1.22.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.22.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.22.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.22.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.22.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.1.22.windows-6.2-amd64.zip">cockroach-v24.1.22.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.22.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.22.windows-6.2-amd64.zip">cockroach-sql-v24.1.22.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.22.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.1.22
```

### Bug fixes

* Fixed a bug that could cause some errors returned by attempts to upload backup data to external storage providers to be undetected, potentially causing incomplete backups.

## v24.1.21

Release Date: July 28, 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.1.21.linux-amd64.tgz">cockroach-v24.1.21.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.21.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.21.linux-amd64.tgz">cockroach-sql-v24.1.21.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.21.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.21.linux-arm64.tgz">cockroach-v24.1.21.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.21.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.21.linux-arm64.tgz">cockroach-sql-v24.1.21.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.21.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.1.21.darwin-10.9-amd64.tgz">cockroach-v24.1.21.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.21.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.21.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.21.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.21.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.21.darwin-11.0-arm64.tgz">cockroach-v24.1.21.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.21.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.21.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.21.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.21.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.1.21.windows-6.2-amd64.zip">cockroach-v24.1.21.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.21.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.21.windows-6.2-amd64.zip">cockroach-sql-v24.1.21.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.21.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.1.21
```

### Bug fixes

* Fixed a data race in the `cloudstorage` sink.
* Fixed a bug where `libpq` clients using the async API could hang with large result sets (Python: psycopg; Ruby: ActiveRecord, ruby-pg).

## v24.1.20

Release Date: June 25, 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.1.20.linux-amd64.tgz">cockroach-v24.1.20.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.20.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.20.linux-amd64.tgz">cockroach-sql-v24.1.20.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.20.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.20.linux-arm64.tgz">cockroach-v24.1.20.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.20.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.20.linux-arm64.tgz">cockroach-sql-v24.1.20.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.20.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.1.20.darwin-10.9-amd64.tgz">cockroach-v24.1.20.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.20.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.20.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.20.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.20.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.20.darwin-11.0-arm64.tgz">cockroach-v24.1.20.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.20.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.20.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.20.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.20.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.1.20.windows-6.2-amd64.zip">cockroach-v24.1.20.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.20.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.20.windows-6.2-amd64.zip">cockroach-sql-v24.1.20.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.20.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.1.20
```

### Bug fixes

* Fixed a bug that could potentially cause a changefeed to complete erroneously when one of its watched tables encounters a schema change.
* Fixed a bug that caused the **SQL Activity** > **Statement Fingerprint** page to fail to load details for statements run with application names containing a `#` character.
* Fixed a bug that could cause the `cockroach` process to `segfault` when collecting runtime execution traces (typically collected via the **Advanced Debug** page in the Console).
* Fixed a bug that could cause stable expressions to be folded in cached query plans. The bug could cause stable expressions like `current_setting` to return the wrong result if used in a prepared statement. The bug was introduced in v23.2.22, v24.1.14, v24.3.9, v25.1.2, and the v25.2 alpha.
* Fixed a bug where prepared statements on schema changes could fail with runtime errors.
* Fixed a bug where `ALTER TABLE` was modifying identity attributes on columns not backed by a sequence.

### Performance improvements

* TTL jobs now respond to cluster topology changes by restarting and rebalancing across available nodes.

## v24.1.19

Release Date: May 28, 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.1.19.linux-amd64.tgz">cockroach-v24.1.19.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.19.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.19.linux-amd64.tgz">cockroach-sql-v24.1.19.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.19.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.19.linux-arm64.tgz">cockroach-v24.1.19.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.19.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.19.linux-arm64.tgz">cockroach-sql-v24.1.19.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.19.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.1.19.darwin-10.9-amd64.tgz">cockroach-v24.1.19.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.19.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.19.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.19.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.19.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.19.darwin-11.0-arm64.tgz">cockroach-v24.1.19.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.19.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.19.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.19.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.19.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.1.19.windows-6.2-amd64.zip">cockroach-v24.1.19.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.19.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.19.windows-6.2-amd64.zip">cockroach-sql-v24.1.19.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.19.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.1.19
```

### Operational changes

* Changed the default value of the cluster setting `admission.l0_file_count_overload_threshold` to `4000`.

### DB Console changes

* Schema insights that recommend replacing an index were previously a two-statement command consisting of a `CREATE INDEX` and a `DROP INDEX` statement. When these two DDL statements were run as a single batched command, it was possible for one statement to succeed and one to fail. This is because DDL statements do not have the same atomicity guarantees as other SQL statements in CockroachDB. Index-replacement insights are now a single `CREATE INDEX` statement followed by a comment with additional DDL statements to be run manually: an `ALTER INDEX... NOT VISIBLE` statement, which makes the old index invisible to the optimizer, followed by a `DROP INDEX` statement that should only be run after making the old index invisible and verifying that workload performance is satisfactory.

### Bug fixes

* Fixed a bug where CockroachDB could encounter a `cannot specify timestamp older than...` error during table statistics collection in some cases (e.g., when the cluster is overloaded). The bug was present since v19.1.
* Fixed a bug in the DB Console where tables with page size dropdowns failed to update when a new page size option was selected. Tables now update correctly.
* Fixed the following bugs in the **Schedules** page of the DB Console:
  * Fixed a bug where the **Schedules** page displayed only a subset of a cluster's schedules. The **Schedules** page now correctly displays all schedules.
  * Fixed a bug where manually updating the `show` or `status` parameters in the URL (e.g., `http://127.0.0.1:8080/#/schedules?status=ACTIVE&show=50` ) caused the **Schedules** page to fail to load.
* Fixed a bug in the **SQL Activity Statements** page where filtering by **Statement Type** returned no results. The filter now works as expected.
* Improved the performance of `SHOW CREATE TABLE` on multi-region databases with large numbers of objects.
* Fixed a bug that could lead to schema changes hanging after a cluster recovered from availability issues.
* Previously, on a table with multiple column families, CockroachDB could encounter a `Non-nullable column "‹×›:‹×›" with no value` error in rare cases during table statistics collection. The bug was present since v19.2 and is now fixed.
* Fixed a bug where orphaned leases were not properly cleaned up.
* Fixed an internal assertion failure that could occur during operations like `ALTER TYPE` or `ALTER DATABASE... ADD REGION` when temporary tables were present.
* Fixed a bug that could cause queries that perform work in parallel to ignore the requested quality-of-service level. Affected operations include lookup joins, DistSQL execution, and foreign-key checks.
* Fixed a bug that prevented `TRUNCATE` from succeeding if any indexes on the table had back-reference dependencies, such as from a view or function referencing the index. \\
* Fixed a rare corruption bug that impacts import and materialized views.

## v24.1.18

Release Date: April 30, 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.1.18.linux-amd64.tgz">cockroach-v24.1.18.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.18.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.18.linux-amd64.tgz">cockroach-sql-v24.1.18.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.18.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.18.linux-arm64.tgz">cockroach-v24.1.18.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.18.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.18.linux-arm64.tgz">cockroach-sql-v24.1.18.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.18.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.1.18.darwin-10.9-amd64.tgz">cockroach-v24.1.18.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.18.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.18.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.18.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.18.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.18.darwin-11.0-arm64.tgz">cockroach-v24.1.18.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.18.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.18.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.18.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.18.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.1.18.windows-6.2-amd64.zip">cockroach-v24.1.18.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.18.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.18.windows-6.2-amd64.zip">cockroach-sql-v24.1.18.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.18.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.1.18
```

### SQL language changes

* `EXPLAIN ANALYZE` statements now display the number of transaction retries and time spent retrying, if non-zero, in the plan output.
* Added the `WITH IGNORE_FOREIGN_KEYS` option to `SHOW CREATE TABLE` which omits foreign key constraints from the output schema. This option is also allowed in `SHOW CREATE VIEW`, but has no effect. It cannot be combined with the `WITH REDACT` option.

### Bug fixes

* Fixed a rare corruption bug that impacts import and materialized views.
* Fixed a bug that caused changefeeds to fail on startup when scanning a single key.
* Fixed a bug in the client certificate expiration metrics `security.certificate.expiration.client` and `security.certificate.ttl.client`.
* Fixed a bug in v24.1.14, v24.3.7, v24.3.8, and v25.1 that could cause a nil-pointer error when a column's default expression contained a volatile expression (like `nextval` ) as a UDF argument.
* MVCC garbage collection is now fully subject to IO admission control. Previously, it was possible for MVCC GC to cause store overload (such as LSM inversion) when a large amount of data would become eligible for garbage collection. Should any issues arise from subjecting MVCC GC to admission control, the `kv.mvcc_gc.queue_kv_admission_control.enabled` cluster setting can be set to `false` to restore the previous behavior.
* Fixed a bug that could cause a stack overflow during execution of a prepared statement that invoked a PL/pgSQL routine with a loop. The bug existed in versions v23.2.22, v24.1.15, v24.3.9, v25.1.2, v25.1.3, and pre-release versions of v25.2 prior to v25.2.0-alpha.3.
* Fixed a bug where CockroachDB would encounter an internal error when decoding the gists of plans with `CALL` statements. The bug had been present since v23.2.
* Fixed a bug where calling a stored procedure could drop the procedure if it had `OUT` parameters that were not used by the calling routine. This bug had existed since PL/pgSQL `CALL` statements were introduced in v24.1.
* Previously, the fields `maximum memory usage` and `max sql temp disk usage` in the `EXPLAIN ANALYZE` output could be under-reported for distributed plans when memory-intensive operations were fully performed on the remote nodes. This is now fixed. The bug existed in v22.1 and later.

## v24.1.17

Release Date: April 28, 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.1.17.linux-amd64.tgz">cockroach-v24.1.17.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.17.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.17.linux-amd64.tgz">cockroach-sql-v24.1.17.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.17.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.17.linux-arm64.tgz">cockroach-v24.1.17.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.17.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.17.linux-arm64.tgz">cockroach-sql-v24.1.17.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.17.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.1.17.darwin-10.9-amd64.tgz">cockroach-v24.1.17.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.17.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.17.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.17.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.17.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.17.darwin-11.0-arm64.tgz">cockroach-v24.1.17.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.17.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.17.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.17.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.17.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.1.17.windows-6.2-amd64.zip">cockroach-v24.1.17.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.17.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.17.windows-6.2-amd64.zip">cockroach-sql-v24.1.17.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.17.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.1.17
```

### Bug fixes

* Fixed a rare corruption bug that impacts import and materialized views.

## v24.1.16

Release Date: April 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.1.16.linux-amd64.tgz">cockroach-v24.1.16.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.16.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.16.linux-amd64.tgz">cockroach-sql-v24.1.16.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.16.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.16.linux-arm64.tgz">cockroach-v24.1.16.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.16.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.16.linux-arm64.tgz">cockroach-sql-v24.1.16.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.16.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.1.16.darwin-10.9-amd64.tgz">cockroach-v24.1.16.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.16.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.16.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.16.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.16.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.16.darwin-11.0-arm64.tgz">cockroach-v24.1.16.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.16.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.16.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.16.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.16.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.1.16.windows-6.2-amd64.zip">cockroach-v24.1.16.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.16.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.16.windows-6.2-amd64.zip">cockroach-sql-v24.1.16.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.16.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.1.16
```

### Bug fixes

* Fixed a bug that could cause a stack overflow during execution of a prepared statement that invoked a PL/pgSQL routine with a loop. The bug existed in versions v23.2.22, v24.1.15, v24.3.9, v25.1.2, v25.1.3, and pre-release versions of v25.2 prior to v25.2.0-alpha.3.

## v24.1.15

Release Date: April 3, 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.1.15.linux-amd64.tgz">cockroach-v24.1.15.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.15.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.15.linux-amd64.tgz">cockroach-sql-v24.1.15.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.15.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.15.linux-arm64.tgz">cockroach-v24.1.15.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.15.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.15.linux-arm64.tgz">cockroach-sql-v24.1.15.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.15.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.1.15.darwin-10.9-amd64.tgz">cockroach-v24.1.15.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.15.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.15.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.15.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.15.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.15.darwin-11.0-arm64.tgz">cockroach-v24.1.15.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.15.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.15.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.15.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.15.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.1.15.windows-6.2-amd64.zip">cockroach-v24.1.15.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.15.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.15.windows-6.2-amd64.zip">cockroach-sql-v24.1.15.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.15.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.1.15
```

### Operational changes

* Added the `sql.statement_timeout.count` metric to track the number of SQL statements that fail due to exceeding the statement timeout.
* Added the `sql.transaction_timeout.count` metric to track the number of SQL statements that fail due to exceeding the transaction timeout.
* The `node decommission` CLI command now waits until the target node is fully drained before marking it as decommissioned. Previously, the command would start draining but not wait, leaving the node in an unstable state where it could still accept client requests while being unable to communicate with the cluster, causing those requests to hang or fail with unexpected errors.

### 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.
* Fixed a bug that could cause gateway nodes to panic when performing an `UPSERT` on a table with a `BOOL` primary key column and a partial index using the primary key column as the predicate expression.
* Fixed a bug where `CREATE SEQUENCE` without concurrent DDL operations could hit a retry error due to incorrect schema modification.
* Fixed a bug where CockroachDB could incorrectly evaluate casts to some OID types (e.g., `REGCLASS` ). This issue had been present since at least v22.1.
* Fixed a bug that could cause `nil pointer dereference` errors when executing statements with user-defined functions (UDFs) or certain built-in functions like `obj_description`.
* Fixed a bug where nodes drained during decommissioning could interrupt active SQL connections unexpectedly, even when drain was expected to wait for them to complete.
* Fixed a bug where the fraction completed and internal checkpoints during an index backfill operation would stop being written if any periodic fraction/checkpoint write failed. Progress is now additionally logged to aid debugging. This bug affected schema changes such as creating an index or adding a non-nullable column.
* Fixed a bug that could prevent `SHOW CREATE TABLE` from working if a database was offline (e.g., due to a `RESTORE` ).
* Fixed a bug where tuple labels were sometimes disregarded, causing unexpected behavior, such as when converting a tuple to `JSON` with `to_jsonb`. This bug existed since v22.1.0 and became more likely to cause issues after changes in v24.1.7.
* Fixed a bug where the declarative schema changer allowed `CREATE SEQUENCE` operations to proceed even while a `DROP SCHEMA` or `DROP DATABASE` was in progress. Such operations now retry if the parent object has a schema change in progress.
* Fixed a bug in `v24.1.14`, `v24.3.7`, `v24.3.8`, and `v25.1` that could cause a nil-pointer error when a column's default expression contained a volatile expression (like `nextval` ) as a UDF argument.

### Miscellaneous

* Configuring the `sql.ttl.default_delete_rate_limit` cluster setting now displays a notice clarifying that the TTL rate limit is per leaseholder per table, with a link to the documentation.

## v24.1.14

Release Date: March 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.1.14.linux-amd64.tgz">cockroach-v24.1.14.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.14.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.14.linux-amd64.tgz">cockroach-sql-v24.1.14.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.14.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.14.linux-arm64.tgz">cockroach-v24.1.14.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.14.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.14.linux-arm64.tgz">cockroach-sql-v24.1.14.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.14.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.1.14.darwin-10.9-amd64.tgz">cockroach-v24.1.14.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.14.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.14.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.14.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.14.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.14.darwin-11.0-arm64.tgz">cockroach-v24.1.14.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.14.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.14.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.14.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.14.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.1.14.windows-6.2-amd64.zip">cockroach-v24.1.14.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.14.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.14.windows-6.2-amd64.zip">cockroach-sql-v24.1.14.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.14.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.1.14
```

### SQL language changes

* Since v23.2, table statistics histograms have been collected for non-indexed `JSONB` 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`, we do 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.
* Fixed a bug existing only in pre-release versions of v25.1 which could cause unexpected errors during planning for `VALUES` expressions containing function calls with multiple overloads.
* Added the `optimizer_check_input_min_row_count` session setting to control the minimum row count estimate for buffer scans of foreign key and uniqueness checks. It defaults to `0`.

### Operational changes

* The `changefeed.max_behind_nanos` metric now supports scoping with metric labels.

### Command-line changes

* Improved the performance of the debug zip query that collects `transaction_contention_events` data, reducing the chances of "memory budget exceeded" or "query execution canceled due to statement timeout" errors.

### Bug fixes

* Fixed a bug that, under rare circumstances, could cause draining a node to fail with the error message "some sessions did not respond to cancellation within 1s".
* Fixed a bug that prevented the `CREATE` statement for a routine from being shown in a statement bundle. This happened when the routine was created on a schema other than `public`. The bug had existed since v23.1.
* Fixed a memory leak that could previously occur when evaluating some memory-intensive queries via the vectorized engine in CockroachDB. The leak had been present since v20.2.
* Fixed a bug that could cause `SHOW TABLES` and other introspection operations to encounter a "batch timestamp must be after replica GC threshold" error.
* Removed duplicate columns in the Parquet output from changefeeds using CDC queries.
* Fixed a rare bug in which a query might fail with the error "could not find computed column expression for column in table" while dropping a virtual computed column from the table. This bug was introduced in v23.2.4.
* Fixed a bug that would cause an internal error when the result of a `RECORD` -returning user-defined function (UDF) was wrapped by another expression (such as `COALESCE` ) within a `VALUES` clause.
* The **Data Distribution** report on the **Advanced Debug** page will no longer crash if there are null values for `raw_sql_config` in `crdb_internal.zones`.
* Upgraded the Sarama Kafka client library to pick up a fix for a race condition bug that could occur when Kafka throttling was enabled.

## v24.1.13

Release Date: February 19, 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.1.13.linux-amd64.tgz">cockroach-v24.1.13.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.13.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.13.linux-amd64.tgz">cockroach-sql-v24.1.13.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.13.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.13.linux-arm64.tgz">cockroach-v24.1.13.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.13.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.13.linux-arm64.tgz">cockroach-sql-v24.1.13.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.13.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.1.13.darwin-10.9-amd64.tgz">cockroach-v24.1.13.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.13.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.13.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.13.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.13.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.13.darwin-11.0-arm64.tgz">cockroach-v24.1.13.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.13.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.13.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.13.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.13.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.1.13.windows-6.2-amd64.zip">cockroach-v24.1.13.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.13.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.13.windows-6.2-amd64.zip">cockroach-sql-v24.1.13.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.13.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.1.13
```

### 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.

<Danger>
  This fix is present in v24.1.11 and [v24.1.13](#v24-1-13), but was **not** released in [v24.1.12](#v24-1-12).
</Danger>

## v24.1.12

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.1.12.linux-amd64.tgz">cockroach-v24.1.12.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.12.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.12.linux-amd64.tgz">cockroach-sql-v24.1.12.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.12.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.12.linux-arm64.tgz">cockroach-v24.1.12.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.12.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.12.linux-arm64.tgz">cockroach-sql-v24.1.12.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.12.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.1.12.darwin-10.9-amd64.tgz">cockroach-v24.1.12.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.12.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.12.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.12.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.12.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.12.darwin-11.0-arm64.tgz">cockroach-v24.1.12.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.12.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.12.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.12.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.12.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.1.12.windows-6.2-amd64.zip">cockroach-v24.1.12.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.12.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.12.windows-6.2-amd64.zip">cockroach-sql-v24.1.12.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.12.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.1.12
```

### General changes

* The protected timestamp 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.

### Backward-incompatible changes

* In [v24.1.11](#v24-1-11-bug-fixes), a bug was fixed that could cause `SHOW TABLES` and other introspection operations to encounter a `"batch timestamp... must be after replica GC threshold"` error. This fix is **not** present in v24.1.12, but has been released in [v24.1.13](#v24-1-13).

### SQL language changes

* Since v23.2 table statistics histograms have 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 zero, which is the default, indicates no lower bound. Note that if this is set to a value greater than zero, 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

* Added new metrics that expose the TTL for various certificates.
* Introduced the metric `sql.schema_changer.object_count` that keeps track of the count of objects in the cluster.

### Bug fixes

* `ALTER BACKUP SCHEDULE` no longer fails on schedules with a collection URI that contains a space.
* Previously, `SHOW CREATE TABLE` was showing incorrect data with regards to inverted indexes. It now shows the correct data that can be repeatedly entered back into CockroachDB to recreate the same table.
* 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.
* Fixed a timing issue between `ALTER VIEW.. RENAME` and `DROP VIEW` that caused repeated failures in the `DROP VIEW` job.
* 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.
* `security.certificate.*` metrics will now be updated if a node loads new certificates while running.
* 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.
* CockroachDB could previously hit a bounded memory leak when collecting table statistics on a table that had both very wide (10KiB or more) and relatively small (under 400B) `BYTES` -like values within the same row. This has been present since before v19.2. Additionally, in v24.1.0, a bug was introduced that made this leak also apply to `STRING` -like values.

## v24.1.11

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.1.11.linux-amd64.tgz">cockroach-v24.1.11.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.11.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.11.linux-amd64.tgz">cockroach-sql-v24.1.11.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.11.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.11.linux-arm64.tgz">cockroach-v24.1.11.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.11.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.11.linux-arm64.tgz">cockroach-sql-v24.1.11.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.11.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.1.11.darwin-10.9-amd64.tgz">cockroach-v24.1.11.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.11.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.11.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.11.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.11.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.11.darwin-11.0-arm64.tgz">cockroach-v24.1.11.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.11.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.11.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.11.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.11.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.1.11.windows-6.2-amd64.zip">cockroach-v24.1.11.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.11.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.11.windows-6.2-amd64.zip">cockroach-sql-v24.1.11.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.11.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.1.11
```

### 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.

<Danger>
  This fix is present in v24.1.11 and [v24.1.13](#v24-1-13), but was **not** released in [v24.1.12](#v24-1-12).
</Danger>

## v24.1.10

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.1.10.linux-amd64.tgz">cockroach-v24.1.10.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.10.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.10.linux-amd64.tgz">cockroach-sql-v24.1.10.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.10.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.10.linux-arm64.tgz">cockroach-v24.1.10.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.10.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.10.linux-arm64.tgz">cockroach-sql-v24.1.10.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.10.darwin-10.9-amd64.tgz">cockroach-v24.1.10.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.10.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.10.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.10.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.10.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.10.darwin-11.0-arm64.tgz">cockroach-v24.1.10.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.10.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.10.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.10.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.10.windows-6.2-amd64.zip">cockroach-v24.1.10.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.10.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.10.windows-6.2-amd64.zip">cockroach-sql-v24.1.10.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.10
```

### Security updates

* The cluster setting `server.jwt_authentication.issuers` now takes the issuer's configuration value apart from the URI.
  * This can be set to one of the following values:
    1. A string that Go can parse as a valid issuer URL, e.g., `'https://accounts.google.com'`.
    2. A string that can be parsed as valid JSON array of issuer URLs, e.g., `['example.com/adfs','https://accounts.google.com']`.
    3. A string that can be parsed as valid JSON and deserialized into a map of issuer URLs to corresponding JWKS URIs. In the third case, CockroachDB will override the JWKS URI present in the issuer's well-known endpoint, e.g., `'{ "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 `JWKSAutoFetchEnabled` is set, it obtains the JWKS URI first from the issuer's well-known endpoint and then uses this endpoint.

### 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 caused 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 CockroachDB experiences 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.

### Bug fixes

* Fixed a bug where `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 caused 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 had 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 had 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, e.g.: `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 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.
* Using more than one `DECLARE` statement in the definition of a user-defined function (UDF) now correctly declares additional variables.
* Fixed an issue where corrupted table statistics could cause the `cockroach` process to crash.
* Fixed a bug that could cause the password for the `root` user to be deleted while upgrading to v24.1. This bug only affected clusters that were initially created with v22.2 or earlier. The same bug could also cause the `defaultdb` and `postgres` databases to be recreated during the upgrade to v24.1 if they had been previously deleted.
* `CLOSE CURSOR` statements are now allowed in read-only transactions, similar to PostgreSQL. The bug had been present since at least v23.1.

### 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.1.9

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.1.9.linux-amd64.tgz">cockroach-v24.1.9.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.9.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.9.linux-amd64.tgz">cockroach-sql-v24.1.9.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.9.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.9.linux-arm64.tgz">cockroach-v24.1.9.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.9.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.9.linux-arm64.tgz">cockroach-sql-v24.1.9.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.9.darwin-10.9-amd64.tgz">cockroach-v24.1.9.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.9.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.9.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.9.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.9.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.9.darwin-11.0-arm64.tgz">cockroach-v24.1.9.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.9.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.9.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.9.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.9.windows-6.2-amd64.zip">cockroach-v24.1.9.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.9.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.9.windows-6.2-amd64.zip">cockroach-sql-v24.1.9.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.9
```

### 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.1.8

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.1.8.linux-amd64.tgz">cockroach-v24.1.8.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.8.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.8.linux-amd64.tgz">cockroach-sql-v24.1.8.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.8.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.8.linux-arm64.tgz">cockroach-v24.1.8.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.8.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.8.linux-arm64.tgz">cockroach-sql-v24.1.8.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.8.darwin-10.9-amd64.tgz">cockroach-v24.1.8.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.8.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.8.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.8.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.8.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.8.darwin-11.0-arm64.tgz">cockroach-v24.1.8.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.8.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.8.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.8.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.8.windows-6.2-amd64.zip">cockroach-v24.1.8.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.8.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.8.windows-6.2-amd64.zip">cockroach-sql-v24.1.8.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.8
```

### Security updates

* All cluster settings that accept strings are now fully redacted when transmitted as part of our diagnostics telemetry. The transmitted payload includes a record of modified cluster settings and their values when they are not strings. If you previously applied the mitigations in <InternalLink path="a133479">Technical Advisory 133479</InternalLink>, you 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 (PTS). This table is required for change data capture queries.
* 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.

### Operational changes

* To prevent unnecessary queuing in admission control CPU queues, the `goschedstats.always_use_short_sample_period.enabled` setting should be set to `true` for any production cluster.
* A new cluster setting `ui.database_locality_metadata.enabled`, when set to `true`, disables loading 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. The Database and Table pages in v24.3 onwards do not have this problem. If you require this data, use the `SHOW RANGES FROM {DATABASE|TABLE}` SQL statement to compute this information on-demand.
* The row-level TTL job now will periodically log progress by showing the number of table spans that have been processed so far.

### Bug fixes

* Fixed a bug where CockroachDB could encounter an internal error `interface conversion: coldata.Column is` in an edge case. The bug was present in v22.2.13+, v23.1.9+, and v23.2+.
* Fixed an unhandled error that could occur when using `REVOKE... ON SEQUENCE... FROM user` on an object that is not a sequence.
* 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 had been present since at least v20.1.0.
* Addressed a panic that could occur inside `CREATE TABLE AS` if sequence builtin expressions had invalid function overloads.
* String constants can now be compared against collated strings.
* Previously, when executing queries with index / lookup joins where ordering needed to be maintained, CockroachDB's behavior could lead to increased query latency, potentially by several orders of magnitude. This bug was introduced in v22.2, and is now fixed.
* Fixed a bug where `DISCARD ALL` statements were counted under the `sql.ddl.count` metric. Now these statements will be counted under the `sql.misc.count` metric.
* Fixed a bug where `DROP CASCADE` would occasionally panic with an `un-dropped backref` message on partitioned tables.
* Reduced the duration of partitions in the gossip network when a node crashes. This eliminates false positives in the `ranges.unavailable` metric.
* As a non-admin user who runs `DROP ROLE IF EXISTS` on a user that does not exist, you no longer get an error message.
* Fixed a bug that caused quotes around the name of a routine to be dropped when the routine was called within another routine. This could prevent the correct routine name 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 (for example, 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, such as `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`.
* `CREATE SCHEMA` now returns the correct error if a the schema name is missing.

### Performance improvements

* Unnecessary block loads of SSTable files are now avoided in some rare cases after a replica rebalance.

## v24.1.7

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.1.7.linux-amd64.tgz">cockroach-v24.1.7.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.7.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.7.linux-amd64.tgz">cockroach-sql-v24.1.7.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.7.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.7.linux-arm64.tgz">cockroach-v24.1.7.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.7.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.7.linux-arm64.tgz">cockroach-sql-v24.1.7.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.7.darwin-10.9-amd64.tgz">cockroach-v24.1.7.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.7.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.7.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.7.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.7.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.7.darwin-11.0-arm64.tgz">cockroach-v24.1.7.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.7.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.7.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.7.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.7.windows-6.2-amd64.zip">cockroach-v24.1.7.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.7.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.7.windows-6.2-amd64.zip">cockroach-sql-v24.1.7.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.7
```

### Security updates

* You can now authenticate to the DB Console by passing a JWT as the bearer token.

### General changes

* Changed the license `cockroach` is distributed under to the new CockroachDB Software License.
* Attempting to install a second Enterprise Trial license on the same cluster will now fail.
* 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

* Some charts on the **Overview** and **Replication** metrics dashboard pages have more terse legends to facilitate easier browsing.
* 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 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.
* Added automated clean-up and validation for dropped roles inside of default privileges.
* Fixed a bug that could cause `RESTORE` to hang after encountering transient errors from the storage layer.
* 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 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 bug introduced before 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.

### Performance improvements

* Reduced the write-amplification impact of rebalances by splitting snapshot sorted string table (SST) files into smaller ones before ingesting them into Pebble.
* Performance has been improved during periodic polling of table history when `schema_locked` is not used.

## v24.1.6

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.1.6.linux-amd64.tgz">cockroach-v24.1.6.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.6.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.6.linux-amd64.tgz">cockroach-sql-v24.1.6.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.6.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.6.linux-arm64.tgz">cockroach-v24.1.6.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.6.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.6.linux-arm64.tgz">cockroach-sql-v24.1.6.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.6.darwin-10.9-amd64.tgz">cockroach-v24.1.6.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.6.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.6.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.6.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.6.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.6.darwin-11.0-arm64.tgz">cockroach-v24.1.6.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.6.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.6.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.6.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.6.windows-6.2-amd64.zip">cockroach-v24.1.6.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.6.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.6.windows-6.2-amd64.zip">cockroach-sql-v24.1.6.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.6
```

### Enterprise edition changes

* Updated the cluster setting <InternalLink version="v24.1" path="cluster-settings">`changefeed.sink_io_workers`</InternalLink> with all the <InternalLink version="v24.1" 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.1" path="change-data-capture-overview">changefeeds</InternalLink> to the following sinks:
  * <InternalLink version="v24.1" path="changefeed-sinks#kafka">Kafka sinks</InternalLink>. If <InternalLink version="v24.1" path="cluster-settings">child metrics are enabled</InternalLink>, the metric will have a `kafka` label.
  * <InternalLink version="v24.1" path="changefeed-sinks#webhook-sink">Webhook sinks</InternalLink>. If child metrics are enabled, the metric will have a `webhook` label.
  * <InternalLink version="v24.1" path="changefeed-sinks">Pub/Sub sinks</InternalLink>. If child metrics are enabled, the metric will have a `pubsub` label.
  * <InternalLink version="v24.1" 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.1" 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.1" path="essential-metrics-self-hosted">metrics</InternalLink> and logs 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.*`, `changefeed.buffer_pushback_nanos.*`. The old versions are kept for backward compatibility, though using the new format is recommended.
* Added timers around key parts of the <InternalLink version="v24.1" path="change-data-capture-overview">changefeed</InternalLink> pipeline to help debug feeds experiencing issues. The `changefeed.stage.{stage}.latency` metrics now emit latency histograms for each stage. The metric respects the changefeed `scope` label for debugging specific feeds.

### General changes

* Beginning with v24.1.6, CockroachDB v24.1 is in <InternalLink version="v24.1" path="releases/release-support-policy">Long term support (LTS)</InternalLink>.

### Operational changes

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

### DB Console changes

* The <InternalLink version="v24.1" path="ui-overview">DB Console</InternalLink> will now show a notification alerting customers without an Enterprise license to [upcoming license changes](https://www.cockroachlabs.com/enterprise-license-update) with a link to more information.

### Bug fixes

* Fixed a bug in which `SHOW CLUSTER SETTING FOR VIRTUAL CLUSTER` would erroneously return `NULL` for some settings.
* Addressed a bug in the <InternalLink version="v24.1" path="upgrade-cockroach-version">upgrade</InternalLink> pre-condition for repairing descriptor corruption, which could lead to upgrade finalization being stuck.
* Fixed a potential memory leak in <InternalLink version="v24.1" path="change-data-capture-overview">changefeeds</InternalLink> using a <InternalLink version="v24.1" path="changefeed-sinks#cloud-storage-sink">cloud storage sink</InternalLink>. The memory leak could occur if both <InternalLink version="v24.1" 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 in which some <InternalLink version="v24.1" path="select-for-update">`SELECT FOR UPDATE`</InternalLink> or <InternalLink version="v24.1" 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.1" path="session-variables">session setting</InternalLink> under <InternalLink version="v24.1" path="demo-serializable">`SERIALIZABLE`</InternalLink> isolation. This bug was introduced with <InternalLink version="v24.1" path="session-variables">`optimizer_use_lock_op_for_serializable`</InternalLink> in v23.2.0.
* Fixed a bug that caused the <InternalLink version="v24.1" path="cost-based-optimizer">optimizer</InternalLink> to plan unnecessary post-query uniqueness checks during <InternalLink version="v24.1" path="insert">`INSERT`</InternalLink>, <InternalLink version="v24.1" path="upsert">`UPSERT`</InternalLink>, and <InternalLink version="v24.1" path="update">`UPDATE`</InternalLink> statements on tables with <InternalLink version="v24.1" path="partial-indexes">partial</InternalLink>, <InternalLink version="v24.1" path="create-index#unique-indexes">unique</InternalLink>, <InternalLink version="v24.1" 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.1" path="read-committed">`READ COMMITTED`</InternalLink> isolation.
* Previously, if a connection was attempting a <InternalLink version="v24.1" path="online-schema-changes">schema change</InternalLink> while the same schema objects were being dropped, it was possible for the connection to be incorrectly dropped. This is now fixed.
* Fixed a bug that could result in the inability to garbage collect an <InternalLink version="v24.1" path="architecture/storage-layer#mvcc">MVCC</InternalLink> range tombstone within a <InternalLink version="v24.1" path="global-tables">global table</InternalLink>.
* Fixed a bug that could cause errors with the message `internal error: Non-nullable column...` when executing statements under <InternalLink version="v24.1" path="read-committed">`READ COMMITTED`</InternalLink> isolation that involved tables with <InternalLink version="v24.1" path="not-null">`NOT NULL`</InternalLink> virtual columns.
* Fixed a bug that could cause incorrect results for queries containing a correlated subquery with a <InternalLink version="v24.1" path="select-clause#create-aggregate-groups">`GROUP BY`</InternalLink> or <InternalLink version="v24.1" path="select-clause#eliminate-duplicate-rows">`DISTINCT ON`</InternalLink> operator referencing an outer column. This issue would occur if the correlated subquery was in the input of a <InternalLink version="v24.1" path="select-clause">`SELECT`</InternalLink> or <InternalLink version="v24.1" path="joins">`JOIN`</InternalLink> operator that had a filter equating the outer-column reference to a non-outer column in the grouping operator's input, while the grouping column set did not include the replacement column but functionally determined it. This bug was introduced in v23.1.
* The AWS endpoint and cloud custom HTTP client configuration are now considered when <InternalLink version="v24.1" path="cloud-storage-authentication">implicit authentication</InternalLink> is used for cloud storage. Previously, these were only considered when using explicit credentials.
* Fixed a bug where jobs created in sessions with non-zero session timezone offsets could hang before starting or report incorrect creation times when viewed in <InternalLink version="v24.1" path="show-jobs">`SHOW JOBS`</InternalLink> and the DB Console.
* Fixed a bug that could prevent a <InternalLink version="v24.1" path="change-data-capture-overview">changefeed</InternalLink> from being able to resume after being paused for a prolonged period of time.
* 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.1" path="cost-based-optimizer">query optimizer</InternalLink> now plans limited, <InternalLink version="v24.1" path="partial-indexes">partial index</InternalLink> scans in more cases when the new session setting <InternalLink version="v24.1" path="session-variables">`optimizer_push_limit_into_project_filtered_scan`</InternalLink> is set to `on`.

### Contributors

This release includes 85 merged PRs by 39 authors.

## v24.1.5

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.1.5.linux-amd64.tgz">cockroach-v24.1.5.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.5.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.5.linux-amd64.tgz">cockroach-sql-v24.1.5.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.5.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.5.linux-arm64.tgz">cockroach-v24.1.5.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.5.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.5.linux-arm64.tgz">cockroach-sql-v24.1.5.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.5.darwin-10.9-amd64.tgz">cockroach-v24.1.5.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.5.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.5.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.5.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.5.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.5.darwin-11.0-arm64.tgz">cockroach-v24.1.5.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.5.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.5.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.5.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.5.windows-6.2-amd64.zip">cockroach-v24.1.5.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.5.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.5.windows-6.2-amd64.zip">cockroach-sql-v24.1.5.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.5
```

### General changes

* Upgraded the `grpc` version to v1.56.3.

### Enterprise edition changes

* Introduced the new <InternalLink version="v24.1" path="cluster-settings">cluster setting</InternalLink> `changefeed.protect_timestamp.lag`, which controls when a <InternalLink version="v24.1" path="change-data-capture-overview">changefeed's</InternalLink> protected timestamp is updated. The <InternalLink version="v24.1" path="architecture/storage-layer#protected-timestamps">protected timestamp</InternalLink> will only be updated if the set `changefeed.protect_timestamp.lag` value has passed between the last protected timestamp and the <InternalLink version="v24.1" path="how-does-an-enterprise-changefeed-work">changefeed high watermark</InternalLink>.
* <InternalLink version="v24.1" path="show-jobs#show-changefeed-jobs">`SHOW CHANGEFEED JOB`</InternalLink>, `SHOW CHANGEFEED JOBS`, and <InternalLink version="v24.1" path="show-jobs">`SHOW JOBS`</InternalLink> no longer expose user-sensitive information like `client_key`.
* 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.1" path="change-data-capture-overview">changefeeds</InternalLink> to the following sinks:
  * <InternalLink version="v24.1" path="changefeed-sinks#kafka">Kafka sinks</InternalLink>. If <InternalLink version="v24.1" path="cluster-settings">child metrics</InternalLink> are enabled, the metric will have a `kafka` label.
  * <InternalLink version="v24.1" path="changefeed-sinks#webhook-sink">Webhook sinks</InternalLink>. If <InternalLink version="v24.1" path="cluster-settings">child metrics</InternalLink> are enabled, the metric will have a `webhook` label.
  * <InternalLink version="v24.1" path="changefeed-sinks">Pub/Sub sinks</InternalLink>. If <InternalLink version="v24.1" path="cluster-settings">child metrics</InternalLink> are enabled, the metric will have a `pubsub` label.
  * <InternalLink version="v24.1" path="changefeed-for">SQL sink</InternalLink>. If <InternalLink version="v24.1" path="cluster-settings">child metrics</InternalLink> are enabled, the metric will have a `sql` label.

### SQL language changes

* The session setting <InternalLink version="v24.1" path="session-variables">`plan_cache_mode=force_generic_plan`</InternalLink> can now be used to force <InternalLink version="v24.1" path="savepoint#savepoints-and-prepared-statements">prepared statements</InternalLink> to use query plans that are <InternalLink version="v24.1" path="cost-based-optimizer">optimized</InternalLink> once, and reused in future executions without re-optimization, as long as it does not become stale due to <InternalLink version="v24.1" path="online-schema-changes">schema changes</InternalLink> or a collection of new <InternalLink version="v24.1" path="cost-based-optimizer#table-statistics">table statistics</InternalLink>. The setting takes effect during `EXECUTE` commands. <InternalLink version="v24.1" path="explain-analyze">`EXPLAIN ANALYZE`</InternalLink> includes a `plan type` field. If a generic query plan is optimized for the current execution, the `plan type` will be `generic, re-optimized`. If a generic query plan is reused for the current execution without performing optimization, the `plan type` will be `generic, reused`. Otherwise, the `plan type` will be `custom`.
* The session setting <InternalLink version="v24.1" path="session-variables">`plan_cache_mode=auto`</InternalLink> can now be used to instruct the system to automatically determine whether to use `custom` or `generic` query plans for the execution of a <InternalLink version="v24.1" path="savepoint#savepoints-and-prepared-statements">prepared statement</InternalLink>. Custom query plans are optimized on every execution, while generic plans are <InternalLink version="v24.1" path="cost-based-optimizer">optimized</InternalLink> once and reused on future executions as-is. Generic query plans are beneficial in cases where query optimization contributes significant overhead to the total cost of executing a query.

### Operational changes

* There are now structured <InternalLink version="v24.1" path="logging">logging events</InternalLink> that report connection breakage during node shutdown. Previously, the logs existed, but were unstructured. The logs appear in the <InternalLink version="v24.1" path="logging#ops">`OPS` logging channel</InternalLink>. There are two new events:
  * The `node_shutdown_connection_timeout` event is logged after the timeout defined by the <InternalLink version="v24.1" path="cluster-settings">`server.shutdown.connections.timeout`</InternalLink> cluster setting transpires, if there are still open SQL connections.
  * The `node_shutdown_transaction_timeout` event is logged after the timeout defined by the <InternalLink version="v24.1" path="cluster-settings">`server.shutdown.transactions.timeout`</InternalLink> cluster setting transpires, if there are still open transactions on those SQL connections.
* 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 work as aggregate metrics if <InternalLink version="v24.1" path="cluster-settings">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 CockroachDB initiates. `rpc.client.bytes.ingress` is the number of TCP bytes received via gRPC on connections CockroachDB initiated.
* This commit adds two metrics: `changefeed.network.bytes_in` and `changefeed.network.bytes_out`. These metrics track the number of bytes sent by the individual <InternalLink version="v24.1" path="change-data-capture-overview">changefeeds</InternalLink> to different <InternalLink version="v24.1" path="changefeed-sinks">sinks</InternalLink>.

### DB Console changes

* The user experience for <InternalLink version="v24.1" path="ui-overview-dashboard">metrics</InternalLink> charges in the <InternalLink version="v24.1" path="ui-overview">DB Console</InternalLink> now has hover behavior that focuses on individual lines and shows values under the mouse pointer.
* Users with the <InternalLink version="v24.1" path="security-reference/authorization#supported-privileges">`VIEWACTIVITY`</InternalLink> privilege can download statement bundles from the <InternalLink version="v24.1" path="ui-overview">DB Console</InternalLink>.
* Users with the <InternalLink version="v24.1" path="security-reference/authorization#supported-privileges">`VIEWACTIVITY`</InternalLink> privilege can now request, view, and cancel statement bundles in the <InternalLink version="v24.1" path="ui-overview">DB Console</InternalLink>.
* The <InternalLink version="v24.1" path="ui-overview">DB Console</InternalLink> will show a notification alerting customers without an Enterprise license to [upcoming license changes](https://www.cockroachlabs.com/enterprise-license-update) with a link to more information.

### Bug fixes

* Previously, <InternalLink version="v24.1" path="online-schema-changes">declarative</InternalLink> and legacy <InternalLink version="v24.1" path="online-schema-changes">schema changes</InternalLink> were incorrectly allowed to be run 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.1" path="expression-indexes">expression index</InternalLink> where the expression evaluates to an `ENUM` type, for example, `CREATE INDEX ON t ((col::an_enum))`.
* Fixed a bug where `NaN` or `Inf` could not be used as the default value for a parameter in <InternalLink version="v24.1" path="create-function">`CREATE FUNCTION`</InternalLink> statements.
* Fixed a bug in which <InternalLink version="v24.1" path="select-for-update">`SELECT... FOR UPDATE` and `SELECT... FOR SHARE`</InternalLink> queries using <InternalLink version="v24.1" path="select-for-update#wait-policies">`SKIP LOCKED`</InternalLink> and a <InternalLink version="v24.1" path="limit-offset">`LIMIT` and/or an `OFFSET`</InternalLink> could return incorrect results under <InternalLink version="v24.1" 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.1" path="select-for-update">`SELECT... FOR UPDATE` or `SELECT... FOR SHARE`</InternalLink> queries using <InternalLink version="v24.1" path="select-for-update#wait-policies">`SKIP LOCKED`</InternalLink> could still block on locked rows when using <InternalLink version="v24.1" path="session-variables">`optimizer_use_lock_op_for_serializable`</InternalLink> under <InternalLink version="v24.1" path="demo-serializable">`SERIALIZABLE`</InternalLink> isolation. This bug was present when `optimizer_use_lock_op_for_serializable` was introduced in v24.1.0.
* Function input parameters for <InternalLink version="v24.1" path="user-defined-functions">user-defined functions</InternalLink> can no longer be of the `VOID` type, which matches the behavior of PostgreSQL.
* Fixed a bug in the public preview of <InternalLink version="v24.1" path="cockroach-start#write-ahead-log-wal-failover">Write Ahead Log (WAL) Failover</InternalLink> that could prevent a node from starting if it crashed during a failover.
* <InternalLink version="v24.1" path="cockroach-start">Starting nodes</InternalLink> could fail with: `could not insert session...: unexpected value`, if an ambiguous result error was encountered when inserting into the `sqlliveness` table.
* Internally issued queries that are not initiated within a <InternalLink version="v24.1" path="show-sessions">SQL session</InternalLink> no longer respect a <InternalLink version="v24.1" path="session-variables">statement timeout</InternalLink>. This includes: background <InternalLink version="v24.1" path="show-jobs">jobs</InternalLink>, queries issued by the <InternalLink version="v24.1" path="ui-overview">DB Console</InternalLink> that perform introspection, and the <InternalLink version="v24.1" path="cockroachcloud/sql-shell">Cloud SQL shell</InternalLink>.
* Fixed a rare bug in <InternalLink version="v24.1" 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.1" path="with-storage-parameter#table-parameters">`schema_locked` table parameter</InternalLink> did not prevent a table from being referenced by a <InternalLink version="v24.1" path="foreign-key">foreign key</InternalLink>.
* Fixed a bug where the <InternalLink version="v24.1" path="session-variables">`require_explicit_primary_keys` session variable</InternalLink> would aggressively prevent all <InternalLink version="v24.1" path="create-table">`CREATE TABLE`</InternalLink> statements from working.
* Fixed a slow-building memory leak when using <InternalLink version="v24.1" path="gssapi_authentication">Kerberos authentication</InternalLink>.
* Fixed a potential memory leak in <InternalLink version="v24.1" path="change-data-capture-overview">changefeeds</InternalLink> using a <InternalLink version="v24.1" path="changefeed-sinks#cloud-storage-sink">cloud storage sink</InternalLink>. The memory leak could occur if both the cluster settings <InternalLink version="v24.1" path="cluster-settings">`changefeed.fast_gzip.enabled`</InternalLink> and <InternalLink version="v24.1" path="cluster-settings">`changefeed.cloudstorage.async_flush.enabled`</InternalLink> are set to `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.

## v24.1.4

Release Date: August 29, 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.1.4.linux-amd64.tgz">cockroach-v24.1.4.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.4.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.4.linux-amd64.tgz">cockroach-sql-v24.1.4.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.4.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.4.linux-arm64.tgz">cockroach-v24.1.4.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.4.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.4.linux-arm64.tgz">cockroach-sql-v24.1.4.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.4.darwin-10.9-amd64.tgz">cockroach-v24.1.4.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.4.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.4.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.4.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.4.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.4.darwin-11.0-arm64.tgz">cockroach-v24.1.4.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.4.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.4.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.4.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.4.windows-6.2-amd64.zip">cockroach-v24.1.4.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.4.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.4.windows-6.2-amd64.zip">cockroach-sql-v24.1.4.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.4
```

### Security updates

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

### Enterprise edition changes

* Added a new Kafka <InternalLink version="v24.1" 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 `changefeed.new_kafka_sink_enabled` <InternalLink version="v24.1" path="cluster-settings">cluster setting</InternalLink>, which is disabled by default.
* The new Kafka sink, enabled with <InternalLink version="v24.1" path="cluster-settings">`changefeed.new_kafka_sink_enabled`</InternalLink>, as well as the Google Cloud Pub/Sub sink, now display notices indicating the topics that a changefeed will emit to.

### SQL language changes

* Added a new `sql.auth.grant_option_for_owner.enabled` <InternalLink version="v24.1" path="cluster-settings">cluster setting</InternalLink> to prevent the <InternalLink version="v24.1" path="show-grants#privilege-grants">`GRANT OPTION`</InternalLink> from being given to the owner of an object by default. The cluster setting defaults to `true`, retaining the existing behavior; when it is set to `false`, the `GRANT OPTION` is not implicitly given to an object's owner. The owner will still have all privileges on an object except the ability to grant privileges to other users.

### Command-line changes

* A `--locality-file` flag is now available on the <InternalLink version="v24.1" path="cockroach-start">`cockroach start`</InternalLink> and <InternalLink version="v24.1" path="cockroach-start-single-node">`cockroach start-single-node`</InternalLink> commands. This allows specifying node <InternalLink version="v24.1" path="cockroach-start#locality">locality</InternalLink> (typically a `region` value) as a file, rather than by using the <InternalLink version="v24.1" path="cockroach-start#locality">`--locality` flag</InternalLink>.

### DB Console changes

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

### Bug fixes

* Fixed a bug introduced in v23.2.0 in which CockroachDB would hit an internal error when evaluating <InternalLink version="v24.1" path="insert">`INSERT`s</InternalLink> into <InternalLink version="v24.1" path="alter-table#set-the-table-locality-to-regional-by-row">`REGIONAL BY ROW`</InternalLink> tables where the source was a <InternalLink version="v24.1" path="selection-queries#values-clause">`VALUES`</InternalLink> clause with a single row and at least one Boolean expression.
* Fixed a bug in which the <InternalLink version="v24.1" path="alter-table">`DISCARD`</InternalLink> statement was disallowed when the <InternalLink version="v24.1" path="session-variables">session setting</InternalLink> `default_transaction_read_only` was set to `on`.
* In the <InternalLink version="v24.1" path="ui-overview-dashboard#events-panel">DB Console event log</InternalLink>, <InternalLink version="v24.1" path="alter-role">`ALTER ROLE`</InternalLink> events now display correctly even when no <InternalLink version="v24.1" path="alter-role#role-options">role options</InternalLink> are included in the `ALTER ROLE` statement.
* Fixed a formatting issue with the `sql_sequence_cached_node` value of the <InternalLink version="v24.1" path="session-variables">`serial_normalization` session setting</InternalLink>. This could lead to an error connecting to CockroachDB if this value was set as the default for `serial_normalization` via the cluster setting <InternalLink version="v24.1" path="cluster-settings">`sql.defaults.serial_normalization`</InternalLink>.
* Fixed a bug where <InternalLink version="v24.1" path="alter-type#drop-a-value-in-a-user-defined-type">dropping `ENUM` values</InternalLink> that were referenced by <InternalLink version="v24.1" path="expression-indexes">index expressions</InternalLink> could fail with an error.
* Fixed a bug that caused a memory leak when executing SQL statements with <InternalLink version="v24.1" path="comment-on">comments</InternalLink>, 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.1" path="show-sessions">SQL session</InternalLink>. This bug had been present since v23.1.
* Fixed a bug where <InternalLink version="v24.1" path="online-schema-changes">schema changes</InternalLink> could hang if the lease rangefeed stopped receiving updates.
* Fixed small memory leaks that would occur during <InternalLink version="v24.1" path="change-data-capture-overview">changefeed</InternalLink> creation.
* Fixed a memory leak that could occur when specifying a non-existent <InternalLink version="v24.1" path="cluster-virtualization-overview">virtual cluster</InternalLink> name in the connection string.
* Fixed a bug where <InternalLink version="v24.1" path="create-index">`CREATE INDEX IF NOT EXISTS`</InternalLink> would not correctly short-circuit if the given index already existed.
* Fixed a bug in syntax validation, in which the `DESCENDING` clause was not allowed for non-terminal columns of an <InternalLink version="v24.1" path="inverted-indexes">inverted index</InternalLink>. Only the last column of an inverted index should be prevented from being `DESCENDING`. This is now properly checked.
* Fixed a bug where an <InternalLink version="v24.1" 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.1" path="computed-columns">computed column</InternalLink> is now blocked, even for `NULL` defaults. Previously, setting or dropping a default value on a computed column was a no-op.
* 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 had existed since v22.2 when <InternalLink version="v24.1" path="user-defined-functions">user-defined functions (UDFs)</InternalLink> were introduced.
* Fixed a bug where <InternalLink version="v24.1" path="cockroach-debug-zip">`debug zip`</InternalLink> would return an error while fetching unstructured/malformed logs.
* Fixed a bug where a hash-sharded <InternalLink version="v24.1" path="constraints">constraint</InternalLink> could not be created if it referred to columns that had a backslash in the name.
* Fixed a bug in which the output of <InternalLink version="v24.1" path="explain">`EXPLAIN (OPT, REDACT)`</InternalLink> for various `CREATE` statements was not redacted. This bug had existed since <InternalLink version="v24.1" path="explain#parameters">`EXPLAIN (REDACT)`</InternalLink> was introduced in v23.1 and affects the following statements:
  * `EXPLAIN (OPT, REDACT) CREATE TABLE`
  * `EXPLAIN (OPT, REDACT) CREATE VIEW`
  * `EXPLAIN (OPT, REDACT) CREATE FUNCTION`

## v24.1.3

Release Date: August 1, 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.1.3.linux-amd64.tgz">cockroach-v24.1.3.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.3.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.3.linux-amd64.tgz">cockroach-sql-v24.1.3.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.3.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.3.linux-arm64.tgz">cockroach-v24.1.3.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.3.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.3.linux-arm64.tgz">cockroach-sql-v24.1.3.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.3.darwin-10.9-amd64.tgz">cockroach-v24.1.3.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.3.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.3.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.3.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.3.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.3.darwin-11.0-arm64.tgz">cockroach-v24.1.3.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.3.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.3.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.3.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.3.windows-6.2-amd64.zip">cockroach-v24.1.3.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.3.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.3.windows-6.2-amd64.zip">cockroach-sql-v24.1.3.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.3
```

### SQL language changes

* <InternalLink version="v24.1" path="explain-analyze">`EXPLAIN ANALYZE`</InternalLink> statements are now supported when executed via Cloud Console <InternalLink version="v24.1" path="cockroachcloud/sql-shell">SQL shell</InternalLink>.
* Added the <InternalLink version="v24.1" 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.1" 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.

### Operational changes

* `crdb_internal.cluster_execution_insights.txt` and `crdb_internal.cluster_txn_execution_insights.txt` have been removed from the <InternalLink version="v24.1" 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.1" 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`.
* For the <InternalLink version="v24.1" path="logging#telemetry">TELEMETRY logging channel</InternalLink>, TCL `sampled_query` events will now be sampled at the rate specified by the setting <InternalLink version="v24.1" path="cluster-settings">`sql.telemetry.query_sampling.max_event_frequency`</InternalLink>, which is already used to limit the rate of sampling DML statements.

### Bug fixes

* Fixed a bug where collection of <InternalLink version="v24.1" path="cockroach-debug-zip">debug information</InternalLink> for very long-running <InternalLink version="v24.1" path="show-jobs">jobs</InternalLink> could use excessive space in the `job_info` system table and cause some interactions with the jobs system to become slow.
* Fixed a bug where a change to a <InternalLink version="v24.1" path="create-type">user-defined type (UDT)</InternalLink> could cause queries against tables using that type to fail with an error: `histogram.go:694: span must be fully contained in the bucket`. The change to the user-defined type could come directly from an <InternalLink version="v24.1" path="alter-type">`ALTER TYPE`</InternalLink> statement, or indirectly from an <InternalLink version="v24.1" path="alter-database#add-region">`ALTER DATABASE ADD REGION`</InternalLink> or <InternalLink version="v24.1" path="alter-database#drop-region">`DROP REGION`</InternalLink> statement (which implicitly change the <InternalLink version="v24.1" path="alter-table#set-the-table-locality-to-regional-by-row">`crdb_internal_region`</InternalLink> type). This bug has existed since UDTs were introduced in v20.2.
* Fixed a bug in which constant <InternalLink version="v24.1" path="sql-feature-support#scalar-expressions-and-boolean-formulas">`LIKE`</InternalLink> 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 the statistics estimation code in the <InternalLink version="v24.1" path="cost-based-optimizer">optimizer</InternalLink> so it does not use the empty histograms produced if <InternalLink version="v24.1" 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.
* Fixed a bug where <InternalLink version="v24.1" path="create-table">`CREATE TABLE`</InternalLink> statements with <InternalLink version="v24.1" path="expression-indexes">index expressions</InternalLink> could hit undefined column errors on <InternalLink version="v24.1" path="transactions#transaction-retries">transaction retries</InternalLink>.
* Fixed a bug where CockroachDB would hit an internal error when evaluating <InternalLink version="v24.1" path="insert">`INSERT`s</InternalLink> into <InternalLink version="v24.1" path="table-localities#regional-by-row-tables">`REGIONAL BY ROW`</InternalLink> tables where the source is a <InternalLink version="v24.1" path="selection-queries#values-clause">`VALUES` clause</InternalLink> with a single row and at least one boolean expression. The bug was introduced in v23.2.0.
* Fixed a bug in <InternalLink version="v24.1" path="cockroach-debug-tsdump">`cockroach debug tsdump`</InternalLink> where the command fails when a custom SQL port is used and the <InternalLink version="v24.1" path="cockroach-debug-tsdump#flags">`--format=raw`</InternalLink> flag is provided.
* Fixed a bug where a <InternalLink version="v24.1" path="user-defined-functions">user-defined function (UDF)</InternalLink> that shared a name with a <InternalLink version="v24.1" 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.1" path="sql-name-resolution#search-path">`search_path`</InternalLink> variable.
* Fixed a bug that caused <InternalLink version="v24.1" path="show-jobs">background jobs</InternalLink> to incorrectly respect a statement timeout.
* Fixed a bug where <InternalLink version="v24.1" path="alter-database#drop-region">`ALTER DATABASE... DROP REGION`</InternalLink> could fail if any tables under the given database have <InternalLink version="v24.1" path="expression-indexes">indexes on expressions</InternalLink>.
* Fixed a PostgreSQL incompatibility bug when inputting `public` as user name for <InternalLink version="v24.1" path="functions-and-operators">built-in functions</InternalLink> such as `has_database_privilege` and `has_schema_privilege`.
* Fixed a bug when <InternalLink version="v24.1" path="restore">restoring</InternalLink> a database with a <InternalLink version="v24.1" path="create-type#create-a-composite-data-type">composite type</InternalLink>.
* Fixed a bug where the <InternalLink version="v24.1" path="ui-databases-page">Databases</InternalLink> page crashed if the range information was not available.
* Fixed a bug where CockroachDB could incorrectly evaluate an <InternalLink version="v24.1" path="null-handling#nulls-and-simple-comparisons">`IS NOT NULL`</InternalLink> filter if it was applied to non- `NULL` tuples that had `NULL` elements, such as `(1, NULL)` or `(NULL, NULL)`. This bug has existed since v20.2.
* The `sql_sequence_cached_node` value of the <InternalLink version="v24.1" path="serial#modes-of-operation">`serial_normalization` setting</InternalLink> was not correctly formatted. This could lead to errors while connecting to CockroachDB if the default value of `serial_normalization` was set to `serial_normalization`. The formatting bug was fixed, which also fixes the errors when connecting.

### Performance improvements

* Starting a `cockroach` process will no longer flush buffered <InternalLink version="v24.1" path="logging-overview">logs</InternalLink> to configured <InternalLink version="v24.1" path="configure-logs#configure-log-sinks">logging sinks</InternalLink> unless the process is running under `systemd`, where cockroach runs with the `NOTIFY_SOCKET` environment variable.
* <InternalLink version="v24.1" 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 <InternalLink version="v24.1" path="performance-best-practices-overview#hot-spots">write hotspot</InternalLink> that can slow down foreground traffic.

### Contributors

This release includes 122 merged PRs by 39 authors.

## v24.1.2

Release Date: July 2, 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.1.2.linux-amd64.tgz">cockroach-v24.1.2.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.2.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.2.linux-amd64.tgz">cockroach-sql-v24.1.2.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.2.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.2.linux-arm64.tgz">cockroach-v24.1.2.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.2.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.2.linux-arm64.tgz">cockroach-sql-v24.1.2.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.2.darwin-10.9-amd64.tgz">cockroach-v24.1.2.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.2.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.2.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.2.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.2.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.2.darwin-11.0-arm64.tgz">cockroach-v24.1.2.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.2.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.2.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.2.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.2.windows-6.2-amd64.zip">cockroach-v24.1.2.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.2.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.2.windows-6.2-amd64.zip">cockroach-sql-v24.1.2.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.2
```

### Enterprise edition changes

* Added error messages for unsupported Apache Pulsar <InternalLink version="v24.1" path="create-changefeed">changefeed</InternalLink> sink parameters, e.g. `topic_prefix is not yet supported`.
* Fixed a bug that was present since v22.2 where <InternalLink version="v24.1" path="change-data-capture-overview">changefeeds</InternalLink> with long-running <InternalLink version="v24.1" path="create-changefeed">initial scans</InternalLink> might incorrectly restore checkpoint job progress and drop events during <InternalLink version="v24.1" path="changefeed-messages#duplicate-messages">changefeed restarts</InternalLink> due to transient errors or node restarts. The bug was most likely to occur in clusters with the following contributing factors:
  * The `changefeed.shutdown_checkpoint.enabled` <InternalLink version="v24.1" path="cluster-settings">cluster setting</InternalLink> was enabled.
  * The cluster settings `changefeed.frontier_checkpoint_frequency` and `low changefeed.frontier_highwater_lag_checkpoint_threshold` were set low, which resulted in the initial scan taking many multiples of the configured frequency to complete.
  * There were multiple target tables with significant differences in row counts in one changefeed.
  * The changefeed target tables were large with many ranges.
  * The initial scan took a long time to complete (an hour or longer).

### Operational changes

* Improved <InternalLink version="v24.1" path="ui-cluster-overview-page#capacity-metrics">disk usage metric reporting</InternalLink> over volumes that dynamically change their size over the life of the `cockroach` process.
* The default values for the following <InternalLink version="v24.1" path="cluster-settings">cluster settings</InternalLink> were updated from `100000` to `7500`. These settings control the maximum number of <InternalLink version="v24.1" path="ui-statements-page#sql-statement-fingerprints">fingerprints</InternalLink> (distinct combinations of statements and <InternalLink version="v24.1" path="transactions">transactions</InternalLink> ) CockroachDB can store in memory, with stats being flushed on a `10m` <InternalLink version="v24.1" path="interval">interval</InternalLink> by default. You can increase these settings if your workload produces more unique fingerprints than this amount within the flush interval, and you notice that SQL stats are missing.
  * <InternalLink version="v24.1" path="cluster-settings">`sql.metrics.max_mem_stmt_fingerprints`</InternalLink>
  * <InternalLink version="v24.1" path="cluster-settings">`sql.metrics.max_mem_txn_fingerprints`</InternalLink>

### DB Console changes

* The favicon now renders properly for <InternalLink version="v24.1" path="ui-overview">DB Console</InternalLink>, along with other image files.

### Bug fixes

* <InternalLink version="v24.1" path="show-types">`SHOW TYPES`</InternalLink> now includes <InternalLink version="v24.1" path="create-type#create-a-composite-data-type">user-defined composite types</InternalLink>. It had omitted those types ever since composite types were added in v23.1.
* Fixed a crash introduced in v24.1.0-beta.2 that could occur when planning <InternalLink version="v24.1" path="cost-based-optimizer#table-statistics">statistics</InternalLink> collection on a table with a <InternalLink version="v24.1" path="computed-columns">virtual computed column</InternalLink> using a <InternalLink version="v24.1" path="create-type">user-defined type</InternalLink> when the <InternalLink version="v24.1" path="cluster-settings">cluster setting</InternalLink> `sql.stats.virtual_computed_columns.enabled` (introduced in v24.1.0-alpha.1) was set to `true`.
* Fixed handling in the <InternalLink version="v24.1" path="online-schema-changes">declarative schema changer</InternalLink> when columns are included in the `STORING()` clause of a <InternalLink version="v24.1" path="create-index">`CREATE INDEX`</InternalLink> statement. CockroachDB now checks if the column is virtual up-front, and properly detects when a column is already handled by an existing <InternalLink version="v24.1" path="indexes">`INDEX`</InternalLink> when the column name has UTF-8 characters.
* Fixed a bug where a change to a <InternalLink version="v24.1" path="create-type">user-defined type</InternalLink> could cause queries against tables using that type to fail with an error message like: `"histogram.go:694: span must be fully contained in the bucket"`. The change to the user-defined type could come directly from an <InternalLink version="v24.1" path="alter-type">`ALTER TYPE`</InternalLink> statement, or indirectly from an <InternalLink version="v24.1" path="alter-database#add-region">`ALTER DATABASE... ADD REGION`</InternalLink> or <InternalLink version="v24.1" path="alter-database#drop-region">`DROP REGION`</InternalLink> statement (which implicitly changes the `crdb_internal_region` type). This bug had existed since UDTs were introduced in v20.2.
* Fixed a bug where <InternalLink version="v24.1" path="logging#telemetry">telemetry logs</InternalLink> had the same <InternalLink version="v24.1" path="ui-statements-page#sql-statement-fingerprints">statement fingerprint</InternalLink> ID for different SQL statements.
* Fixed an issue where <InternalLink version="v24.1" path="alter-table#add-column">adding a column</InternalLink> with a default value of an empty <InternalLink version="v24.1" path="array">array</InternalLink> would not succeed.
* <InternalLink version="v24.1" 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.1" path="unique">unique constraint</InternalLink> on an expression.
* Fixed a bug where the <InternalLink version="v24.1" path="schema-design-overview#schemas">`public` schema</InternalLink> would be created with the wrong owner. Previously the <InternalLink version="v24.1" path="security-reference/authorization#roles">`admin` role</InternalLink> would own the `public` schema. Now, the database owner is also the owner of the `public` schema. The owner can be altered after the schema is created.
* Fixed a bug in v24.1, v23.2, and v23.1 where using the `changefeed.aggregator.flush_jitter` <InternalLink version="v24.1" path="cluster-settings">cluster setting</InternalLink> with the <InternalLink version="v24.1" path="create-changefeed">`min_checkpoint_frequency`</InternalLink> option set to `0` could cause panics.
* The log message `"expiration of liveness record... is not greater than expiration of the previous lease... after liveness heartbeat"` is no longer generated.
* Fixed a bug introduced in v23.2.0 in which CockroachDB would hit an internal error when evaluating <InternalLink version="v24.1" path="insert">`INSERT`s</InternalLink> into <InternalLink version="v24.1" path="table-localities#regional-by-row-tables">`REGIONAL BY ROW`</InternalLink> tables where the source was a `VALUES` clause with a single row and at least one boolean expression.

### Performance improvements

* Improved the efficiency of error handling in the <InternalLink version="v24.1" path="vectorized-execution">vectorized execution engine</InternalLink> to reduce the CPU overhead of statement timeout handling and reduce the potential for more statement timeouts.
* Some <InternalLink version="v24.1" path="security-reference/authorization#managing-privileges">privilege</InternalLink> checks when scanning the `crdb_internal.system_jobs` internal table now happen once before the scan, instead of once for each row. This improves performance for queries that read from `crdb_internal.system_jobs`.

### Miscellaneous

* A <InternalLink version="v24.1" path="create-changefeed">changefeed</InternalLink> optimization to reduce duplicates during aggregator restarts has been disabled due to poor performance.

### Contributors

This release includes 78 merged PRs by 35 authors.

## v24.1.1

Release Date: June 14, 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.1.1.linux-amd64.tgz">cockroach-v24.1.1.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.1.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.1.linux-amd64.tgz">cockroach-sql-v24.1.1.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.1.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.1.linux-arm64.tgz">cockroach-v24.1.1.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.1.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.1.linux-arm64.tgz">cockroach-sql-v24.1.1.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.1.darwin-10.9-amd64.tgz">cockroach-v24.1.1.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.1.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.1.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.1.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.1.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.1.darwin-11.0-arm64.tgz">cockroach-v24.1.1.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.1.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.1.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.1.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.1.windows-6.2-amd64.zip">cockroach-v24.1.1.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.1.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.1.windows-6.2-amd64.zip">cockroach-sql-v24.1.1.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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:v24.1.1
```

### Enterprise edition changes

* Fixed a bug introduced in v22.2 where a <InternalLink version="v24.1" path="change-data-capture-overview">changefeed</InternalLink> with a long-running <InternalLink version="v24.1" path="create-changefeed">initial scan</InternalLink> might incorrectly restore checkpoint job progress and drop events during a <InternalLink version="v24.1" path="changefeed-messages#duplicate-messages">changefeed restart</InternalLink> due to transient errors or node restarts. The bug was most likely to occur in clusters with the following contributing factors:
  * The `changefeed.shutdown_checkpoint.enabled` <InternalLink version="v24.1" path="cluster-settings">cluster setting</InternalLink> was enabled (in clusters running v23.2 and later).
  * The cluster settings `changefeed.frontier_checkpoint_frequency` and `low changefeed.frontier_highwater_lag_checkpoint_threshold` were set low, which resulted in the initial scan taking many multiples of the configured frequency to complete.
  * There were multiple target tables with significant differences in row counts in one changefeed.
  * The changefeed target tables were large with many ranges.
  * The initial scan took a long time to complete (an hour or longer).
* History retention jobs created upon completion of <InternalLink version="v24.1" path="physical-cluster-replication-overview">cluster replication</InternalLink> no longer erroneously indicate that they failed when they expire.

### SQL language changes

* The <InternalLink version="v24.1" path="cost-based-optimizer">optimizer</InternalLink> can now plan constrained scans over partial indexes in more cases, particularly on partial indexes with predicates referencing <InternalLink version="v24.1" path="computed-columns">virtual computed columns</InternalLink>.
* The storage parameter `ttl_delete_rate_limit`, which determines the rate limit for deleting expired rows, is now set to `100` by default.
* CockroachDB no longer limits precision when converting <InternalLink version="v24.1" path="architecture/glossary#data-types">spatial data types</InternalLink> to JSON.
* The `optimizer_push_offset_into_index_join` <InternalLink version="v24.1" path="session-variables">session setting</InternalLink> has been added. When enabled, the <InternalLink version="v24.1" path="cost-based-optimizer">optimizer</InternalLink> will attempt to push offset expressions into index join expressions to produce more efficient query plans. The setting is enabled by default on v24.1 and later, and disabled on v23.2.
* The default value of the `sql.defaults.results_buffer.size` <InternalLink version="v24.1" path="cluster-settings">cluster setting</InternalLink> has been changed from 16KiB to 512KiB. This reduces the chance that clients using <InternalLink version="v24.1" path="read-committed">`READ COMMITTED`</InternalLink> transactions will encounter errors that cannot automatically be retried within CockroachDB.

### Operational changes

* The default values for the <InternalLink version="v24.1" 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 `5000`, thus lowering the default limits for in-memory statement and transaction fingerprints.
* The new `sql.pgwire.pipeline.count` <InternalLink version="v24.1" path="metrics">gauge metric</InternalLink> shows the number of wire protocol commands that have been received by the server, but have not yet begun processing. This metric will only grow if clients are using the "pipeline mode" of the PostgreSQL wire protocol.
* The `client_authentication_ok` and `client_session_end` messages are now logged to the `SESSIONS` <InternalLink version="v24.1" path="logging-overview#logging-channels">log channel</InternalLink> unconditionally. Previously, these would be logged only if the `server.auth_log.sql_sessions.enabled` <InternalLink version="v24.1" path="cluster-settings">cluster setting</InternalLink> was set to `true`. All other `SESSIONS` log messages are logged only if `server.auth_log.sql_sessions.enabled` or `server.auth_log.sql_connections.enabled` are set to `true`. To prevent logging of `client_authentication_ok` or `client_session_end` messages, you can optionally disable the `SESSIONS` log channel.

### DB Console changes

* Fixed a bug where the <InternalLink version="v24.1" path="physical-cluster-replication-monitoring">replication lag metric</InternalLink> would falsely report high lag for multi-node clusters and on cutover.
* Fixed a bug that caused <InternalLink version="v24.1" path="ui-sql-dashboard">**SQL Activity**</InternalLink> entries sorted by `% of Runtime` to be sorted incorrectly.
* The "Admission Delay Rate", "Admission Work Rate", and "Requests Waiting For Flow Tokens" time-series charts have been removed from the DB Console. These charts can be difficult to interpret and provide little value for overload investigations.
* The <InternalLink version="v24.1" path="ui-overload-dashboard">**Overload** dashboard</InternalLink> now includes descriptions for all metrics.
* Metrics on the <InternalLink version="v24.1" path="ui-overload-dashboard">**Overload** dashboard</InternalLink> have been reordered to improve their categorization. The metrics are now roughly in the following order: 1. Metrics to help determine which resource is constrained (IO, CPU); 2. Metrics to narrow down which <InternalLink version="v24.1" path="admission-control">admission control</InternalLink> queues are seeing requests waiting; 3. More advanced metrics about system health (goroutine scheduler, L0 sublevels, etc.).
* New metrics `cr.store.storage.l0-sublevels` and `cr.node.go.scheduler_latency-p99.9` on the <InternalLink version="v24.1" path="ui-overload-dashboard">**Overload** dashboard</InternalLink> provide better visibility into overloaded resources.
* There are now four separate graphs for Admission Queue Delay: 1. Foreground (regular) CPU work; 2. Store (IO) work; 3. Background (elastic) CPU work; 4. Replication Admission Control (store overload on replicas).

### Bug fixes

* Fixed a bug that would occur when <InternalLink version="v24.1" path="alter-type">`ALTER TYPE... DROP VALUE`</InternalLink> is followed by `DROP SCHEMA CASCADE...` in the same transaction. Previously, the `ALTER TYPE` schema change would get queued up to run at commit time, but by that point, the type may have already been removed, so the commit could fail.
* Tables are now automatically repaired when the errors `invalid inbound foreign key... origin table ID should be...` or `invalid outbound foreign key... reference table ID should be...` occur.
* Fixed a bug where a failed <InternalLink version="v24.1" path="restore">`RESTORE`</InternalLink> could not be retried without manual intervention.
* Fixed a bug introduced in alpha versions of v23.1 where calling a routine could result in an unexpected `function... does not exist` error. The bug is triggered when the routine is called twice using the exact same SQL query, and either: (a) the routine has polymorphic arguments, or: (b) between the two calls, the routine is replaced by a routine with the same name and different parameters.
* Fixed a rare bug where a lease transfer could lead to a `side-transport update saw closed timestamp regression` panic. The bug could occur when a node was overloaded and <InternalLink version="v24.1" path="cluster-setup-troubleshooting#node-liveness-issues">failing to heartbeat its node liveness record</InternalLink>.
* Fixed a crash introduced in v24.1.0-beta.2 that could occur when planning statistics collection on a table with a <InternalLink version="v24.1" path="computed-columns">virtual computed column</InternalLink> using a <InternalLink version="v24.1" path="create-type">user-defined type</InternalLink> when the newly-introduced <InternalLink version="v24.1" path="cluster-settings">cluster setting</InternalLink> `sql.stats.virtual_computed_columns.enabled` is set to `true`. (The setting was introduced in v24.1.0-alpha.1, and defaults to `true`.)
* Fixed a bug where an <InternalLink version="v24.1" path="alter-table#alter-primary-key">`ALTER TABLE... ALTER PRIMARY KEY`</InternalLink> statement could hang if the table had any indexes that were referred to by <InternalLink version="v24.1" path="views">views</InternalLink> or <InternalLink version="v24.1" path="functions-and-operators">functions</InternalLink> using the `FORCE INDEX` clause.
* Fixed a bug introduced in v24.1.0 where the `max_decimal_digits` argument of the `st_geojson` <InternalLink version="v24.1" path="functions-and-operators#built-in-functions">builtin function</InternalLink> was ignored and the default was used instead.
* Scattering a range with a replication factor of 1 now no longer erroneously up-replicates the range to two replicas. Leases will also no longer thrash between nodes when perturbed with a replication factor of 1.
* Fixed a bug where, if the `ttl_row_stats_poll_interval` storage parameter was non-zero for a table with <InternalLink version="v24.1" path="row-level-ttl">row-level TTL</InternalLink> enabled, the queries issued to update row statistics could block the job from completing. Now, if the job completes, these statistics queries are cancelled. This means that the `jobs.row_level_ttl.total_rows` and `jobs.row_level_ttl.total_expired_rows` metrics will report `0` if the job finishes before the row stats queries complete.
* Fixed a bug where a <InternalLink version="v24.1" path="drop-role">`DROP ROLE`</InternalLink> or <InternalLink version="v24.1" path="drop-user">`DROP USER`</InternalLink> command could leave references behind inside types, which could prevent subsequent <InternalLink version="v24.1" path="show-grants">`SHOW GRANTS`</InternalLink> commands from working.
* Fixed a bug where the `results_buffer_size` <InternalLink version="v24.1" path="session-variables">session variable</InternalLink> could not be configured by using the "options" query parameter in the connection string, but only as a top-level query parameter. Now, `results_buffer_size` can be configured in either part of the connection string. This variable still cannot be changed with the <InternalLink version="v24.1" path="set-vars">`SET`</InternalLink> command after the session begins.
* Fixed a bug introduced in v20.2 where a change to a <InternalLink version="v24.1" path="create-type">user-defined type</InternalLink> could cause queries against tables using that type to fail with an error message like `histogram.go:694: span must be fully contained in the bucket`. The change to the user-defined type could come directly from an <InternalLink version="v24.1" path="alter-type">`ALTER TYPE`</InternalLink> statement, or indirectly from an <InternalLink version="v24.1" path="alter-database#add-region">`ALTER DATABASE... ADD REGION`</InternalLink> or <InternalLink version="v24.1" path="alter-database#drop-region">`DROP REGION`</InternalLink> statement (which implicitly change the `crdb_internal_region` type).

### Performance improvements

* Improved the efficiency of error handling in the <InternalLink version="v24.1" path="vectorized-execution">vectorized execution engine</InternalLink> in order to reduce the CPU overhead of statement timeout handling and reduce the potential for more statement timeouts.
* Due to its poor performance, a <InternalLink version="v24.1" path="change-data-capture-overview">changefeed</InternalLink> optimization that aimed to reduce duplicates during aggregator restarts due to its bad performance has been disabled.

### Contributors

This release includes 173 merged PRs by 42 authors.

## v24.1.0

Release Date: May 20, 2024

With the release of CockroachDB v24.1, 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-1-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.1.0.linux-amd64.tgz">cockroach-v24.1.0.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0.linux-amd64.tgz">cockroach-sql-v24.1.0.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.0.linux-arm64.tgz">cockroach-v24.1.0.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0.linux-arm64.tgz">cockroach-sql-v24.1.0.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.0.darwin-10.9-amd64.tgz">cockroach-v24.1.0.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.0.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.0.darwin-11.0-arm64.tgz">cockroach-v24.1.0.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.0.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.0.windows-6.2-amd64.zip">cockroach-v24.1.0.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0.windows-6.2-amd64.zip">cockroach-sql-v24.1.0.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.0
```

### Feature highlights

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

* **Feature categories**
  * [Performance](#v24-1-0-performance)
  * [Change data capture](#v24-1-0-change-data-capture)
  * [Recovery](#v24-1-0-recovery)
  * [Security](#v24-1-0-security)
  * [Migrations](#v24-1-0-migrations)
  * [SQL](#v24-1-0-sql)
  * [Operations](#v24-1-0-operations)
  * [Observability](#v24-1-0-observability)
* **Additional information**
  * [Backward-incompatible changes](#v24-1-0-backward-incompatible-changes)
  * [Deprecations](#v24-1-0-deprecations)
  * [Features that require upgrade finalization](#features-that-require-upgrade-finalization)
  * [Known limitations](#v24-1-0-known-limitations)
  * [Additional resources](#v24-1-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.1" path="licensing-faqs">Licensing FAQ</InternalLink>.
</Note>

#### Performance

<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>WAL (Write-Ahead Logging) Failover<br /><br />When a CockroachDB node is configured to run with multiple stores, you can mitigate some effects of disk stalls by configuring the node to <InternalLink path="cockroach-start#write-ahead-log-wal-failover">failover the store's write-ahead log (WAL)</InternalLink> to another store's data directory.<br /><br />This feature is in preview.</td><td>24.1</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><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>Autocommit DDL<br /><br />In 24.1 we have added the <code>autocommit\_before\_ddl</code><InternalLink path="session-variables#supported-variables">session variable</InternalLink>. When set to true, any schema change statement that is sent during an explicit transaction will cause the transaction to commit before executing the schema change. This setting can be used to improve compatibility with some tools that do not work well due to our limitations with schema changes in explicit transactions. It also can be used to use schema changes under <code>READ COMMITTED</code> more easily, without needing to teach the schema changer about <code>READ COMMITTED</code>.</td><td>24.1</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>Statistics for virtual computed columns<br /><br />CockroachDB now collects statistics for <InternalLink path="computed-columns#virtual-computed-columns">virtual computed columns</InternalLink>, making it possible to optimize query plans for tables that have these columns. Customers will see better query performance for queries that involve virtual computed columns.<br /><br />For more information, you can also view a <a href="https://youtu.be/5D9jUV8Vs_U">video demo</a>.</td><td>24.1</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>Write Amplification Improvements<br /><br />A number of <InternalLink path="architecture/storage-layer">Pebble</InternalLink> improvements are now on by default, leading to a reduction in <InternalLink path="architecture/storage-layer#inverted-lsms">write amplification</InternalLink>. Of particular note, a vast majority of range snapshots previously ingested into L0 are now ingested directly into L6 in the <InternalLink path="architecture/storage-layer#log-structured-merge-trees">LSM</InternalLink>, reducing write and read amplification with positive effects to node stability and SQL performance.</td><td>24.1</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>Increased SLA for multi-region Dedicated clusters<br /><br />CockroachDB Dedicated multi-region clusters now offer a <a href="https://www.cockroachlabs.com/cloud-terms-and-conditions/cockroachcloud-technical-service-level-agreement">five-nines (99.999%) availability target</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></tbody></table>

#### 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>Improved performance for changefeeds at scale<br /><br /><InternalLink path="advanced-changefeed-configuration#mux-rangefeeds">Mux rangefeed</InternalLink> is a subsystem that improves the performance of <InternalLink path="create-and-configure-changefeeds#enable-rangefeeds">rangefeeds</InternalLink> with scale. In v24.1, Mux rangefeeds are enabled by default.</td><td>24.1</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>Emit changefeed messages to an Azure Event Hub<br /><br />Changefeeds can emit messages to an <InternalLink path="changefeed-examples#create-a-changefeed-connected-to-an-azure-event-hubs-sink">Azure Event Hub</InternalLink>, which is compatible with Apache Kafka. You can use the Kafka changefeed and sink configuration options.</td><td>24.1</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>Google Cloud Pub/Sub sink for changefeeds is now generally available<br /><br />The changefeed <InternalLink path="changefeed-sinks#google-cloud-pub-sub">sink for Google Cloud Pub/Sub</InternalLink> is GA.</td><td>24.1</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>Filter changefeed messages based on cluster, SQL session, or row-level TTL jobs<br /><br />Use the <code>disable\_changefeed\_replication</code> session variable to prevent changefeeds from emitting messages for any changes during that session. Also in v24.1, you can enable the <code>ignore\_disable\_changefeed\_replication</code> option to ignore the storage parameter or cluster setting that disables changefeed replication. These <InternalLink path="changefeed-messages#filtering-changefeed-messages">settings</InternalLink> can be useful to manage multiple changefeed use cases on the same table.</td><td>24.1</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>Set Kafka quotas per changefeed<br /><br />For <InternalLink path="changefeed-sinks#kafka-sink-configuration">Kafka sinks</InternalLink>, implement a resource usage limit per changefeed by setting a client ID and quota in your Kafka server's configuration.</td><td>24.1</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>

#### Recovery

<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>Physical Cluster Replication is now generally available<br /><br /><InternalLink path="physical-cluster-replication-overview">Physical Cluster Replication</InternalLink> is an asynchonous replication feature that allows your cluster to recover from full-cluster failure with a low RPO and RTO. In 24.1, it is a GA feature, requiring an Enterprise license, and only available for self-hosted CockroachDB deployments. For more information, refer to the <InternalLink path="physical-cluster-replication-overview">Physical Cluster Replication overview</InternalLink> and a <a href="https://www.cockroachlabs.com/blog/232-physical-cluster-replication">blog post about Physical Cluster Replication</a>.</td><td>24.1</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><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></tbody></table>

#### Security

<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>Private connectivity in CockroachDB Dedicated with Google Cloud Private Service Connect<br /><br /><InternalLink version="cockroachcloud" path="connect-to-your-cluster#establish-private-connectivity">Private connectivity</InternalLink> using Private Service Connect is now available in preview for CockroachDB Dedicated clusters on GCP. For more information, refer to <InternalLink version="cockroachcloud" path="connect-to-your-cluster#establish-private-connectivity">Establish Private Connectivity</InternalLink> and a <a href="https://youtu.be/lcPnFEv0_eE">video about how to set it up</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>Support for matching against SUBJECT<br /><br />When using certificate based authentication, CockroachDB now supports mapping of SQL user roles to <InternalLink path="certificate-based-authentication-using-the-x509-subject-field">values in the Subject field of the X.509 certificate</InternalLink> used for TLS authentication.<br /><br />Subject mapping is useful if:<br /><br />- You run your own Certificate Authority (CA) infrastructure.<br /><br />- You need to use your existing CA infrastructure to manage SQL user authentication.<br /><br />- You need to use the same CA for multiple CockroachDB clusters.</td><td>24.1</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" /></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><InternalLink path="molt/molt-fetch">MOLT Fetch</InternalLink> is GA. MOLT Fetch automatically imports data from a PostgreSQL, MySQL, or CockroachDB source to a target CockroachDB database. If the fetch process encounters an error, data import can be continued from the point where it was interrupted. MOLT Fetch can be configured to replicate ongoing changes on the source database to CockroachDB following the initial data load.</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>Stored Procedures and UDF Improvements<br /><br />Support for PL/pgSQL, user-defined functions, and stored procedures is now expanded:<br /><br />- <InternalLink path="create-procedure#create-a-stored-procedure-that-uses-out-and-inout-parameters">OUT and INOUT</InternalLink> parameters can be specified.<br /><br />- PL/pgSQL <InternalLink path="plpgsql#exit-and-continue-statements">EXIT and CONTINUE statements</InternalLink> can be used together with conditions.<br /><br />- UDFs can <InternalLink path="create-function#create-a-function-that-invokes-a-function">call other UDFs</InternalLink>.<br /><br />- Stored procedures can <InternalLink path="create-procedure#create-a-stored-procedure-that-calls-a-procedure">invoke other stored procedures</InternalLink> using a <InternalLink path="plpgsql#call-a-procedure">PL/pgSQL CALL statement</InternalLink>.<br /><br />- <InternalLink path="plpgsql#control-transactions">Transaction control within PL/pgSQL blocks</InternalLink> is possible using COMMIT, ROLLBACK, and SET TRANSACTION statements.<br /><br />For more information, you can also view a <a href="https://youtu.be/8M_ISTZMAis">video demo</a>.</td><td>24.1</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>Read Committed Isolation in GA<br /><br />Read Committed isolation is now GA. Under <code>READ COMMITTED</code> isolation, DDL operations can be auto-committed, and <code>RETRY\_SERIALIZABLE</code> errors are absent. This offers a simpler migration path for applications and removes the need for client-side retry handling, which is necessary under <code>SERIALIZABLE</code> isolation.<br /><br />For more information, you can also view a <a href="https://youtu.be/RX5SYAap57s">video about using Read Committed isolation</a> and the blog post <a href="https://www.cockroachlabs.com/blog/232-read-committed-no-more-anomaly-tables">Isolation levels without the anomaly table</a>.</td><td>24.1</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>SELECT FOR SHARE updates<br /><br />A shared lock that is acquired explicitly using <InternalLink path="select-for-update#for-share-usage"><code>SELECT FOR SHARE</code></InternalLink> or implicitly by a read-committed transaction, can now be re-acquired with higher strength by either using a <code>SELECT FOR UPDATE</code> statement or by writing to the key.</td><td>24.1</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>SHOW DEFAULT SESSION VARIABLES FOR ROLE<br /><br />Previously, a database administrator could discover which session variables were set for a role only by switching into to that user or querying a system table. The new command <InternalLink path="show-default-session-variables-for-role"><code>SHOW DEFAULT SESSION VARIABLES FOR ROLE</code></InternalLink> shows the database administrator the default values for session variables applied to a given user.</td><td>24.1</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>New Regions for CockroachDB Dedicated<br /><br />Cockroach Cloud is now available in additional Azure regions. This expansion enhances our global reach and offers more options for deploying resilient, distributed databases with low latency and high availability.<br /><br />With these <InternalLink version="releases" path="cloud">new regions</InternalLink>, you can now select a geographical location that best fits your needs, reducing data latency and ensuring compliance with regional data residency regulations. Deploying in a region close to your service or customers means improved performance and a better user experience.</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>Organize Cloud clusters using Folders<br /><br /><InternalLink version="cockroachcloud" path="folders">Folders</InternalLink> help users organize and manage access for Clusters by projects, teams or business units. This feature is now in public preview and available to all Cloud organizations. For additional details, refer to the <InternalLink version="releases" path="cloud#may-12-2024">release note.</InternalLink></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>CockroachDB Cloud Terraform provider IAM enhancements<br /><br />The <a href="https://registry.terraform.io/providers/cockroachdb/cockroach/latest">CockroachDB Cloud Terraform provider</a> has new resources for User Role Grant and Service Accounts, and a new data source for Folders. These new features improve customers’ ability to manage secure access to data, API, and infrastructure on CockroachDB Cloud.</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></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 supports a Prometheus-compatibile metric scrape endpoint.<br /><br />The <InternalLink version="cockroachcloud" path="export-metrics?filters=prometheus-metrics-export">Prometheus-compatibile metric scrape endpoint</InternalLink> for CockroachDB Dedicated is generally available.</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>Export CockroachDB Dedicated metrics to Azure Monitor<br /><br />CockroachDB Dedicated supports <InternalLink version="cockroachcloud" path="export-metrics?filters=azure-monitor-metrics-export">exporting metrics to Azure Monitor</InternalLink> in limited access. Contact your Cockroach Labs account team for access.</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>Export CockroachDB Dedicated logs to Azure Monitor<br /><br />CockroachDB Dedicated supports <InternalLink version="cockroachcloud" path="export-logs?filters=azure-monitor-log-export">exporting logs to Azure Monitor</InternalLink> in limited access. Contact your Cockroach Labs account team for access.</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></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 migration 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

Before <InternalLink version="v24.1" path="upgrade-cockroach-version">upgrading to CockroachDB v24.1</InternalLink>, be sure to review the following backward-incompatible changes, as well as [key cluster setting changes](#v24-1-0-cluster-settings), and adjust your deployment as necessary.

* <InternalLink version="v24.1" path="as-of-system-time">`AS OF SYSTEM TIME`</InternalLink> queries can no longer use a timestamp followed by a question mark to signify a future-time value. This was an undocumented syntax.
* The <InternalLink version="v24.1" path="read-committed">`READ COMMITTED`</InternalLink> isolation level now requires the cluster to have a valid [enterprise license](https://cockroachlabs.com/docs/v24.1/licensing-faqs#obtain-a-license). Otherwise, transactions which are configured to run as `READ COMMITTED` will be upgraded to <InternalLink version="v24.1" path="demo-serializable">`SERIALIZABLE`</InternalLink>, as described in the next note.
* The `sql.txn.read_committed_isolation.enabled` <InternalLink version="v24.1" path="cluster-settings">cluster setting</InternalLink> is now `true` by default. As a result for enterprise users, <InternalLink version="v24.1" path="read-committed">`READ COMMITTED`</InternalLink> transactions are **not** automatically upgraded to <InternalLink version="v24.1" path="demo-serializable">`SERIALIZABLE`</InternalLink>, and will run as `READ COMMITTED` by default. On v23.2, refer to the <InternalLink version="v24.1" path="ui-sql-dashboard#upgrades-of-sql-transaction-isolation-level">Upgrades of SQL Transaction Isolation Level</InternalLink> graph in the DB Console to check whether any transaction is being upgraded from a weaker isolation level to `SERIALIZABLE`, and could therefore run differently on v24.1.

#### Features that require upgrade finalization

During a major-version upgrade, certain features and performance improvements may not be available until the upgrade is finalized.

* [Splits](https://cockroachlabs.com/docs/v24.1/architecture/distribution-layer#range-splits) no longer hold [latches](https://cockroachlabs.com/docs/architecture/distribution-layer.#latch-manager) for time proportional to the range size while computing [MVCC](https://cockroachlabs.com/docs/v24.1/architecture/storage-layer#mvcc) statistics. Instead, MVCC statistics are pre-computed before the critical section of the split. As a side effect, the resulting statistics are no longer 100% accurate because they may correctly distribute writes concurrent with the split. To mitigate against this potential inaccuracy, and to prevent the statistics from drifting after successive splits, the existing stored statistics are re-computed and corrected if needed during the non-critical section of the split.

#### 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 checking the `system.settings` table (`select * from system.settings`) to view the non-default settings.

* `sql.txn.read_committed_isolation.enabled` is now `true` by default. When set to `true`, transactions use the `READ COMMITTED` isolation level if specified by `BEGIN` / `SET` commands.
  * If the cluster setting is `false`, as was the default in v23.2, such `READ COMMITTED` transactions will instead run as `SERIALIZABLE`.
  * To check whether any transactions are being upgraded to `SERIALIZABLE`, see the <InternalLink version="v24.1" path="ui-sql-dashboard#upgrades-of-sql-transaction-isolation-level">**Upgrades of SQL Transaction Isolation Level**</InternalLink> graph in the DB Console."
* The `changefeed.balance_range_distribution.enabled` <InternalLink version="v24.1" path="cluster-settings">cluster setting</InternalLink> is now deprecated. Instead, use the new cluster setting `changefeed.default_range_distribution_strategy`. `changefeed.default_range_distribution_strategy='balanced_simple'` has the same effect as setting `changefeed.balance_range_distribution.enabled=true`. It does not require `initial_scan='only'`, which was required by the old setting.
* Added the <InternalLink version="v24.1" path="cluster-settings">cluster setting</InternalLink> `security.client_cert.subject_required.enabled` which enforces a mandatory requirement for the client certificate's role subject to be set. The subject can be defined through either the subject role option or by specifying the `root-cert-distinguished-name` and `node-cert-distinguished-name` properties. This setting applies to both RPC access and login via authCert.
* The <InternalLink version="v24.1" path="cluster-settings">cluster setting</InternalLink> `sql.contention.record_serialization_conflicts.enabled` is now `on` by default. As a result, any <InternalLink version="v24.1" path="transaction-retry-error-reference">`40001` error</InternalLink> that contains conflicting transaction information will be recorded by the contention registry, improving the ability to troubleshoot. For more information, refer to the <InternalLink version="v24.1" path="ui-insights-page">Insights page</InternalLink> documentation.
* The new <InternalLink version="v24.1" path="cluster-settings">cluster setting</InternalLink> `storage.sstable.compression_algorithm` configures the compression algorithm used when compressing sstable blocks. Supported values are: "snappy" and "zstd" \[snappy = `1`, zstd = `2` ]. Changing the default of snappy to zstd can result in substantial performance improvement, however, the effects this change may be highly dependent on the workload and data, so experimentation is recommended before enabling zstd in production environments.
* The new setting `storage.wal_failover.unhealthy_op_threshold` allows you to set the latency threshold at which a WAL (Write-Ahead Logging) write is considered unhealthy. When exceeded, the node will attempt to write WAL entries to a secondary store's volume. For more information, refer to
* The new `server.max_open_transactions_per_gateway` <InternalLink version="v24.1" path="cluster-settings">cluster setting</InternalLink>, when set to a non-negative value, allows only admin users to execute a query if the number of open transactions on the current gateway node is already at the configured limit.
* The new `server.redact_sensitive_settings.enabled` <InternalLink version="v24.1" path="cluster-settings">cluster setting</InternalLink> ( `false` by default), when set to `true`, redacts the values of the following settings in the output of `SHOW` commands or other introspection interfaces. In the future, newly-added sensitive cluster settings will be redacted as well. Users with the `MODIFYCLUSTERSETTING` <InternalLink version="v24.1" path="security-reference/authorization#managing-privileges">privilege</InternalLink> can always view the unredacted settings.
* The new boolean changefeed option <InternalLink version="v24.1" path="create-changefeed">`ignore_disable_changefeed_replication`</InternalLink>, when set to `true`, prevents the changefeed from filtering events even if CDC filtering is configured via the `disable_changefeed_replication` <InternalLink version="v24.1" path="session-variables">session variable</InternalLink>, `sql.ttl.changefeed_replication.disabled` <InternalLink version="v24.1" path="cluster-settings">cluster setting</InternalLink>, or the `ttl_disable_changefeed_replication` <InternalLink version="v24.1" path="alter-table#table-storage-parameters">table storage parameter</InternalLink>.
* The provisioned-rate field, if specified, should no longer accept a disk-name or an optional bandwidth field. To use the disk bandwidth constraint the store-spec must contain `provisioned-rate=bandwidth=<bandwidth-bytes/s>`, otherwise the cluster setting `kvadmission.store.provisioned_bandwidth` will be used. When set to a non-zero value, this is used as the provisioned bandwidth (in bytes/s), for each store. It can be overridden on a per-store basis using the --store flag. Note that setting the provisioned bandwidth to a positive value may enable disk bandwidth based admission control, since `admission.disk_bandwidth_tokens.elastic.enabled` defaults to `true`.
* Removed in v24.1:
  * `sql.show_ranges_deprecated_behavior.enabled`
  * `sql.trace.session_eventlog.enabled`
  * `changefeed.balance_range_distribution.enabled`

#### Deprecations

* `changefeed.balance_range_distribution.enable` is now deprecated. Instead, use the new <InternalLink version="v24.1" path="cluster-settings">cluster setting</InternalLink> `changefeed.default_range_distribution_strategy`. `changefeed.default_range_distribution_strategy='balanced_simple'` has the same effect as setting `changefeed.balance_range_distribution.enable=true`. It does not require `initial_scan='only'`, which was required by the old setting.
* The `cockroach connect` command has been removed. This command was <InternalLink version="v24.1" path="releases/v23.2">deprecated</InternalLink> in CockroachDB v23.2.

#### Known limitations

For information about new and unresolved limitations in CockroachDB v24.1, with suggested workarounds where applicable, refer to <InternalLink version="v24.1" 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><InternalLink path="architecture/overview">Architecture Overview</InternalLink></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><InternalLink path="sql-feature-support">SQL Feature Support</InternalLink></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><InternalLink path="change-data-capture-overview">Change Data Capture Overview</InternalLink></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><InternalLink path="backup-architecture">Backup Architecture</InternalLink></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.1.0-rc.2

Release Date: May 16, 2024

### Downloads

<Danger>
  CockroachDB v24.1.0-rc.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.1.0-rc.2.linux-amd64.tgz">cockroach-v24.1.0-rc.2.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-rc.2.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-rc.2.linux-amd64.tgz">cockroach-sql-v24.1.0-rc.2.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-rc.2.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-rc.2.linux-arm64.tgz">cockroach-v24.1.0-rc.2.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-rc.2.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-rc.2.linux-arm64.tgz">cockroach-sql-v24.1.0-rc.2.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-rc.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.1.0-rc.2.darwin-10.9-amd64.tgz">cockroach-v24.1.0-rc.2.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-rc.2.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-rc.2.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.0-rc.2.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-rc.2.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-rc.2.darwin-11.0-arm64.tgz">cockroach-v24.1.0-rc.2.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-rc.2.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-rc.2.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.0-rc.2.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-rc.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.1.0-rc.2.windows-6.2-amd64.zip">cockroach-v24.1.0-rc.2.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-rc.2.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-rc.2.windows-6.2-amd64.zip">cockroach-sql-v24.1.0-rc.2.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-rc.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.1.0-rc.2
```

### Bug fixes

* Fixed a bug that was present since v22.2 where <InternalLink version="v24.1" path="change-data-capture-overview">changefeeds</InternalLink> with long-running <InternalLink version="v24.1" path="create-changefeed">initial scans</InternalLink> might incorrectly restore checkpoint job progress and drop events during <InternalLink version="v24.1" path="changefeed-messages#duplicate-messages">changefeed restarts</InternalLink> due to transient errors or node restarts. The bug was most likely to occur in clusters with the following contributing factors:
  * The `changefeed.shutdown_checkpoint.enabled` <InternalLink version="v24.1" path="cluster-settings">cluster setting</InternalLink> was enabled (in clusters running v23.2 and later).
  * The cluster settings `changefeed.frontier_checkpoint_frequency` and `low changefeed.frontier_highwater_lag_checkpoint_threshold` were set low, which resulted in the initial scan taking many multiples of the configured frequency to complete.
  * There were multiple target tables with significant differences in row counts in one changefeed.
  * The changefeed target tables were large with many ranges.
  * The initial scan took a long time to complete (an hour or longer).
* Fixed a crash introduced in v24.1.0-beta.2 that could occur when planning <InternalLink version="v24.1" path="cost-based-optimizer#table-statistics">statistics collection</InternalLink> on a table with a <InternalLink version="v24.1" path="computed-columns">virtual computed column</InternalLink> using a user-defined type and the `sql.stats.virtual_computed_columns.enabled` <InternalLink version="v24.1" path="cluster-settings">cluster setting</InternalLink> is set to `true`. `sql.stats.virtual_computed_columns.enabled` was introduced in v24.1.0-alpha.1 as `true` by default and introduced in v23.2.5 as `false` by default.

### Contributors

This release includes 3 merged PRs by 3 authors.

## v24.1.0-rc.1

Release Date: May 8, 2024

### Downloads

<Danger>
  CockroachDB v24.1.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.1.0-rc.1.linux-amd64.tgz">cockroach-v24.1.0-rc.1.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-rc.1.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-rc.1.linux-amd64.tgz">cockroach-sql-v24.1.0-rc.1.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-rc.1.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-rc.1.linux-arm64.tgz">cockroach-v24.1.0-rc.1.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-rc.1.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-rc.1.linux-arm64.tgz">cockroach-sql-v24.1.0-rc.1.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.0-rc.1.darwin-10.9-amd64.tgz">cockroach-v24.1.0-rc.1.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-rc.1.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-rc.1.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.0-rc.1.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.0-rc.1.darwin-11.0-arm64.tgz">cockroach-v24.1.0-rc.1.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-rc.1.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-rc.1.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.0-rc.1.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.0-rc.1.windows-6.2-amd64.zip">cockroach-v24.1.0-rc.1.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-rc.1.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-rc.1.windows-6.2-amd64.zip">cockroach-sql-v24.1.0-rc.1.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.0-rc.1
```

### SQL language changes

* Added a new <InternalLink version="v24.1" path="session-variables">session setting</InternalLink> `optimizer_use_improved_multi_column_selectivity_estimate`, which if enabled, causes the <InternalLink version="v24.1" path="cost-based-optimizer">optimizer</InternalLink> to use an improved selectivity estimate for multi-column predicates. This setting will default to `true` on v24.2 and later, and `false` on earlier versions.

### Operational changes

* Added two new <InternalLink version="v24.1" path="metrics">metrics</InternalLink>: `range.snapshots.upreplication.rcvd-bytes` counts the number of <InternalLink version="v24.1" path="architecture/replication-layer#raft">Raft</InternalLink> recovery snapshot bytes received, and `range.snapshots.upreplication.sent-bytes` counts the number of Raft recovery snapshot bytes sent. Also updated `range.snapshots.recovery.rcvd-bytes` and `range.snapshots.recovery.sent-bytes` to only include Raft snapshots. A new line was added to the <InternalLink version="v24.1" path="ui-replication-dashboard#snapshot-data-received">**Snapshot Data Received**</InternalLink> graph.

### DB Console changes

* Added a **Replication Lag** graph to the <InternalLink version="v24.1" path="physical-cluster-replication-monitoring">**Physical Cluster Replication**</InternalLink> dashboard to measure replication lag between primary and standby clusters using <InternalLink version="v24.1" path="physical-cluster-replication-overview">physical cluster replication</InternalLink>.

### Bug fixes

* Fixed a bug that caused the <InternalLink version="v24.1" path="ui-databases-page#tables-view">**Tables**</InternalLink> and <InternalLink version="v24.1" path="ui-databases-page#table-details">**Table Details**</InternalLink> pages in the DB Console to display an incorrect value for **Table Stats Last Updated**.
* Fixed a bug in the DB Console's <InternalLink version="v24.1" path="ui-custom-chart-debug-page">**Custom Chart**</InternalLink> tool where store-level metrics were displayed only for the first store ID associated with the node. Now data is displayed for all stores present on a node, and a single time series is shown for each store, rather than an aggregated value for all of the node's stores. This allows finer-grained monitoring of store-level metrics.
* Fixed a bug introduced in v22.2 that could cause the internal error `attempting to append refresh spans after the tracked timestamp has moved forward` in some edge cases.
* Fixed a bug where a `TYPEDESC SCHEMA CHANGE` job could retry forever if the descriptor it targeted was already dropped.
* Fixed a bug where, if the legacy schema changer was enabled, the <InternalLink version="v24.1" path="create-sequence">`CREATE SEQUENCE`</InternalLink> command would incorrectly require the user to have the `CREATE` <InternalLink version="v24.1" path="security-reference/authorization#privileges">privilege</InternalLink> on the parent database rather than only on the parent schema.
* Fixed a bug where a <InternalLink version="v24.1" path="show-jobs">job</InternalLink> would fail if it reported an out-of-bound progress fraction. The error is now logged and no longer causes the job to fail.

### Performance improvements

* Added a new <InternalLink version="v24.1" path="session-variables">session setting</InternalLink> `optimizer_use_improved_zigzag_join_costing`. When enabled and when the <InternalLink version="v24.1" path="cluster-settings">cluster setting</InternalLink> `enable_zigzag_join` is also enabled, the cost of zigzag joins is updated such that a zigzag join will be chosen over a scan only if it produces fewer rows than a scan.
* Improved the selectivity estimation of multi-column filters when the multi-column distinct count is high. This prevents the <InternalLink version="v24.1" path="cost-based-optimizer">optimizer</InternalLink> from choosing a bad query plan due to over-estimating the selectivity of a multi-column predicate.
* Improved the efficiency of error handling in the <InternalLink version="v24.1" path="vectorized-execution">vectorized execution engine</InternalLink>, to reduce the CPU overhead of statement timeout handling and reduce the potential for more statement timeouts.
* Disabled a poorly-performing <InternalLink version="v24.1" path="change-data-capture-overview">changefeed</InternalLink> optimization that was intended to reduce duplicates during aggregator restarts.

### Contributors

This release includes 57 merged PRs by 24 authors.

## v24.1.0-beta.3

Release Date: April 30, 2024

### Downloads

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

#### Full CockroachDB executable

<LinkedPageTabs
  currentPath={`/docs/${version}/releases/v24.1`}
  items={[
{
  title: "Linux Intel",
  href: "https://binaries.cockroachdb.com/cockroach-v24.1.0-beta.3.linux-amd64.tgz",
},
{
  title: "Linux ARM",
  href: "https://binaries.cockroachdb.com/cockroach-v24.1.0-beta.3.linux-arm64.tgz",
},
{
  title: "Mac Intel (Experimental)",
  href: "https://binaries.cockroachdb.com/cockroach-v24.1.0-beta.3.darwin-10.9-amd64.tgz",
},
{
  title: "Mac ARM (Experimental)",
  href: "https://binaries.cockroachdb.com/cockroach-v24.1.0-beta.3.darwin-11.0-arm64.tgz",
},
{
  title: "Windows (Experimental)",
  href: "https://binaries.cockroachdb.com/cockroach-v24.1.0-beta.3.windows-6.2-amd64.zip",
},
]}
/>

#### SQL-only command-line client executable

<LinkedPageTabs
  currentPath={`/docs/${version}/releases/v24.1`}
  items={[
{
  title: "Linux Intel",
  href: "https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-beta.3.linux-amd64.tgz",
},
{
  title: "Linux ARM",
  href: "https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-beta.3.linux-arm64.tgz",
},
{
  title: "Mac Intel (Experimental)",
  href: "https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-beta.3.darwin-10.9-amd64.tgz",
},
{
  title: "Mac ARM (Experimental)",
  href: "https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-beta.3.darwin-11.0-arm64.tgz",
},
{
  title: "Windows (Experimental)",
  href: "https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-beta.3.windows-6.2-amd64.zip",
},
]}
/>

<Tabs>
  <Tab title="Windows (Experimental)">
    <Danger>
      CockroachDB executable for Windows is experimental and not suitable for production deployments. Windows 8 or higher is required.
    </Danger>
  </Tab>
</Tabs>

### 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.1.0-beta.3
```

### SQL language changes

* Updated the <InternalLink version="v24.1" path="show-grants">`SHOW GRANTS`</InternalLink> responses to display the `object_type` and `object_name`, which has replaced the `relation_name` column.
* Added <InternalLink version="v24.1" path="create-external-connection">external connection</InternalLink> granted privileges to the <InternalLink version="v24.1" path="show-grants">`SHOW GRANTS`</InternalLink> command.
* Introduced three new <InternalLink version="v24.1" path="cluster-settings">cluster settings</InternalLink> for controlling table statistics forecasting:
  * <InternalLink version="v24.1" path="cluster-settings">`sql.stats.forecasts.min_observations`</InternalLink> is the minimum number of observed statistics required to produce a forecast.
  * <InternalLink version="v24.1" path="cluster-settings">`sql.stats.forecasts.min_goodness_of_fit`</InternalLink> is the minimum R² (goodness of fit) measurement required from all predictive models to use a forecast.
  * <InternalLink version="v24.1" path="cluster-settings">`sql.stats.forecasts.max_decrease`</InternalLink> is the most a prediction can decrease, expressed as the minimum ratio of the prediction to the lowest prior observation.

### Bug fixes

* Fixed a bug that could lead to descriptors having privileges to roles that no longer exist. Added an automated clean up for <InternalLink version="v24.1" path="drop-role">dropped roles</InternalLink> inside descriptors.
* Fixed a bug where <InternalLink version="v24.1" path="authentication#client-authentication">client certificate authentication</InternalLink> combined with <InternalLink version="v24.1" path="sso-sql#identity-map-configuration">identity maps</InternalLink> ( `server.identity_map.configuration` ) did not work since v23.1. For the feature to work correctly, the client must specify a valid db user in the <InternalLink version="v24.1" path="connection-parameters">connection string</InternalLink>.
* Fixed a bug where the <InternalLink version="v24.1" path="architecture/sql-layer#query-execution">row-based execution engine</InternalLink> could drop a <InternalLink version="v24.1" path="limit-offset">`LIMIT`</InternalLink> clause when there was an <InternalLink version="v24.1" path="order-by">`ORDER BY`</InternalLink> clause, and the ordering was partially provided by an input operator. For example, this bug could occur with an ordering such as `ORDER BY a, b` when the scanned index was only ordered on column `a`. The impact of this bug was that more rows may have been returned than specified by the `LIMIT` clause. This bug is only present when not using the <InternalLink version="v24.1" path="architecture/sql-layer#vectorized-query-execution">vectorized execution engine</InternalLink>. That is, when running with `SET vectorize = off;`. This bug has existed since CockroachDB v22.1.
* Previously, CockroachDB could run into an internal error when evaluating <InternalLink version="v24.1" path="plpgsql">PL/pgSQL</InternalLink> routines with nested blocks. The bug is only present in 24.1.0-beta versions. This bug is now fixed.
* Fixed a bug where <InternalLink version="v24.1" path="update">`UPDATE`</InternalLink> and <InternalLink version="v24.1" path="upsert">`UPSERT`</InternalLink> queries with a subquery were sometimes inappropriately using implicit <InternalLink version="v24.1" path="select-for-update">`FOR UPDATE`</InternalLink> locking within the subquery. This bug has existed since implicit `FOR UPDATE` locking was introduced in v20.1.
* <InternalLink version="v24.1" path="alter-table#drop-column">Dropping</InternalLink> and <InternalLink version="v24.1" path="alter-table#add-column">adding</InternalLink> a column with the same name no longer results in a `"column already exists error"`.
* Fixed a bug that could cause an internal error of the form `invalid datum type given:..., expected...` when a `RECORD` -returning <InternalLink version="v24.1" path="user-defined-functions">user-defined function</InternalLink>, used as a data source, was supplied a column definition list with mismatched types. This bug has existed since v23.1.
* Fixed a bug that could result in an internal error when attempting to create a <InternalLink version="v24.1" path="plpgsql">PL/pgSQL</InternalLink> routine using the (unsupported) `%ROWTYPE` syntax for a variable declaration. Now, an expected syntax error is returned instead.
* Fixed a bug that could result in an assertion error during evaluation of <InternalLink version="v24.1" path="plpgsql">PL/pgSQL</InternalLink> routines that invoke procedures while using `DEFAULT` arguments. The bug was present in v24.1.0-beta releases and is now fixed.
* Previously, privileges granted for <InternalLink version="v24.1" path="create-external-connection">external connections</InternalLink> were displaying in `SHOW SYSTEM GRANTS` with no associated object name. Now these privileges are no longer displayed. Instead, the statement `SHOW GRANTS ON EXTERNAL CONNECTION` should be used to view external connection privileges with their associated object name.
* Statistics forecasts of zero rows can cause suboptimal <InternalLink version="v24.1" path="cost-based-optimizer">query plans</InternalLink>. Forecasting will now avoid predicting zero rows for most downward-trending statistics.
* Fixed a bug introduced in v23.2 that could cause a <InternalLink version="v24.1" path="plpgsql">PL/pgSQL</InternalLink> variable assignment to not be executed if the variable was never referenced after the assignment.

### Performance improvements

* More efficient <InternalLink version="v24.1" path="cost-based-optimizer">query plans</InternalLink> are now generated for queries with text similarity filters, for example, `text_col % 'foobar'`. These plans are generated if the `optimizer_use_trigram_similarity_optimization` <InternalLink version="v24.1" path="set-vars">session setting</InternalLink> is enabled. It is disabled by default.
* The <InternalLink version="v24.1" path="cost-based-optimizer">optimizer</InternalLink> now costs `distinct-on` operators more accurately. It may produce more efficient query plans in some cases.
* Improved the speed for optimization of some statements using `GROUP BY` or `DISTINCT` or `ON CONFLICT` by skipping the <InternalLink version="v24.1" path="cost-based-optimizer">optimizer</InternalLink> rule `SplitGroupByScanIntoUnionScans` when it is not needed.

### Contributors

This release includes 56 merged PRs by 25 authors.

## v24.1.0-beta.2

Release Date: April 24, 2024

### Downloads

<Danger>
  CockroachDB v24.1.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.1.0-beta.2.linux-amd64.tgz">cockroach-v24.1.0-beta.2.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-beta.2.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-beta.2.linux-amd64.tgz">cockroach-sql-v24.1.0-beta.2.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-beta.2.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-beta.2.linux-arm64.tgz">cockroach-v24.1.0-beta.2.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-beta.2.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-beta.2.linux-arm64.tgz">cockroach-sql-v24.1.0-beta.2.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.0-beta.2.darwin-10.9-amd64.tgz">cockroach-v24.1.0-beta.2.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-beta.2.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-beta.2.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.0-beta.2.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.0-beta.2.darwin-11.0-arm64.tgz">cockroach-v24.1.0-beta.2.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-beta.2.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-beta.2.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.0-beta.2.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.0-beta.2.windows-6.2-amd64.zip">cockroach-v24.1.0-beta.2.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-beta.2.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-beta.2.windows-6.2-amd64.zip">cockroach-sql-v24.1.0-beta.2.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.0-beta.2
```

### Security updates

* Added the <InternalLink version="v24.1" path="cluster-settings">cluster setting</InternalLink> `security.client_cert.subject_required.enabled` that enforces a mandatory requirement for the client certificate's role subject to be set. The subject can be defined through either the subject role option or by specifying the `root-cert-distinguished-name` and `node-cert-distinguished-name` properties. This setting applies to both RPC access and login via authCert.

### Bug fixes

* Fixed a bug where table statistics were sometimes not collected on tables that have virtual <InternalLink version="v24.1" path="computed-columns">computed columns</InternalLink> of a user-defined type when the `sql.stats.virtual_computed_columns.enabled` cluster setting is enabled. The setting was introduced in v23.2.4 and is disabled by default. Only clusters running v23.2.4 with the non-default setting are affected.

### Contributors

This release includes 52 merged PRs by 28 authors.

## v24.1.0-beta.1

Release Date: April 17, 2024

### Downloads

<Danger>
  CockroachDB v24.1.0-beta.1 is a testing release. Testing releases are intended for testing and experimentation only, and are not qualified for production environments and not eligible for support or uptime SLA commitments.
</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.1.0-beta.1.linux-amd64.tgz">cockroach-v24.1.0-beta.1.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-beta.1.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-beta.1.linux-amd64.tgz">cockroach-sql-v24.1.0-beta.1.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-beta.1.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-beta.1.linux-arm64.tgz">cockroach-v24.1.0-beta.1.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-beta.1.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-beta.1.linux-arm64.tgz">cockroach-sql-v24.1.0-beta.1.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.0-beta.1.darwin-10.9-amd64.tgz">cockroach-v24.1.0-beta.1.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-beta.1.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-beta.1.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.0-beta.1.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.0-beta.1.darwin-11.0-arm64.tgz">cockroach-v24.1.0-beta.1.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-beta.1.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-beta.1.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.0-beta.1.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.0-beta.1.windows-6.2-amd64.zip">cockroach-v24.1.0-beta.1.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-beta.1.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-beta.1.windows-6.2-amd64.zip">cockroach-sql-v24.1.0-beta.1.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.0-beta.1
```

### SQL language changes

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

### Command-line changes

* The <InternalLink version="v24.1" path="encryption#starting-a-node-with-encryption">`--enterprise-encryption`</InternalLink> flag now accepts the special value `path=*` to apply the specified keys to all stores.

### DB Console changes

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

### Bug fixes

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

### Contributors

This release includes 134 merged PRs by 36 authors.

## v24.1.0-alpha.5

Release Date: April 1, 2024

### Downloads

<Danger>
  CockroachDB v24.1.0-alpha.5 is a testing release. Testing releases are intended for testing and experimentation only, and are not qualified for production environments and not eligible for support or uptime SLA commitments.
</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.1.0-alpha.5.linux-amd64.tgz">cockroach-v24.1.0-alpha.5.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.5.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.5.linux-amd64.tgz">cockroach-sql-v24.1.0-alpha.5.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.5.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.5.linux-arm64.tgz">cockroach-v24.1.0-alpha.5.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.5.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.5.linux-arm64.tgz">cockroach-sql-v24.1.0-alpha.5.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.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.1.0-alpha.5.darwin-10.9-amd64.tgz">cockroach-v24.1.0-alpha.5.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.5.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.5.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.0-alpha.5.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.5.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.5.darwin-11.0-arm64.tgz">cockroach-v24.1.0-alpha.5.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.5.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.5.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.0-alpha.5.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.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.1.0-alpha.5.windows-6.2-amd64.zip">cockroach-v24.1.0-alpha.5.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.5.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.5.windows-6.2-amd64.zip">cockroach-sql-v24.1.0-alpha.5.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.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-unstable:v24.1.0-alpha.5
```

### Enterprise edition changes

* <InternalLink version="v24.1" path="change-data-capture-overview">Changefeeds</InternalLink> now default to evenly distributing their work across all replicas, including followers, regardless of leaseholder placement. On upgrade to v24.1, running changefeed jobs will be restarted automatically as part of the upgrade process and will default to distributing work across replicas. To disable this behavior, set the <InternalLink version="v24.1" path="cluster-settings">cluster setting</InternalLink> `changefeed.random_replica_selection.enabled` to `false`. If disabled, changefeed planning reverts to its previous behavior for distributing work.
* When <InternalLink version="v24.1" path="physical-cluster-replication-overview">physical cluster replication</InternalLink> is enabled, the output of the `SHOW VIRTUAL CLUSTER... WITH REPLICATION STATUS` command now displays replication lag.
* When <InternalLink version="v24.1" path="physical-cluster-replication-overview">physical cluster replication</InternalLink> is enabled, the output of the `SHOW VIRTUAL CLUSTER WITH REPLICATION STATUS to 1` command has changed:
  * The output no longer displays `replication_job_id` or `service_mode` return fields.
  * The `data_state` field has been renamed to `status`.
  * The fields that are displayed are now ordered as follows: `retained_time`, `replicated_time`, `replication_lag`, `cutover_time`, `status`.
* You can now run <InternalLink version="v24.1" path="physical-cluster-replication-overview">physical cluster replication</InternalLink> from an <InternalLink version="v24.1" path="set-up-physical-cluster-replication#set-up-pcr-from-an-existing-cluster">existing CockroachDB cluster</InternalLink>, without <InternalLink version="v24.1" path="cluster-virtualization-overview">cluster virtualization</InternalLink> enabled, to a standby cluster with cluster virtualization enabled.

### SQL language changes

* You can now specify a condition for the <InternalLink version="v24.1" path="plpgsql">PL/pgSQL statements</InternalLink> `EXIT` and `CONTINUE`.
* A <InternalLink version="v24.1" path="stored-procedures">stored procedure</InternalLink> can now invoke another stored procedure using a <InternalLink version="v24.1" path="call">`CALL` statement</InternalLink>.
* You can now use a <InternalLink version="v24.1" path="set-transaction">`SET TRANSACTION`</InternalLink> statement within a <InternalLink version="v24.1" path="plpgsql">PL/pgSQL stored procedure</InternalLink> to configure the transaction isolation level, timestamp, or priority, or to set the transaction to read-only. A `SET TRANSACTION` statement must immediately follow a `COMMIT` or `ROLLBACK`, with no other statements or block boundaries between them.
* The new <InternalLink version="v24.1" path="session-variables">session variable</InternalLink> `optimizer_use_virtual_computed_column_stats`, when enabled, configures the <InternalLink version="v24.1" path="cost-based-optimizer">cost-based optimizer</InternalLink> to use <InternalLink version="v24.1" path="show-statistics">table statistics</InternalLink> on virtual computed columns.
* An <InternalLink version="v24.1" path="create-table#identity-columns">identity column</InternalLink> can now drop the `IDENTITY` constraint and related sequence using the following SQL statement:

  ```sql theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
  ALTER TABLE {table_name} ALTER COLUMN {column_name} DROP IDENTITY [IF EXISTS];
  ```

  `IF EXISTS` is optional, and skips the command if the column is not an identity column.
* A shared lock that is acquired explicitly using <InternalLink version="v24.1" path="select-for-update">`SELECT FOR SHARE`</InternalLink> or implicitly by a <InternalLink version="v24.1" path="read-committed">read-committed transaction</InternalLink>, can now be re-acquired with higher strength by either using a <InternalLink version="v24.1" path="select-for-update">`SELECT FOR UPDATE`</InternalLink> statement or by writing to the key.
* <InternalLink version="v24.1" path="stored-procedures">Stored procedures</InternalLink> now support `OUT` and `INOUT` parameter classes.
* The <InternalLink version="v24.1" path="plpgsql">PL/pgSQL</InternalLink> `EXIT` and `CONTINUE` statements can now use labels to specify which loop or block is the target.

### Operational changes

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

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

### DB Console changes

* In generated statement fingerprints in the DB Console <InternalLink version="v24.1" path="ui-statements-page">**Statements** page</InternalLink>, lists with only literals or placeholders or similar subexpressions are shortened to their first item followed by " **more** ".

### Bug fixes

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

### Performance improvements

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

### Contributors

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

* Andrew Delph

## v24.1.0-alpha.4

Release Date: March 25, 2024

### Downloads

<Danger>
  CockroachDB v24.1.0-alpha.4 is a testing release. Testing releases are intended for testing and experimentation only, and are not qualified for production environments and not eligible for support or uptime SLA commitments.
</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.1.0-alpha.4.linux-amd64.tgz">cockroach-v24.1.0-alpha.4.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.4.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.4.linux-amd64.tgz">cockroach-sql-v24.1.0-alpha.4.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.4.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.4.linux-arm64.tgz">cockroach-v24.1.0-alpha.4.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.4.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.4.linux-arm64.tgz">cockroach-sql-v24.1.0-alpha.4.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.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.1.0-alpha.4.darwin-10.9-amd64.tgz">cockroach-v24.1.0-alpha.4.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.4.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.4.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.0-alpha.4.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.4.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.4.darwin-11.0-arm64.tgz">cockroach-v24.1.0-alpha.4.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.4.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.4.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.0-alpha.4.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.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.1.0-alpha.4.windows-6.2-amd64.zip">cockroach-v24.1.0-alpha.4.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.4.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.4.windows-6.2-amd64.zip">cockroach-sql-v24.1.0-alpha.4.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.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-unstable:v24.1.0-alpha.4
```

### Security updates

* When <InternalLink version="v24.1" path="configure-logs#output-to-files">configuring logs</InternalLink>, `file-permissions` are now applied literally, such that `file-permissions: 644` will result in files with permissions matching `644` (instead of the previous behavior's `640` ). Previously, CockroachDB's `umask` (which is always at least `007` ) was being applied after the `file-permissions` field was used to create files, meaning the resulting permissions did not match those specified in the log configuration.

### General changes

* The following <InternalLink version="v24.1" path="metrics">metrics</InternalLink> were added for observability of per-store disk events:
  * `storage.disk.read.count`
  * `storage.disk.read.bytes`
  * `storage.disk.read.time`
  * `storage.disk.write.count`
  * `storage.disk.write.bytes`
  * `storage.disk.write.time`
  * `storage.disk.io.time`
  * `storage.disk.weightedio.time`
  * `storage.disk.iopsinprogress`

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

### Enterprise edition changes

* `server.controller.default_target_cluster` can now be set to any virtual cluster name by default, including a virtual cluster yet to be created or have service started.
* The <InternalLink version="v24.1" path="read-committed">`READ COMMITTED`</InternalLink> isolation level now requires the cluster to have a valid enterprise license.
* The new boolean changefeed option <InternalLink version="v24.1" path="create-changefeed">`ignore_disable_changefeed_replication`</InternalLink>, when set to `true`, prevents the changefeed from filtering events even if CDC filtering is configured via the `disable_changefeed_replication` <InternalLink version="v24.1" path="session-variables">session variable</InternalLink>, `sql.ttl.changefeed_replication.disabled` <InternalLink version="v24.1" path="cluster-settings">cluster setting</InternalLink>, or the `ttl_disable_changefeed_replication` <InternalLink version="v24.1" path="alter-table#table-storage-parameters">table storage parameter</InternalLink>.

### SQL language changes

* Added support for the <InternalLink version="v24.1" path="plpgsql">PL/pgSQL</InternalLink> `COMMIT` and `ROLLBACK` statements.
* <InternalLink version="v24.1" path="create-table#identity-columns">Identity columns</InternalLink> now support enhanced sequence management through the <InternalLink path="alter-table#alter-column">`ALTER [COLUMN] column_name SET sequence_option`</InternalLink> and <InternalLink path="alter-table#alter-column">`ALTER [COLUMN] column_name RESTART [WITH restart]`</InternalLink> commands. This update facilitates the fine-tuning of identity column sequences.
* It is now possible to use the `STRICT` option with <InternalLink version="v24.1" path="plpgsql#assign-a-result-to-a-variable">`SELECT... INTO`</InternalLink> and <InternalLink version="v24.1" path="plpgsql#assign-a-result-to-a-variable">`RETURNING... INTO`</InternalLink> in order to enforce that a SQL statement within a <InternalLink version="v24.1" path="plpgsql">PL/pgSQL</InternalLink> routine returns exactly one row.
* Added a <InternalLink version="v24.1" path="session-variables">session setting</InternalLink> `plpgsql_use_strict_into`, which causes PL/pgSQL <InternalLink version="v24.1" path="plpgsql#assign-a-result-to-a-variable">`SELECT... INTO`</InternalLink> and <InternalLink version="v24.1" path="plpgsql#assign-a-result-to-a-variable">`RETURNING... INTO`</InternalLink> to require exactly one row from the SQL statement, similar to Oracle behavior.
* Added a new `failure_count INT NOT NULL` column to `crdb_internal.node_statement_statistics`. It represents the number of recorded statement execution failures for the given statement, as a new component of the overall statistics.
* The `FORCE_INVERTED_INDEX` hint causes the <InternalLink version="v24.1" path="cost-based-optimizer">optimizer</InternalLink> to prefer a query plan scan over any inverted index of the hinted table. An error is emitted if no such query plan can be generated.
* The `REPAIRCLUSTERMETADATA` privilege has been aliased to `REPAIRCLUSTER`. Both names can be used interchangeably.

### Operational changes

* The new <InternalLink version="v24.1" path="cockroach-start">`cockroach start`</InternalLink> option <InternalLink version="v24.1" path="cockroach-start#write-ahead-log-wal-failover">`--wal-failover=among-stores` or `COCKROACH_WAL_FAILOVER=among-stores`</InternalLink> environment variable will configure a multi-store CockroachDB node to fail over a store's write-ahead log (WAL) to another store's data directory. Failing over the write-ahead log may allow some operations against a store to continue completing, even if the underlying storage is temporarily unavailable. This feature is in <InternalLink version="v24.1" path="cockroachdb-feature-availability">preview</InternalLink>.
* The new `storage.wal_failover.unhealthy_op_threshold` <InternalLink version="v24.1" path="cluster-settings">cluster setting</InternalLink> allows configuring the latency threshold at which a WAL write is considered unhealthy.
* Two new metrics track the status of the SQL Activity Update job, which pre-aggregates top K information within the SQL statistics subsytem and writes the results to `system.statement_activity` and `system.transaction_activity`:
  * `sql.stats.activity.updates.successful`: Number of successful updates made by the SQL activity updater job.
  * `sql.stats.activity.update.latency`: The latency of updates made by the SQL activity updater job. Includes failed update attempts.
* Added a new counter metric, `sql.stats.flush.done_signals.ignored`, that tracks the number of times the SQL activity update job has ignored the signal that indicates that a flush has completed. This metric may indicate that the SQL activity update job is taking longer than expected to complete.
* Added a new counter metric, `sql.stats.activity.updates.failed`, to measure the number of update attempts made by the SQL activity update job that failed with errors.
* Added a new counter metric, `sql.stats.flush.fingerprint.count`, that tracks the number of unique statement and transaction fingerprints included in the SQL stats flush.
* The `/_status/stores` endpoint now includes `node_id`, `dir`, and `wal_failover_path` fields to show the store's node ID, data directory, and path to the configured WAL failover secondary, if configured.

### Command-line changes

* The new `--go-gc-percent` flag of the <InternalLink version="v24.1" path="cockroach-start">`cockroach start`</InternalLink> command controls the garbage collection target percentage of the Go runtime, mirroring the existing `GOGC` environment variable. A garbage collection is triggered when the ratio of freshly allocated data to live data remaining after the previous collection reaches this percentage. If left unspecified and if a Go soft memory limit is configured (i.e., not explicitly disabled via `--max-go-memory` or `GOMEMLIMIT` ), the garbage collection target percentage defaults to 300%. Setting the flag to a negative value disables the target percentage garbage collection heuristic, and only the soft memory limit heuristic triggers garbage collection. To monitor the impact of this change in the DB Console, look for an increase in **Memory usage** in the <InternalLink version="v24.1" path="ui-hardware-dashboard#memory-usage">Hardware dashboard</InternalLink> and an increase in **Go total memory usage** in the <InternalLink version="v24.1" path="ui-runtime-dashboard#memory-usage">Runtime dashboard</InternalLink>. This does not increase the risk of an out-of-memory exception (OOM), because the Go memory limit (controlled by the `--max-go-memory` flag or the `GOMEMLIMIT` environment variable) prevents Go from consuming too much memory.

### DB Console changes

* The <InternalLink version="v24.1" path="ui-queues-dashboard">**Queues** dashboard</InternalLink> now includes lease queue metrics.
* The DB Console **SQL Activity** <InternalLink version="v24.1" path="ui-statements-page#statement-fingerprint-page">**Statement Fingerprint**</InternalLink> page has replaced the **Failed?** boolean column with a **Failure Count** column that shows the number of failed executions for the given statement fingerprint. In the **SQL Activity** table, the same statement fingeprint no longer appears in separate rows for failed executions and successful executions. Instead, they are combined into a single statement fingerprint.
* The DB Console now displays an alert message when a license has expired or will expire in fewer than 15 days.

### Bug fixes

* Fixed a bug with <InternalLink version="v24.1" path="drop-schema">`DROP SCHEMA... CASCADE`</InternalLink> that could lead to dangling function references in other schemas accessing any functions.
* Fixed a bug where a <InternalLink version="v24.1" path="restore">`RESTORE`</InternalLink> of a backup that itself contained a table created by the `RESTORE` of a table with an in-progress <InternalLink version="v24.1" path="import-into">`IMPORT INTO`</InternalLink> would fail to restore all rows.
* Fixed a bug where <InternalLink version="v24.1" path="create-table#identity-columns">identity columns</InternalLink> without any configured sequence options did not display the default values for identity attributes in `information_schema`.
* Fixed a bug where a <InternalLink version="v24.1" path="grant">`GRANT... ON ALL TABLES`</InternalLink> statement could fail if sequences existed and they did not support a privilege (e.g., `BACKUP` ).
* Fixed a bug where an <InternalLink version="v24.1" path="explain">`EXPLAIN (DDL)`</InternalLink> statement would generate event log entries for schema changes that were not executed.

### Contributors

This release includes 153 merged PRs by 179 authors.

## v24.1.0-alpha.3

Release Date: March 18, 2024

### Downloads

<Danger>
  CockroachDB v24.1.0-alpha.3 is a testing release. Testing releases are intended for testing and experimentation only, and are not qualified for production environments and not eligible for support or uptime SLA commitments.
</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.1.0-alpha.3.linux-amd64.tgz">cockroach-v24.1.0-alpha.3.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.3.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.3.linux-amd64.tgz">cockroach-sql-v24.1.0-alpha.3.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.3.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.3.linux-arm64.tgz">cockroach-v24.1.0-alpha.3.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.3.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.3.linux-arm64.tgz">cockroach-sql-v24.1.0-alpha.3.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.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.1.0-alpha.3.darwin-10.9-amd64.tgz">cockroach-v24.1.0-alpha.3.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.3.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.3.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.0-alpha.3.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.3.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.3.darwin-11.0-arm64.tgz">cockroach-v24.1.0-alpha.3.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.3.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.3.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.0-alpha.3.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.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.1.0-alpha.3.windows-6.2-amd64.zip">cockroach-v24.1.0-alpha.3.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.3.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.3.windows-6.2-amd64.zip">cockroach-sql-v24.1.0-alpha.3.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.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.1.0-alpha.3
```

### Enterprise edition changes

* <InternalLink version="v24.1" path="encryption">`cockroach gen encryption-key`</InternalLink> now accepts a `--version=2` parameter. Version 2 keys activate a new encryption implementation with improved performance. This is expected to become the default in CockroachDB v24.2.

### SQL language changes

* Mutation statements such as <InternalLink version="v24.1" path="update">`UPDATE`</InternalLink> and <InternalLink version="v24.1" path="delete">`DELETE`</InternalLink> as well as locking statements such as <InternalLink version="v24.1" path="select-for-update">`SELECT FOR UPDATE`</InternalLink> are not allowed in read-only transactions or <InternalLink version="v24.1" path="as-of-system-time">`AS OF SYSTEM TIME`</InternalLink> transactions. This fixes an oversight where CockroachDB was allowing mutation statements and locking statements in implicit single-statement transactions using `AS OF SYSTEM TIME`.

* Added support for `RETURN` statements with no expression for routines with `OUT` parameters and routines with a `VOID` return type.

* <InternalLink version="v24.1" path="alter-table#alter-column">`ALTER COLUMN`</InternalLink> can now change columns to an identity column by using the syntax in one of the following:

  ```sql theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
  ALTER TABLE t ALTER COLUMN c ADD GENERATED ALWAYS AS IDENTITY [( <opt_sequence_option_list> )]
  ALTER TABLE t ALTER COLUMN c ADD GENERATED BY DEFAULT AS IDENTITY[( <opt_sequence_option_list> )]
  ```

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

  ```sql theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
  ALTER TABLE t ALTER COLUMN c SET GENERATED ALWAYS
  ALTER TABLE t ALTER COLUMN c SET GENERATED BY DEFAULT
  ```

* Added support for the <InternalLink version="v24.1" path="plpgsql">PL/pgSQL</InternalLink> `NULL` statement.

* <InternalLink version="v24.1" path="crdb-internal">`crdb_internal.leases`</InternalLink> is now behind the <InternalLink version="v24.1" path="security-reference/authorization#supported-privileges">`VIEWCLUSTERMETADATA` privilege</InternalLink>.

* <InternalLink version="v24.1" path="plpgsql">PL/pgSQL</InternalLink> blocks can now be nested in a block that has an exception handler.

### DB Console changes

* Resolved an issue where clusters with multiple stores per node may list inaccurate region/node information in the <InternalLink version="v24.1" path="ui-databases-page">**Databases**</InternalLink> page.
* `VIEW` type tables will no longer display in the DB Console <InternalLink version="v24.1" path="ui-databases-page">**Databases**</InternalLink> pages. Previously these would be listed with no information, only displaying errors.
* Fixed an intermittent page crash in the <InternalLink version="v24.1" path="ui-insights-page#schema-insights-tab">**Schema Insights**</InternalLink> tab.
* Fixed a bug where the **Rows written** value was incorrectly showing the **Rows read** value on the <InternalLink version="v24.1" path="ui-insights-page">**Insights**</InternalLink> page.

### Bug fixes

* Fixed a bug that occurred when using <InternalLink version="v24.1" path="alter-table">`ALTER TABLE`</InternalLink> to drop and re-add a <InternalLink version="v24.1" path="check">`CHECK` constraint</InternalLink> with the same name.
* Fixed a bug in which it was possible to <InternalLink version="v24.1" path="show-vars#supported-variables">`SET transaction_read_only = false`</InternalLink> during an <InternalLink version="v24.1" path="as-of-system-time">`AS OF SYSTEM TIME`</InternalLink> transaction.
* Fixed a bug that caused a slow memory leak that could accumulate when opening many new connections. The bug was present in v22.2.9+ and v23.1+ versions.

### Contributors

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

* Andrew Delph

## v24.1.0-alpha.2

Release Date: March 11, 2024

### Downloads

<Danger>
  CockroachDB v24.1.0-alpha.2 is a testing release. Testing releases are intended for testing and experimentation only, and are not qualified for production environments and not eligible for support or uptime SLA commitments.
</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.1.0-alpha.2.linux-amd64.tgz">cockroach-v24.1.0-alpha.2.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.2.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.2.linux-amd64.tgz">cockroach-sql-v24.1.0-alpha.2.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.2.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.2.linux-arm64.tgz">cockroach-v24.1.0-alpha.2.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.2.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.2.linux-arm64.tgz">cockroach-sql-v24.1.0-alpha.2.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.0-alpha.2.darwin-10.9-amd64.tgz">cockroach-v24.1.0-alpha.2.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.2.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.2.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.0-alpha.2.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.0-alpha.2.darwin-11.0-arm64.tgz">cockroach-v24.1.0-alpha.2.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.2.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.2.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.0-alpha.2.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.0-alpha.2.windows-6.2-amd64.zip">cockroach-v24.1.0-alpha.2.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.2.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.2.windows-6.2-amd64.zip">cockroach-sql-v24.1.0-alpha.2.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.0-alpha.2
```

### Security updates

* <InternalLink version="v24.1" path="ui-overview">DB Console</InternalLink> `session` cookie is now marked `HttpOnly` to prevent it from being read by any JavaScript code.
* <InternalLink version="v24.1" path="ui-overview">DB Console</InternalLink> cookies are now marked `Secure` for the browser when the cluster is running in secure mode.

### General changes

* <InternalLink version="v24.1" path="architecture/life-of-a-distributed-transaction#gateway">Gateways</InternalLink> will now detect faulty or stalled <InternalLink version="v24.1" path="architecture/overview">replicas</InternalLink> and use other replicas instead, which can prevent them getting stuck in certain cases (e.g., with <InternalLink version="v24.1" path="cluster-setup-troubleshooting#disk-stalls">disk stalls</InternalLink> ). This behavior can be disabled via the <InternalLink version="v24.1" path="cluster-settings">cluster setting</InternalLink> `kv.dist_sender.circuit_breaker.enabled`.

### Enterprise edition changes

* Added a new <InternalLink version="v24.1" path="alter-role#set-the-subject-role-option-for-certificate-based-authentication">`ALTER ROLE... SUBJECT` option</InternalLink>. This role option can be set to a subject distinguished name in [RFC 2253](https://www.ietf.org/rfc/rfc2253) or [RFC 4514](https://www.rfc-editor.org/rfc/rfc4514) format. If set, then during client certificate authentication, certs that do not match the configured distinguished name will be rejected.
* <InternalLink version="v24.1" path="create-changefeed">Changefeeds</InternalLink> support a new scheme `azure-event-hub://` for Kafka data streaming to Azure event hubs. The `sinkURL` must include mandatory parameters `shared_access_key_name` and `shared_access_key`. By default and as required, the options `tls_enabled=true`, `sasl_handshake=true`, `sasl_enabled=true`, and `sasl_mechanism=PLAIN` are applied, as they are the only supported options. Other parameters such as `topic_name` and `topic_prefix` are also supported. An example URI is: `azure-event-hub://myeventhubs.servicebus.windows.net:9093?shared_access_key_name=abc&shared_access_key=123`.

### SQL language changes

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

### Bug fixes

* Fixed a bug that prevented the use of <InternalLink version="v24.1" path="plpgsql">PL/pgSQL</InternalLink> routines with complex variable names that require double quotes. This bug had existed since v23.2.
* Fixed a bug that could cause creation of a syntactically invalid <InternalLink version="v24.1" path="plpgsql">PL/pgSQL</InternalLink> routine to return the wrong error. This bug had existed since v23.2.
* Fixed a bug that could result in a syntax error if a <InternalLink version="v24.1" path="plpgsql">PL/pgSQL</InternalLink> routine was created with an escaped string constant in the routine body. This bug had existed since v23.2.
* Fixed a bug where running a <InternalLink version="v24.1" path="change-data-capture-overview">changefeed</InternalLink> that targets a table with a user-defined type column and with the <InternalLink version="v24.1" path="create-changefeed">`envelope` option</InternalLink> set to any value other than `wrapped` would cause a node panic due to a nil dereference.
* Fixed a bug where running <InternalLink version="v24.1" path="restore">`RESTORE`</InternalLink> on certain backups would open a very large number of connections to the backup storage provider.
* Previously, a user with the `VIEWACTIVITYREDACTED` <InternalLink version="v24.1" path="security-reference/authorization#managing-privileges">privilege</InternalLink> could see constants inside of queries that originated from other <InternalLink version="v24.1" path="security-reference/authorization#roles">users</InternalLink> in the <InternalLink version="v24.1" path="show-sessions">`SHOW SESSIONS`</InternalLink> output. This information is now properly redacted.
* Previously, the <InternalLink version="v24.1" path="show-statements">`SHOW QUERIES`</InternalLink> and <InternalLink version="v24.1" path="show-statements">`SHOW STATEMENTS`</InternalLink> commands incorrectly required the user to have the `VIEWACTIVITY` or `VIEWACTIVITYREDACTED` <InternalLink version="v24.1" path="security-reference/authorization#managing-privileges">privilege</InternalLink>. This is now fixed, as a user should always be able to view their own queries, even without this privilege.

### Contributors

This release includes 1939 merged PRs by 109 authors.

## v24.1.0-alpha.1

Release Date: March 7, 2024

### Downloads

<Danger>
  CockroachDB v24.1.0-alpha.1 is a testing release. Testing releases are intended for testing and experimentation only, and are not qualified for production environments and not eligible for support or uptime SLA commitments.
</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.1.0-alpha.1.linux-amd64.tgz">cockroach-v24.1.0-alpha.1.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.1.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.1.linux-amd64.tgz">cockroach-sql-v24.1.0-alpha.1.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.1.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.1.linux-arm64.tgz">cockroach-v24.1.0-alpha.1.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.1.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.1.linux-arm64.tgz">cockroach-sql-v24.1.0-alpha.1.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.0-alpha.1.darwin-10.9-amd64.tgz">cockroach-v24.1.0-alpha.1.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.1.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.1.darwin-10.9-amd64.tgz">cockroach-sql-v24.1.0-alpha.1.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.0-alpha.1.darwin-11.0-arm64.tgz">cockroach-v24.1.0-alpha.1.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.1.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.1.darwin-11.0-arm64.tgz">cockroach-sql-v24.1.0-alpha.1.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.0-alpha.1.windows-6.2-amd64.zip">cockroach-v24.1.0-alpha.1.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v24.1.0-alpha.1.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.0-alpha.1.windows-6.2-amd64.zip">cockroach-sql-v24.1.0-alpha.1.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v24.1.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.1.0-alpha.1
```

### Backward-incompatible changes

* <InternalLink version="v24.1" path="as-of-system-time">`AS OF SYSTEM TIME`</InternalLink> queries can no longer use a timestamp followed by a question mark to signify a future-time value. This was an undocumented syntax.

### Enterprise edition changes

* <InternalLink version="v24.1" path="alter-changefeed">`ALTER CHANGEFEED`</InternalLink> no longer removes a <InternalLink version="v24.1" path="cdc-queries">CDC query</InternalLink> when modifying changefeed properties.
* `changefeed.balance_range_distribution.enable` is now deprecated. Instead, use the new <InternalLink version="v24.1" path="cluster-settings">cluster setting</InternalLink> `changefeed.default_range_distribution_strategy`. `changefeed.default_range_distribution_strategy='balanced_simple'` has the same effect as setting `changefeed.balance_range_distribution.enable=true`. It does not require `initial_scan='only'`, which was required by the old setting.
* CDC queries now correctly handle the <InternalLink version="v24.1" path="cdc-queries#cdc-query-function-support">`changefeed_creation_timestamp`</InternalLink> function.
* The new syntax `ALTER VIRTUAL CLUSTER virtual-cluster START REPLICATION OF virtual-cluster ON physical-cluster` can now be used to reconfigure virtual clusters previously serving as sources for <InternalLink version="v24.1" path="physical-cluster-replication-overview">physical cluster replication</InternalLink> to become standbys to a promoted standby. This reverses the direction of replication while maximizing data reuse.
* <InternalLink version="v24.1" path="backup">`BACKUP`</InternalLink> s now load range information that is used to avoid a spike in metadata lookups when backups begin.
* Clusters created to run <InternalLink version="v24.1" path="physical-cluster-replication-overview">physical cluster replication</InternalLink> no longer automatically disable the <InternalLink version="v24.1" path="cluster-settings">`spanconfig.range_coalescing.system.enabled`</InternalLink> and <InternalLink version="v24.1" path="cluster-settings">`spanconfig.range_coalescing.application.enabled`</InternalLink> cluster settings. Users who started using physical cluster replication on v23.1 or v23.2 may wish to manually reset these settings.
* Physical cluster replication is now always enabled, and the `physical_replication.enabled` cluster setting has been removed.

### SQL language changes

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

### Operational changes

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

### Command-line changes

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

### DB Console changes

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

### Bug fixes

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

### Performance improvements

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

### Contributors

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

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