> ## 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 v25.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 v25.1 is an optional <InternalLink path="index#major-versions">Innovation release</InternalLink>. This version can be skipped for CockroachDB Advanced and self-hosted clusters. It is unavailable for CockroachDB Standard and CockroachDB Basic clusters.

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

## v25.1.10

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

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

## v25.1.9

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

### SQL language changes

* Added a session variable `initial_retry_backoff_for_read_committed` that controls the initial backoff duration when retrying an individual statement in an explicit `READ COMMITTED` transaction. A duration of `0` disables exponential backoff. If a statement in an explicit `READ COMMITTED` transaction is failing with the `40001` error `ERROR: restart transaction: read committed retry limit exceeded; set by max_retries_for_read_committed=...`, then you should set `initial_retry_backoff_for_read_committed` to a duration proportional to the typical execution time of the statement (in addition to also increasing `max_retries_for_read_committed` ).
* Added the metrics `sql.txn.auto_retry.count` and `sql.statements.auto_retry.count`, which count the number of automatic retries of SQL transactions and statements, respectively, within the database. These metrics differ from the related `txn.restarts.*` metrics, which count retryable errors emitted by the KV layer that must be retried. The new `sql.txn.auto_retry.count` and `sql.statements.auto_retry.count` metrics count auto-retry actions taken by the SQL layer in response to some of those retryable errors.

### DB Console changes

* Updated the "Learn more" link on the **Hot Ranges** page to direct users to a newer, more comprehensive reference guide about hotspots.

### Bug fixes

* Fixed a data race in the `cloudstorage` sink.
* Fixed an error in `crdb_internal.table_spans` that could occur when a table's schema had been dropped.
* Fixed a bug where `libpq` clients using the async API could hang with large result sets (Python: psycopg; Ruby: ActiveRecord, ruby-pg).
* The `RESET ALL` statement no longer affects the following session variables:
  * `is_superuser`
  * `role`
  * `session_authorization`
  * `transaction_isolation`
  * `transaction_priority`
  * `transaction_status`
  * `transaction_read_only`

    This better matches PostgreSQL behavior for `RESET ALL`. In addition, the `DISCARD ALL` statement no longer errors when `default_transaction_use_follower_reads` is enabled.
* In v25.1, automatic partial statistics collection was enabled by default (by setting the `sql.stats.automatic_partial_collection.enabled` cluster setting to `true`). Partial statistics collection may encounter certain expected scenarios that were previously reported as failed stats jobs with PostgreSQL error code `55000`. These errors are benign and are no longer reported. Instead, the stats job will be marked as "succeeded," though no new statistics will be created.
* Fixed a slow memory leak that was introduced in v25.1.8, v25.2.1, v25.2.2, and v25.3 betas. The leak would accumulate whenever a node executed a part of the distributed plan (the gateway node of the plan was not affected), and could only be mitigated by restarting the node.
* Fixed a bug that would allow a race condition in foreign key cascades under `READ COMMITTED` and `REPEATABLE READ` isolation levels.

## v25.1.8

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

### Bug fixes

* Fixed a bug where a CockroachDB node could crash when executing `DO` statements that contain currently unsupported DDL statements like `CREATE TYPE` in a non-default configuration (additional logging needed to be enabled, e.g., via the `sql.log.all_statements.enabled` cluster setting). This bug was introduced in v25.1.
* Fixed a bug where the `kv.rangefeed.closed_timestamp.slow_ranges` would not be incremented when a rangefeed closed timestamp was slower than the target threshold.
* 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 an `AFTER` trigger to fail with `client already committed or rolled back the transaction` if the query also contained foreign-key cascades. The bug had existed since `AFTER` triggers were introduced in v24.3.
* 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).
* Previously, CockroachDB could incorrectly evaluate the `to_regclass`, `to_regnamespace`, `to_regproc`, `to_regprocedure`, `to_regrole`, and `to_regtype` built-in functions when the query using them was evaluated in a distributed fashion. The bug was introduced with these built-in functions in v23.1 and is now fixed.
* Fixed a bug that caused the optimizer to ignore index hints when optimizing some forms of prepared statements. This could result in one of two unexpected behaviors: a query errors with the message `index cannot be used for this query` when the index can actually be used; or a query uses an index that does not adhere to the hint. The hints relevant to this bug are regular index hints, e.g., `SELECT * FROM tab@index`, `FORCE_INVERTED_INDEX`, and `FORCE_ZIGZAG`.
* 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.
* Fixed an issue with logical data replication where the presence of a unique index may cause spurious dead-letter queue (DLQ) entries if the unique index has a smaller index ID than the primary key index.

### Performance improvements

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

## v25.1.7

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

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

### Operational changes

* SQL queries run on the source cluster by logical data replication (LDR) and physical cluster replication (PCR) will now account to internal metrics like `sql.statements.active.internal` instead of metrics like `sql.statements.active` that are used to monitor application workload.

### Bug fixes

* Fixed a bug where using values `changefeed.aggregator.flush_jitter` and `min_checkpoint_frequency` such that `changefeed.aggregator.flush_jitter * min_checkpoint_frequency < 1` would cause a panic. Jitter will now be disabled in this case.
* Fixed a bug in the DB Console where the **Drop unused index** tag appeared multiple times for an index on the **Indexes** tab of the table details page.
* 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 a bug that could potentially cause a changefeed to erroneously complete when one of its watched tables encounters a schema change.
* 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.
* Improve the performance of `SHOW CREATE TABLE` on multi-region databases with large numbers of objects.
* 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 where running `DROP INDEX` on a hash-sharded index did not properly detect dependencies from functions and procedures on the shard column. This caused the `DROP INDEX` statement to fail with an internal validation error. Now the statement returns a correct error message, and using `DROP INDEX... CASCADE` works as expected by dropping the dependent functions and procedures.
* 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 that could cause a row-level TTL job to fail with the error "comparison of two different versions of enum" if an `ENUM` type referenced by the table experienced a schema change.
* Fixed a bug where the physical cluster replication (PCR) reader catalog job could hit validation errors when schema objects had dependencies between them (for example, when a sequence's default expression was being removed).
* 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 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 bug that could lead to a node stall.
* Fixed a bug where an invalid comment in the `system.comment` table for a schema object could make it inacessible.
* Fixed a rare corruption bug that impacts import and materialized views.

## v25.1.6

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

### SQL language changes

* 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.
* `EXPLAIN ANALYZE` statements now display the number of transaction retries and time spent retrying, if non-zero, in the plan output.
* A new `execution time` statistic is now reported on `EXPLAIN ANALYZE` output for most operators. Previously, this statistic was only available on the DistSQL diagrams in `EXPLAIN ANALYZE (DISTSQL)` output.

### Operational changes

* The `sys.cpu.host.combined.percent-normalized` metric has been updated to include additional counters for more accurate host CPU measurement and to reduce underreporting. It now accounts for time spent processing hardware ( `irq` ) and software ( `softirq` ) interrupts, as well as `nice` time, which represents low-priority user-mode activity.
* The `server.client_cert_expiration_cache.capacity` cluster setting has been removed. The `security.certificate.expiration.client` and `security.certificate.ttl.client` metrics now report the lowest value observed for a user in the last 24 hours.

### Bug fixes

* Previously, fast failback for physical cluster replication (PCR) could succeed even if the destination cluster protected timestamp had been removed, causing the reverse stream to enter a crashing loop. This fix ensures the failback command fast fails.
* The reader virtual cluster now starts if the user begins a physical cluster replication (PCR) stream from a cursor via `ALTER VIRTUAL CLUSTER virtual_cluster START REPLICATION OF virtual_cluster ON physical_cluster WITH READ VIRTUAL CLUSTER`.
* Fixed a bug that caused changefeeds to fail on startup when scanning a single key.
* 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 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.
* 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 crash due to `use of enum metadata before hydration` when using logical data replication (LDR) with user-defined types.
* Fixed a bug where a GC threshold error (which appears as "batch timestamp must be after replica GC threshold...") could cause a schema change that backfills data to fail. Now, the error will cause the backfill to be retried at a higher timestamp to avoid the error.
* 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.
* Fixed a potential deadlock that could occur during client certificate updates while metrics were being collected. This issue affected the reliability of certificate expiration reporting.
* 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.
* The `ALTER VIRTUAL CLUSTER SET REPLICATION READ VIRTUAL CLUSTER` syntax is now supported for adding a reader virtual cluster for an existing Physical Cluster Replication (PCR) standby.
* 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 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 that could lead to a node stall.

### Performance improvements

* Schema changes that require data to be backfilled no longer hold a protected timestamp for the entire duration of the backfill; this means there is less overhead caused by MVCC garbage collection after the backfill completes.

## v25.1.5

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

### Bug fixes

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

## v25.1.4

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

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

## v25.1.3

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

### General changes

* When changefeeds are created with a `resolved` option lower than the `min_checkpoint_frequency` option, a message was printed to inform the user. This message is now a notice, and includes extra information if either option was a default.

### Operational changes

* Added the cluster setting `server.child_metrics.include_aggregate.enabled` (default: `true` ) that controls the behavior of Prometheus child metrics reporting ( `/_status/vars` ). When set to `true`, child metrics include an aggregate time series, maintaining the existing behavior. When set to `false`, it stops reporting the aggregate time series, preventing double counting when querying metrics.
* 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.

### Bug fixes

* Fixed a crash due to `use of enum metadata before hydration` when using logical data replication (LDR) with user-defined types.
* Fixed an issue where dropping a database with triggers could fail due to an undropped backreference to a trigger function.
* 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.
* A step in the 25.1 upgrade finalization process that required backfilling jobs now uses locks to ensure it makes progress even when there is contention on the jobs table to prevent the possibility of becoming stuck under heavy load.
* 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, preventing new child objects from being created under deleted parent objects.
* Fixed a bug when running with the `autocommit_before_ddl` session variable that could cause a runtime error when binding a previously prepared DDL statement.
* Fixed a bug that would prevent `CREATE TRIGGER` and `DROP TRIGGER` statements from working if the `autocommit_before_ddl` setting was enabled, and if the statement was either sent as a prepared statement or as part of a batch of multiple statements.
* Fixed a bug where CockroachDB could incorrectly evaluate casts to some OID types (like `REGCLASS` ) in some cases. The bug had been present since at least v22.1.
* Fixed a bug where replication controls on indexes and partitions would not get properly updated with their new IDs during index backfills, effectively discarding the replication controls set on them before the backfill.
* Fixed a bug where `EXPLAIN ANALYZE` output could incorrectly show `distribution: full` and not `distribution: local` in some cases when the physical plan was only running on the gateway node. The bug had been present since before v23.1, and did not apply to `EXPLAIN` statements.
* The TTL deletion job now includes a retry mechanism that progressively reduces the batch size when encountering contention. This improves the chances of successful deletion without requiring manual adjustments to TTL knobs. Also added the `jobs.row_level_ttl.num_delete_batch_retries` metric to track the number of times the TTL job had to reduce the batch size and try again.
* Fixed a bug where the fraction completed and internal checkpoints during an index backfill operation would stop getting written if any of the periodic fraction/checkpoint write operations failed. Additional logging was added so that progress is logged in addition to being written to the job record. This bug affected schema change operations such as creating an index or adding a non-nullable column to a table.
* Fixed a bug which would send a replica outside of a tenant's known region when `SURVIVE REGION FAILURE` was set and exactly 3 regions were configured.
* Fixed a bug that could cause the upgrade to v25.1 to crash if a job was missing from the virtual table. For example, if a malformed job had no payload information.
* Fixed a bug where during validation of a table-level zone config, inherited values were incorrectly populated from the default range instead of from the parent database.
* Fixed a bug in client certificate expiration metrics, `security.certificate.expiration.client` and `security.certificate.ttl.client`.
* Fixed a bug where a node that was drained as part of decommissioning may have interrupted SQL connections that were still active during drain (and for which drain would have been expected to wait).
* Physical Cluster Replication (PCR) reader catalogs could have orphaned rows in `system.namespace` after an object is renamed.

### Miscellaneous

* Updated the `CREATE TRIGGER` `only implemented in the declarative schema changer` error message to include a helpful suggestion and link to relevant docs.
* When configuring the `sql.ttl.default_delete_rate_limit` cluster setting, a notice is displayed informing the user that the TTL rate limit is per leaseholder per table with a link to the docs.
* When configuring the `sql.ttl.default_delete_rate_limit` cluster setting, a notice is displayed informing the user that the TTL rate limit is per leaseholder per table with a link to the docs.
* Improved S3 credential caching for STS credentials to avoid exceeding the Amazon metadata service rate limit and encountering errors related to AssumeRole API calls when accessing large numbers of files in larger clusters.

## v25.1.2

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

### SQL language changes

* 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`.

### DB Console changes

* The **Paused Follower** graph has been removed from the **Replication Dashboard** in DB Console because followers are no longer paused by default in CockroachDB v25.1 and later.

### Bug fixes

* Fixed a bug that prevented starting multi-table logical data replication (LDR) streams on tables that contained user-defined types.
* Fixed a bug where dropping a table with a trigger using the legacy schema changer could leave an orphaned reference in the descriptor. This issue occurred when two tables depended on each other via a trigger, and the table containing the trigger was dropped.
* Fixed a bug that could cause the upgrade to v25.1 to crash if a job was missing from the virtual table, such as when a malformed job had no payload information.
* A step in the v25.1 upgrade finalization process that required backfilling jobs now uses locks to ensure it makes progress even when there is contention on the jobs table, which prevents the possibility of becoming stuck under heavy load.
* Fixed a bug that could cause concurrent DML statements to prevent primary key changes from succeeding.
* 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 where the primary key column is used as the predicate expression.
* Fixed a bug that could cause `SHOW CREATE TABLE` to fail if a database was offline (e.g., due to a `RESTORE` on that database).
* Fixed a bug that prevented transaction retry errors encountered during implicit transactions from being automatically retried internally if the `autocommit_before_ddl` session variable was enabled and the statement was a schema change.
* Fixed a bug that could cause `nil pointer dereference` errors when executing statements with user-defined functions (UDFs) or certain built-in functions, such as `obj_description`.
* Improved S3 credential caching for STS credentials to avoid exceeding the Amazon metadata service rate limit and encountering errors related to AssumeRole API calls when accessing large numbers of files in larger clusters.

## v25.1.1

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

### Bug fixes

* Improved S3 credential caching for STS credentials to avoid exceeding the Amazon metadata service rate limit and encountering errors related to AssumeRole API calls when accessing large numbers of files in larger clusters.

## v25.1.0

Release Date: February 18, 2025

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

### Feature highlights

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

* **Feature categories**
  * [CockroachDB Cloud](#v25-1-0-cloud)
  * [Change Data Capture](#v25-1-0-change-data-capture)
  * [Cloud File Storage](#v25-1-0-disaster-recovery)
  * [SQL](#v25-1-0-sql)
  * [KV](#v25-1-0-kv)
* **Additional information**
  * [Backward-incompatible changes](#v25-1-0-backward-incompatible-changes)
  * [Key cluster setting changes](#v25-1-0-key-cluster-setting-changes)
  * [Deprecations](#v25-1-0-deprecations)
  * [Known limitations](#v25-1-0-known-limitations)
  * [Additional resources](#v25-1-0-additional-resources)

#### CockroachDB Cloud

<table><thead><tr><th class="center-align" colspan="1" rowspan="2">Feature</th><th class="center-align" colspan="5" 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">Advanced</th><th colspan="1" rowspan="1">Standard</th><th colspan="1" rowspan="1">Basic</th></tr></thead><tbody><tr><td>Export Monthly CockroachDB Cloud Invoices as CSV<br /><br /><a href="https://cockroachlabs.cloud/signup">CockroachDB Cloud</a> now enables you to <InternalLink version="cockroachcloud" path="billing-management#export-invoices">export your CockroachDB Cloud monthly invoice as a CSV file</InternalLink> to share with your team or analyze billing data.</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><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>

#### Change Data Capture

<table><thead><tr><th class="center-align" colspan="1" rowspan="2">Feature</th><th class="center-align" colspan="5" 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">Advanced</th><th colspan="1" rowspan="1">Standard</th><th colspan="1" rowspan="1">Basic</th></tr></thead><tbody><tr><td>Added a Human-Readable Format for Timestamps<br /><br /><a href="https://www.cockroachlabs.com/docs/v25.1/show-jobs#show-changefeed-jobs"><code>SHOW CHANGEFEED JOBS</code></a> output now includes timestamps in a human readable format via a new field called <code>readable\_high\_water\_timestamp</code>. You can still find timestamps in the epoch nanosecond format in the field <code>high\_water\_timestamp</code>.</td><td>25.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><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>

#### Cloud File Storage

<table><thead><tr><th class="center-align" colspan="1" rowspan="2">Feature</th><th class="center-align" colspan="5" 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">Advanced</th><th colspan="1" rowspan="1">Standard</th><th colspan="1" rowspan="1">Basic</th></tr></thead><tbody><tr><td>Now Supporting Workload Identity for Azure Blob Storage<br /><br />CockroachDB now supports Workload Identity for implicit authentication with <a href="https://www.cockroachlabs.com/docs/dev/cloud-storage-authentication?filters=azure#azure-blob-storage-implicit-authentication">Azure Blob Storage</a>.</td><td>25.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><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="5" 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">Advanced</th><th colspan="1" rowspan="1">Standard</th><th colspan="1" rowspan="1">Basic</th></tr></thead><tbody><tr><td><code>ALTER COLUMN TYPE</code> Now Generally Available<br /><br /><InternalLink path="alter-table#alter-column-data-types"><code>ALTER COLUMN TYPE</code></InternalLink> is now generally available (GA). This provides enhanced schema flexibility for your CockroachDB deployments. This release significantly expands the capabilities of <code>ALTER COLUMN TYPE</code> and simplifies its usage. Key improvements include:<br /><br />- Seamless integration with virtual columns, allowing for more flexible schema modifications<br /><br />- Complete compatibility with default values, preserving your data consistency requirements<br /><br />- Simplified usage with no session variable requirements</td><td>25.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><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>Transactions Automatically Commit Before DDL Statements<br /><br />CockroachDB now automatically commits the current transaction before executing DDL statements. With this change, data definition language (DDL) statements now trigger an automatic commit of any preceding data manipulation language (DML) statements. This change eliminates common errors from mixing DDL and DML. The cluster setting <code>autocommit\_before\_ddl</code> enables this behavior and is set to <code>on</code> by default. To disable this behavior run <code>ALTER ROLE ALL SET autocommit\_before\_ddl = off;</code>. See the <InternalLink version="releases" path="v25.1">backward incompatible changes</InternalLink> section for additional information.</td><td>25.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><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>Improvements to Stored Procedures and User Defined Functions (UDFs)<br /><br />Expanded support for <a href="https://www.cockroachlabs.com/docs/v25.1/stored-procedures">stored procedures</a>, <a href="https://www.cockroachlabs.com/docs/v25.1/user-defined-functions">user-defined functions</a>, and <a href="https://www.cockroachlabs.com/docs/v25.1/plpgsql">PL/pgSQL</a> blocks. This release introduces several features that enhance your ability to write complex database logic. The changes include:<br /><br />- Support for <a href="https://www.cockroachlabs.com/docs/v25.1/common-table-expressions">Common Table Expressions (<code>WITH</code> queries)</a> within stored procedures and user-defined functions (UDFs)<br /><br />- Support for <a href="https://www.cockroachlabs.com/docs/dev/create-function#create-a-function-that-returns-a-table"><code>RETURNS TABLE</code></a> in SQL-language UDFs<br /><br />- Support for <a href="https://www.cockroachlabs.com/docs/v25.1/do"><code>DO</code></a>statements (anonymous code blocks) written in PL/pgSQL</td><td>25.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><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>

#### KV

<table><thead><tr><th class="center-align" colspan="1" rowspan="2">Feature</th><th class="center-align" colspan="5" 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">Advanced</th><th colspan="1" rowspan="1">Standard</th><th colspan="1" rowspan="1">Basic</th></tr></thead><tbody><tr><td>Admission Control Available on SQL Writes<br /><br />Added support for replication admission control on SQL writes, allowing writes and background cluster operations to be paced to prevent overloading the cluster during node restarts or joins.</td><td>25.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><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>Improved Leaseholder Management (Preview)<br /><br />This release introduces <a href="https://www.cockroachlabs.com/docs/v25.1/architecture/replication-layer#leader-leases">Leader Leases</a> (now in preview) which are a new lease type designed to removes the dependency on node liveness in favor of a distrbuted store liveness fabric, making all nodes and ranges more resilient to node failures and partitions.</td><td>25.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><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td></tr></tbody></table>

<table><thead><tr><th colspan="2" id="feature-detail-key">Feature detail key</th></tr></thead><tbody><tr><td>★</td><td>Features marked "All\*" were recently made available in the CockroachDB Cloud platform. They are available for all supported versions of CockroachDB, under the deployment methods specified in their row under Availability.</td></tr><tr><td>★★</td><td>Features marked "All\*\*" were recently made available via tools maintained outside of the CockroachDB binary. They are available to use with all supported versions of CockroachDB, under the deployment methods specified in their row under Availability.</td></tr><tr><td><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td>Feature is available for this deployment method of CockroachDB as specified in the icon’s column: CockroachDB Self-hosted, CockroachDB Advanced, CockroachDB Standard, or CockroachDB Basic.</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 Advanced, CockroachDB Standard, or CockroachDB Basic.</td></tr></tbody></table>

#### Backward-incompatible changes

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

* The old `BACKUP TO`, `RESTORE FROM <collectionURI>`, and `SHOW BACKUP IN <collectionURI>` syntaxes are now fully deprecated and no longer usable.
* Altering a paused backup schedule's recurrence or location no longer resumes the schedule.
* `BACKUP`/`RESTORE` statements no longer return index entries and bytes backed up/restored.
* Introduced the `legacy_varchar_typing` session setting. If `on`, type checking and overload resolution for VARCHAR types ignore overloads that cause errors, allowing comparisons between VARCHAR and non-STRING-like placeholder values to execute successfully. If `off`, type checking of these comparisons is more strict and must be handled with explicit type casts. As of v25.1.0 this setting defaults to `off`.
* Several metrics are redundant and have been removed. The following list maps each removed metric to an existing, identical metric.
  * Removed `sql.schema_changer.running`, which is redundant with `jobs.schema_change.currently_running`.
  * Removed `sql.schema_changer.successes`, which is redundant with `jobs.schema_change.resume_completed`.
  * Removed `sql.schema_changer.retry_errors`, which is redundant with `jobs.schema_change.resume_retry_error`.
  * Removed `sql.schema_changer.permanent_errors`, which is redundant with `jobs.schema_change.resume_failed`.
* The default value of the `autocommit_before_ddl` session variable is now `true`. This will cause any schema change statement that is sent during a transaction to make the current transaction commit before executing the schema change in a separate transaction.

  This change is being made because CockroachDB does not have full support for multiple schema changes in a transaction, as described <InternalLink version="v25.1" path="online-schema-changes">here</InternalLink>.

  Users who do not desire the autocommit behavior can preserve the old behavior by changing the default value of `autocommit_before_ddl` with a command such as:

  `ALTER ROLE ALL SET autocommit_before_ddl = false;`

#### Features that Require Upgrade Finalization

During a major-version upgrade, certain features and performance improvements may not be available until the upgrade is finalized. In v25.1, these are:

* A cluster must have an <InternalLink version="v25.1" path="licensing-faqs#set-a-license">Enterprise license</InternalLink> or a <InternalLink version="v25.1" path="licensing-faqs#obtain-a-license">trial license</InternalLink> set before an upgrade to v25.1 can be finalized.
* Support for XA transactions, which allow CockroachDB to participate in distributed transactions with other resources (e.g. databases or message queues) using a two-phase commit protocol.
* <InternalLink version="v25.1" path="alter-table#alter-column-data-types">`ALTER TABLE... ALTER COLUMN TYPE`</InternalLink> is in <InternalLink version="v25.1" path="cockroachdb-feature-availability#feature-availability-phases">General Availability (GA)</InternalLink>.
* Jobs system changes:
  * `SHOW JOBS` is now based on a new mechanism for storing information about the progress and status of running jobs.
  * `ALTER JOB... OWNER TO` can now be used to transfer ownership of a job between users/roles.
  * Users can now always see and control (pause/resume/cancel) jobs that they own.

#### Key Cluster Setting Changes

Changes to <InternalLink version="v25.1" path="cluster-settings">cluster settings</InternalLink> should be reviewed prior to upgrading. New default cluster setting values will be used unless you have manually set a value for a setting. This can be confirmed by running the SQL statement `SELECT * FROM system.settings` to view the non-default settings.

* [Settings added](#v25-1-0-settings-added)
* [Settings with changed defaults](#v25-1-0-settings-with-changed-defaults)
* [Settings with changed visibility](#v25-1-0-settings-with-changed-visibility)
* [Renamed settings](#v25-1-0-renamed-settings)
* [Additional setting changes](#v25-1-0-additional-cluster-setting-changes)

##### Settings added

* `kv.transaction.max_intents_and_locks`: accepts an integer value for the maximum number of inserts or durable locks allowed for a single transactions. When set to the default of `0`, this limiting is disabled.
* Schema object identifiers (e.g. database names, schema names, table names, and function names) are no longer redacted when logging statements in the `EXEC` or `SQL_SCHEMA` channels. If redaction of these names is required, then the new cluster setting `sql.log.redact_names.enabled` can be set to `true`. The default value of the setting is `false`.
* Since v23.2, table statistics histograms have been collected for non-indexed JSON columns. Histograms are no longer collected for these columns. This reduces memory usage during table statistics collection, for both automatic and manual collection via `ANALYZE` and `CREATE STATISTICS`. The previous behavior can be re-enabled by setting the cluster setting `sql.stats.non_indexed_json_histograms.enabled` to `true`.
* `ui.database_locality_metadata.enabled` allows operators to disable the loading of extended region information in the DB Console Database and Table pages. In versions prior to v24.3, this information can cause significant CPU load on large clusters with many ranges. When disabled, if customers require this data, they can use the query `SHOW RANGES FROM {DATABASE| TABLE}` to compute it on demand.

##### Settings with changed defaults

* The `kvadmission.flow_control.mode` default value has been changed from `apply_to_elastic` to `apply_to_all`. Regular writes are now subject to admission control by default, meaning that non-quorum required replicas may not be informed of new writes from the leader if they are unable to keep up. This brings a large performance improvement in scenarios with a large backlog of replication work toward one or more nodes, such as node restarts. The behavior can be reverted to the v24.3 and earlier default by changing the setting value to `apply_to_elastic`.
* `kvadmission.store.snapshot_ingest_bandwidth_control.enabled` is now `true` by default. This will enable disk-bandwidth-based admission control for range snapshot ingests. It requires the provisioned bandwidth to be set using `kvadmission.store.provisioned_bandwidth`.
* `sql.stats.automatic_partial_collection.enabled` is now `true` by default. This enables automatic collection of partial table stats. Partial table stats (i.e. those created with `CREATE STATISTICS... USING EXTREMES`) scan the lower and upper ends of indexes to collect statistics outside the range covered by the previous full statistics collection.
* The default value for `trace.span_registry.enabled` has been changed from `true` to `false`.

##### Settings with changed visibility

The following settings are now marked `public` after previously being `reserved`. Reserved settings are not documented and their tuning by customers is not supported.

* `kv.bulk_io_write.min_capacity_remaining_fraction` is now public. It specifies the remaining store capacity fraction below which bulk ingestion requests are rejected. It defaults to `0.05`, and can be set between `0.04` and `0.3`.

##### Renamed settings

* Renamed `changefeed.min_highwater_advance` to `changefeed.resolved_timestamp.min_update_interval` to more accurately reflect its function. The previous name remains usable for backward compatibility. Its value is the minimum amount of time that must have elapsed since the last update of a changefeed's resolved timestamp before it is eligible to be updated again. With the default of `0s`, no minimum interval is enforced, though updates are still limited by the average time needed to checkpoint progress.
* Renamed `changefeed.frontier_highwater_lag_checkpoint_threshold` to `changefeed.span_checkpoint.lag_threshold`. The previous name is still available for backward compatibility.

##### Additional setting changes

* Internal scans are now exempt from the `sql.defaults.disallow_full_table_scans.enabled` cluster setting. This allows index creation even when the setting is enabled.
* When `server.redact_sensitive_settings.enabled` is `true`, the same redaction logic for <InternalLink version="v25.1" path="cluster-settings#sensitive-settings">Sensitive cluster settings</InternalLink> that is used for `SHOW CLUSTER SETTINGS` now applies to the DB Console Cluster Settings page.
* Removed cluster setting `kv.rangefeed.scheduler.enabled`. The rangefeed scheduler is now unconditionally enabled.
* Removed cluster setting `sql.auth.resolve_membership_single_scan.enabled`. This was added in case it was necessary to revert back to the previous behavior for looking up role memberships, but this cluster setting has not been needed in practice since this was added in v23.1.

##### Settings requiring operational changes

* To prevent unnecessary queuing in admission control CPU queues, set the `goschedstats.always_use_short_sample_period.enabled` cluster setting to `true` for any production cluster.

#### Deprecations

The following deprecations are announced in v25.1.

* The old `BACKUP TO`, `RESTORE FROM <collectionURI>`, and `SHOW BACKUP IN <collectionURI>` syntaxes are now fully deprecated and no longer usable.

#### Known limitations

For information about new and unresolved limitations in CockroachDB v25.1, with suggested workarounds where applicable, refer to <InternalLink version="v25.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><a href="https://www.cockroachlabs.com/docs/v25.1/architecture/overview">Architecture Overview</a></td><td>This page provides a starting point for understanding the architecture and design choices that enable CockroachDB's scalability and consistency capabilities.</td></tr><tr><td>Docs</td><td><a href="https://www.cockroachlabs.com/docs/v25.1/sql-feature-support">SQL Feature Support</a></td><td>The page summarizes the standard SQL features CockroachDB supports as well as common extensions to the standard.</td></tr><tr><td>Docs</td><td><a href="https://www.cockroachlabs.com/docs/v25.1/change-data-capture-overview">Change Data Capture Overview</a></td><td>This page summarizes CockroachDB's data streaming capabilities. Change data capture (CDC) provides efficient, distributed, row-level changefeeds into a configurable sink for downstream processing such as reporting, caching, or full-text indexing.</td></tr><tr><td>Docs</td><td><a href="https://www.cockroachlabs.com/docs/v25.1/backup-architecture">Backup Architecture</a></td><td>This page describes the backup job workflow with a high-level overview, diagrams, and more details on each phase of the job.</td></tr></tbody></table>

## v25.1.0-rc.1

Release Date: February 10, 2025

### Downloads

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

### Backward-incompatible changes

* The default value of the `autocommit_before_ddl` session variable is now `true`. This will cause any schema change statement that is sent during a transaction to make the current transaction commit before executing the schema change in a separate transaction.

  This change is being made because CockroachDB does not have full support for multiple schema changes in a transaction, as described <InternalLink version="v25.1" path="online-schema-changes">here</InternalLink>.

  Users who do not desire the autocommit behavior can preserve the old behavior by changing the default value of `autocommit_before_ddl` with a command such as:

  `ALTER ROLE ALL SET autocommit_before_ddl = false;`

### 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. This reduces memory usage during table statistics collection, for both automatic and manual collection via `ANALYZE` and `CREATE STATISTICS`. The previous behavior can be re-enabled by setting the cluster setting `sql.stats.non_indexed_json_histograms.enabled` to `true`.
* Added the session setting `optimizer_prefer_bounded_cardinality` 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 session setting `optimizer_min_row_count` 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.
* Fixed a bug existing only in testing releases of v25.1 that could cause unexpected errors during planning for `VALUES` expressions containing function calls with multiple overloads.
* The default setting for `plan_cache_mode` has been reverted to `force_custom_plan`, after being changed to `auto` in a <InternalLink version="v25.1" path="releases/v25.1#v25-1-0-alpha-1">prior testing release</InternalLink>. You can disregard the <InternalLink version="v25.1" path="releases/v25.1#v25-1-0-alpha-1-performance-improvements">previous release note</InternalLink>.

### 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 existing only in testing releases of v25.1 that could cause the creation of a PL/pgSQL routine with a CTE to fail with an error similar to: `unexpected root expression: with`.
* Fixed a rare bug in which a query might fail with 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.
* Configuring replication controls on a partition name of an index that is not unique across all indexes will now correctly impact only that partition.
* The Data Distribution page in Advanced Debug will no longer crash if there are `NULL` values for `raw_sql_config` in `crdb_internal.zones`.

## v25.1.0-beta.3

Release Date: February 3, 2025

### Downloads

<Danger>
  CockroachDB v25.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>

<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-v25.1.0-beta.3.linux-amd64.tgz">cockroach-v25.1.0-beta.3.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v25.1.0-beta.3.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v25.1.0-beta.3.linux-amd64.tgz">cockroach-sql-v25.1.0-beta.3.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v25.1.0-beta.3.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v25.1.0-beta.3.linux-arm64.tgz">cockroach-v25.1.0-beta.3.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v25.1.0-beta.3.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v25.1.0-beta.3.linux-arm64.tgz">cockroach-sql-v25.1.0-beta.3.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v25.1.0-beta.3.linux-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td rowspan="2">Mac<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v25.1.0-beta.3.darwin-10.9-amd64.tgz">cockroach-v25.1.0-beta.3.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v25.1.0-beta.3.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v25.1.0-beta.3.darwin-10.9-amd64.tgz">cockroach-sql-v25.1.0-beta.3.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v25.1.0-beta.3.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v25.1.0-beta.3.darwin-11.0-arm64.tgz">cockroach-v25.1.0-beta.3.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v25.1.0-beta.3.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v25.1.0-beta.3.darwin-11.0-arm64.tgz">cockroach-sql-v25.1.0-beta.3.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v25.1.0-beta.3.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>Windows<br />(Experimental)</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v25.1.0-beta.3.windows-6.2-amd64.zip">cockroach-v25.1.0-beta.3.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v25.1.0-beta.3.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v25.1.0-beta.3.windows-6.2-amd64.zip">cockroach-sql-v25.1.0-beta.3.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v25.1.0-beta.3.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td></tr></tbody></table>

### Docker image

[Multi-platform images](https://docs.docker.com/build/building/multi-platform) include support for both Intel and ARM. Multi-platform images do not take up additional space on your Docker host.

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

To download the Docker image:

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

### Operational changes

* Reduced noise when using dynamically provisioned logging sinks.
* Added new metrics for monitoring changefeed span-level checkpoint creation:
  * `changefeed.checkpoint.create_nanos`, which measures the time it takes to create a changefeed checkpoint.
  * `changefeed.checkpoint.total_bytes`, which measures the total size of a changefeed checkpoint in bytes.
  * `changefeed.checkpoint.span_count`, which measures the number of spans in a changefeed checkpoint.

### Command-line changes

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

### Bug fixes

* Fixed a bug where sometimes activating diagnostics for SQL activity appears unresponsive, with no state or status update upon activating. Now, the status should always reflect that diagnostics are active, or that a statement bundle is downloadable.
* Fixed a bug where the `plan.txt` file would be incomplete whenever CockroachDB collected a statement bundle with plan-gist-based matching. The bug had been present since the introduction of plan-gist-based matching feature in v23.1, but was partially addressed in v24.2.

## v25.1.0-beta.2

Release Date: January 27, 2025

### Downloads

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

### SQL language changes

* `DROP INDEX` is now labeled a <InternalLink version="v25.1" path="cockroach-sql#allow-potentially-unsafe-sql-statements">potentially unsafe SQL statement</InternalLink>, so it can only be run when the `sql_safe_updates` session variable or `--safe_updates` flag is set to `false`.
* `SHOW JOBS` is now based on a new mechanism for storing information about the progress and status of running jobs.
* `SHOW TENANT WITH REPLICATION STATUS` now includes an `ingestion_job_id` column that displays the ID of the Physical Cluster Replication (PCR) <InternalLink version="v25.1" path="physical-cluster-replication-monitoring">ingestion job</InternalLink>.

### Operational changes

* Customers must pass URIs as <InternalLink version="v25.1" path="create-external-connection">external connections</InternalLink> when <InternalLink version="v25.1" path="set-up-logical-data-replication">setting up Logical Data Replication (LDR)</InternalLink>.

### DB Console changes

* The DB Console Cluster Settings page now uses the same redaction logic as `SHOW CLUSTER SETTINGS` when the setting <InternalLink version="v25.1" path="cluster-settings">`server.redact_sensitive_settings.enabled`</InternalLink> is set to `true`.
* The <InternalLink version="v25.1" path="ui-overload-dashboard">Overload dashboard</InternalLink> in DB Console now displays only V2 Replication Admission Control metrics and omits their previous V2 prefix. Previously, both V1 and V2 metrics were displayed. Additionally, the aggregate size of queued replication entries is now displayed.

### Bug fixes

* Fixed a bug where the error "batch timestamp T 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.

### Performance improvements

* The cluster setting `rpc.batch_stream_pool.enabled` now defaults to `false`. This supersedes an earlier release note. This cluster setting is experimental and is not listed as `public`.

## v25.1.0-beta.1

Release Date: January 20, 2025

### Downloads

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

### General changes

* CockroachDB binaries are no longer built with profile-guided optimization (PGO) enabled.

### SQL language changes

* When you run `CREATE LOGICALLY REPLICATED TABLE`, you must specify one of the following options:
  * `UNIDIRECTIONAL`: Sets up a unidirectional stream with fast initial scan.
  * `BIDIRECTIONAL ON {destination uri}`: Sets up a bidirectional stream from the original destination to the original source.
* Logical data replication (LDR) and physical cluster replication (PCR) may now use the `crdb_route=gateway` query option to route the replication streams over a load balancer.
* Updated the column name `description` to `command` in the `SHOW LOGICAL REPLICATION JOBS` responses.

### Operational changes

* The `node decommission` CLI command now waits until the target node is fully drained before marking it as decommissioned. Previously, the command would initiate the drain process but not wait for its completion, leaving the target node in a state where it could not communicate with the cluster but would still accept client requests, causing them to hang or encounter unexpected errors.
* The cluster setting `changefeed.frontier_highwater_lag_checkpoint_threshold` has been renamed to `changefeed.span_checkpoint.lag_threshold`. The previous name is still available for backward compatibility.

### Bug fixes

* Fixed a bounded memory leak that could occur when evaluating some memory-intensive queries using the vectorized engine. This leak had been present since v20.2.
* Fixed a bug where columns created with `GENERATED... BY IDENTITY` with the `SERIAL` type could incorrectly fail internal validations.

## v25.1.0-alpha.3

Release Date: January 15, 2025

### Downloads

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

### Backward-incompatible changes

* Several metrics are redundant and have been removed. The following list maps each removed metric to an existing, identical metric.
  * Removed `sql.schema_changer.running`, which is redundant with `jobs.schema_change.currently_running`.
  * Removed `sql.schema_changer.successes`, which is redundant with `jobs.schema_change.resume_completed`.
  * Removed `sql.schema_changer.retry_errors`, which is redundant with `jobs.schema_change.resume_retry_error`.
  * Removed `sql.schema_changer.permanent_errors`, which is redundant with `jobs.schema_change.resume_failed`.

### General changes

* When changefeeds are created with a resolved option lower than the `min_checkpoint_frequency` option, a notice is now printed, since this may lead to unexpected behavior.
* CockroachDB binaries are now built with profile-guided optimization (PGO) enabled.

### SQL language changes

* Users can now always see and control (pause/resume/cancel) jobs that they own.
* CockroachDB now provides different options for `CREATE LOGICALLY REPLICATED TABLE`: `UNIDIRECTIONAL` and `BIDIRECTIONAL ON`. These options are used for `CREATE LOGICALLY REPLICATED TABLE`, but not `CREATE LOGICAL REPLICATION STREAM`.
* `CHANGEFEED` s using named external connections now automatically update their configuration when the connection configuration changes.
* Added support for `DO` statements embedded within PL/pgSQL routines and other `DO` statements. `DO` statements execute a block of code inline as an anonymous function. Currently, only a PL/pgSQL body is allowed.
* Added support for `DO` statements in SQL, which allow a PL/pgSQL code block to be executed inline.

### Operational changes

* If a row-level TTL job is scheduled to run and the previous scheduled job for that table is still running, the scheduled run will now be skipped rather than waiting for the previous job to complete.
* Schema object identifiers (e.g., database names, schema names, table names, and function names) are no longer redacted when logging statements in the `EXEC` or `SQL_SCHEMA` channels. If redaction of these names is required, then the new cluster setting `sql.log.redact_names.enabled` can be set to `true`. The default value of the setting is `false`.
* Object identifiers such as table names, schema names, function names, and type names are no longer redacted in the `SQL_SCHEMA` log channel.
* Changed the default value of the cluster setting `admission.l0_file_count_overload_threshold` to `4000`.
* Introduced a metric, `sql.schema_changer.object_count`, that counts the number of schema objects in the cluster.
* Renamed the `changefeed.min_highwater_advance` cluster setting to `changefeed.resolved_timestamp.min_update_interval` to more accurately reflect its function. Its description in the automatically generated documentation has also been updated. The previous name remains usable for backward compatibility.

### DB Console changes

* Added a `/debug/pprof/fgprof` endpoint to capture off-CPU stack traces. Use of this endpoint will have a noticeable impact on performance while the endpoint is being triggered.

### Bug fixes

* In the v2 **Databases > Table** page, the `CREATE` statement will now show up as expected for tables with custom schema names.
* Fixed issues with the virtual index scan on `crdb_internal.create_type_statements`, ensuring consistent results when querying user-defined types (UDTs) across databases.
* Queries that perform a cast from the string representation of an array containing geometry or geography types to a SQL array type will now succeed.
* Fixed a bug that disregarded tuple labels in some cases. This could cause unexpected behavior, such as when converting a tuple to JSON with `to_jsonb`. See for more details. This incorrect removal of tuple labels bug was introduced in v22.1.0, and changes in v24.3.0 made unexpected behavior due to the bug more likely.
* Fixed a bug where locks were taken on the system tables `system.users` and `system.role_options` even when `allow_role_memberships_to_change_during_transaction` was set. Now, users are able to create and drop users quickly when `allow_role_memberships_to_change_during_transaction` is set, even if there are contending transactions on `system.users` and `system.role_options`.

## v25.1.0-alpha.2

Release Date: January 9, 2025

### Downloads

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

### Backward-incompatible changes

* Altering a paused backup schedule's recurrence or location no longer resumes the schedule.
* `BACKUP` / `RESTORE` statements no longer return index entries and bytes backed up/restored.

### General changes

* The PTS (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.

### SQL language changes

* DistSQL physical planning decisions under `distsql=auto` mode have been adjusted as follows:
  * Aggregation and general sort operations that process a small number of rows (fewer than `1000` by default, configurable via the `distribute_group_by_row_count_threshold` and `distribute_sort_row_count_threshold` session variables for aggregations and sorts, respectively) no longer force the plan distribution.
  * The top K sort over a large set of rows ( `1000` by default, controlled via the `distribute_sort_row_count_threshold` session variable) will now force the plan distribution.
  * Full table scans estimated to read a certain number of rows (fewer than `10000` by default, controlled via the new `distribute_scan_row_count_threshold` session variable) no longer force the plan distribution.
  * The new `always_distribute_full_scans` session variable now defaults to `true` to match the previous behavior of always distributing full scans.
  * Large constrained table scans estimated to read a certain number of rows (at least `10000` by default, controlled via the `distribute_scan_row_count_threshold` session variable) will now force the plan distribution.
  * Hash and merge joins for which both inputs produce a small number of rows (less than `1000` combined by default, configurable via the `distribute_join_row_count_threshold` session variable) no longer force the plan distribution.
* `DELETE` statements now acquire locks using the `FOR UPDATE` locking mode during their initial row scan in some cases, which improves performance for contended workloads. This behavior is configurable using the `enable_implicit_select_for_update` session variable.
* Added support for `RETURNS TABLE` syntax when creating a user-defined function (UDF).
* Added support for XA transactions, which allow CockroachDB to participate in distributed transactions with other resources (e.g., databases, message queues, etc.) using a two-phase commit protocol.
* Added the `legacy_varchar_typing` session setting, which reverts the changes of that causes the change in typing behavior described in. Specifically, it makes type-checking and overload resolution ignore the newly added "unpreferred" overloads. This setting defaults to `off`.
* 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 a full scan of a partial index would not normally be considered a "full scan" for the purposes of the `AVOID_FULL_SCAN` and `NO_FULL_SCAN` hints, but if the user has explicitly forced the partial index via `FORCE_INDEX=index_name`, it is considered a full scan.
* Added a new session setting `avoid_full_table_scans_in_mutations`, which when set to `true` (default), causes the optimizer to avoid planning full table scans for mutation queries if any other plan is possible.
* `ALTER JOB... OWNER TO` can now be used to transfer ownership of a job between users/roles.

### Operational changes

* Added a new `sql.exec.latency.detail` histogram metric. This metric is labeled with its statement fingerprint. Enable this feature using the `sql.stats.detailed_latency_metrics.enabled` application setting. For workloads with over a couple thousand fingerprints, we advise caution in enabling `sql.stats.detailed_latency_metrics.enabled`. For most workloads, this ranges from dozens to hundreds. Use the new `sql.query.unique.count` count metric to estimate the cardinality of the set of all statement fingerprints.
* Added a new configurable cluster setting `kv.transaction.max_intents_and_locks` that prevents transactions from creating too many intents.
* Added the metric `txn.count_limit_rejected`, which tracks the KV transactions that have been aborted because they exceeded the max number of writes and locking reads allowed.
* Added the metric `txn.count_limit_on_response`, which tracks the number of KV transactions that have exceeded the count limit on a response.
* Cluster setting `kvadmission.store.snapshot_ingest_bandwidth_control.enabled` is now `true` by default. This will enable disk-bandwidth-based admission control for range snapshot ingests. It requires the provisioned bandwidth to be set using `kvadmission.store.provisioned_bandwidth`.
* The `changefeed.max_behind_nanos` metric now supports scoping with metric labels.

### Command-line changes

* Previously, the `--include-files` and `--exclude-files` file filters in `cockroach debug zip` only applied to heap profiles, CPU profiles, goroutines, and logs. The filters now apply to most of the cluster-wide and per-node data captured in the debug zip. This improves `debug zip` performance. Example command: `cockroach debug zip debug.zip --redact --insecure --include-files="*" --exclude-files="*.log"`.

### DB Console changes

* Copy-pasting links to preset timescale views on the DB Console **Metrics** page now reflects those presets accurately (e.g., a URL looking at "last 6 hours" will always show the last 6 hours and update automatically). Clicking the **Now** button on the **Metrics** page will automatically select the live updating preset most closely matching the current inverval. If you are viewing an arbitrary 4-hour interval, the "last 6 hours" preset will be selected.

### Bug fixes

* Fixed a bug that caused queries against tables with user-defined types to sometimes fail with errors after restoring those tables.
* `REGIONAL BY ROW` tables with uniqueness constraints where the region is not part of those uniqueness constraints, and which also contain non-unique indexes, will now have that uniqueness properly enforced when modified under `READ COMMITTED` isolation. This bug was introduced in v24.3.0.
* Fixed a bug existing since v24.1 that would cause a set-returning UDF with `OUT` parameters to return a single row.
* Previously, if a `STORED` computed column was added and it was a fixed-size type such as `VARCHAR(2)`, the computed values would not be checked to make sure they were not too large for the type. Now this validation is performed, which prevents an invalid computed column definition from being added to a table.
* Previously, if a `VIRTUAL` computed column was added and it was a fixed-size type such as `VARCHAR(2)`, the computed values would not be checked to make sure they were not too large for the type. Now this validation is performed, which prevents an invalid computed column definition from being added to a table.
* Removed duplicate columns in the Parquet output from changefeeds using CDC queries.
* Addressed a potential memory leak when parsing client session parameters for new connections.
* 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 cause the `ALTER TABLE... ADD COLUMN` statement to fail.
* 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` cluster setting. This allows index creation even when the setting is enabled.
* Fixed a bug that would cause an internal error when the result of a `RECORD` -returning `UDF` was wrapped by another expression (such as `COALESCE` ) within a `VALUES` clause.
* `CLOSE CURSOR` statements are now allowed in read-only transactions, similar to PostgreSQL. The bug has been present since at least v23.1.
* 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.
* The `pg_catalog.pg_type` table no longer contains `NULL` values for the columns `typinput`, `typoutput`, `typreceive`, and `typsend`. `NULL` values were erroneously added for these columns for the `trigger` type in v24.3.0. This could cause unexpected errors with some client libraries.
* `ALTER BACKUP SCHEDULE` no longer fails on schedules whose collection URI contains a space.
* Previously in some cases, CockroachDB could encounter an internal error `comparison of two different versions of enum` when a user-defined type was modified within a transaction and the following statements read the column of that user-defined type. The bug was introduced in v24.2 and is now fixed.
* Previously `SHOW CREATE TABLE` was showing incorrect data with regard to inverted indexes. It now shows the correct data that can be repeatedly entered back into CockroachDB to recreate the same table.
* Resolved an issue in the Kafka sink configuration within CockroachDB, where users were previously unable to set negative GZIP compression levels. Now, users can configure the `CompressionLevel` for the Kafka sink in the range of `[-2, 9]`.
* Users should no longer see console errors when visiting the **Databases** page directly after node/SQL pod startup.

### Performance improvements

* The default value of cluster setting `kvadmission.flow_control.mode` has been changed from `apply_to_elastic` to `apply_to_all`. Regular writes are now subject to admission control by default, meaning that non-quorum required replicas may not be told about new writes from the leader if they are unable to keep up. This brings a large performance improvement during instances where there is a large backlog of replication work towards a subset of node(s), such as node restarts. The setting can be reverted to the v24.3 and earlier default by setting `kvadmission.flow_control.mode` to `apply_to_elastic`.

## v25.1.0-alpha.1

Release Date: December 19, 2024

### Downloads

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

### Backward-incompatible changes

* The old `BACKUP TO`, `RESTORE FROM <collectionURI>`, and `SHOW BACKUP IN <collectionURI>` syntaxes are now fully deprecated and no longer usable.

### Security updates

* Added support for partial roles from LDAP synced group to be mapped to CockroachDB roles and ensure appropriate erroring for undesired behavior.

### General changes

* To improve the granularity of changefeed pipeline metrics, the changefeed metrics `changefeed.admit_latency` and `changefeed.commit_latency` now have histogram buckets from `5ms` to `60m` (previously `500ms` to `5m` ). The following changefeed metrics now 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 the 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 `system.users` to the list of system tables that changefeeds protect with protected timestamps. This table is required for change data capture queries.
* Added the `AWS_USE_PATH_STYLE` parameter to S3 URI parsing.

### SQL language changes

* Two new builtin functions, `crdb_internal.{lease_holder, range_stats}_with_errors`, include errors encountered while fetching leaseholder and range stats. These new builtins are used by the `crdb_internal.ranges` table, which includes a new column, `errors`, that combines the errors from the builtins.
* The cluster setting `sql.stats.automatic_partial_collection.enabled` is now enabled by default, which enables automatic collection of partial table stats. Partial table stats (i.e., those created with `CREATE STATISTICS... USING EXTREMES` ) scan the lower and upper ends of indexes to collect statistics outside the range covered by the previous full statistics collection.
* When triggers fire one another cyclically, the new `recursion_depth_limit` session variable now limits the depth of the recursion. By default, the limit is `1000` nested trigger executions.
* The names of `BEFORE` triggers fired by a mutation now show up in the `EXPLAIN` output. The trigger-function invocations are visible in the output of verbose `EXPLAIN`.
* `AFTER` triggers will now show up in the output of `EXPLAIN`, as well as `EXPLAIN ANALYZE`.
* Added support for `SHOW TRIGGERS`, which displays the names of all triggers on a table, as well as whether each trigger is enabled. The user must have any privilege on the table, or be its owner.
* Added support for `SHOW CREATE TRIGGER`, which displays the `CREATE` statement for a trigger. The user must have any privilege on the table, or be its owner.
* Added an informational notice to the result of `CREATE TABLE... AS` statements that describes that indexes and constraints are not copied to the new table.
* Altering a column’s type no longer requires enabling the `enable_experimental_alter_column_type_general` session variable. This change makes the feature generally available.
* Added support for `COLLATE` expressions on arrays of strings to match PostgreSQL more closely.
* Added the column `readable_high_water_timestamp` to the output of `SHOW CHANGEFEED JOBS`. This human-readable form will be easier to consume. `high_water_timestamp` still exists and is in epoch nanoseconds.
* The `sql_safe_updates` session variable must be disabled to perform `ALTER COLUMN TYPE` operations that require a column rewrite.
* Added the `CREATE LOGICALLY REPLICATED` syntax that will direct logical data replication jobs to create the destination table(s) using a copy of the source table(s).
* It is now possible to execute queries with correlated joins with sub-queries or common table expressions in both the `INNER` and `OUTER` context. Errors with the following message: `unimplemented: apply joins with subqueries in the "inner" and "outer" contexts are not supported` will no longer occur.
* It is now possible to include a common table expression within the body of a user-defined function or stored procedure.
* Updated the column name `targets` to `tables` in the `SHOW LOGICAL REPLICATION JOBS` responses.

### Operational changes

* Retired the cluster setting `kv.rangefeed.scheduler.enabled`. The rangefeed scheduler is now unconditionally enabled.
* Added the cluster setting `ui.database_locality_metadata.enabled` that allows operators to disable loading extended database and table region information in the DB Console Database and Table pages. This information can cause significant CPU load on large clusters with many ranges. Versions of this page from v24.3 and later do not have this problem. If customers require this data, they can use the `SHOW RANGES FROM {DATABASE| TABLE}` query via SQL to compute on-demand.
* The metrics scrape HTTP endpoint at `/ _status/vars` will now truncate `HELP` text at the first sentence, reducing the metadata for metrics with large descriptions. Descriptions are still accessible in the documentation.
* The row-level TTL job will now periodically update the progress meter in the jobs introspection interfaces, including `SHOW JOBS` and the Jobs page in the DB console.
* The `kv.bulk_io_write.min_capacity_remaining_fraction` cluster setting can be be set between `0.04` and `0.3`.
* Added two new metrics, `sql.distsql.select.distributed_exec.count` and `sql.distsql.select.distributed_exec.count.internal`. These metrics count the number of `SELECT` statements that actually execute with full or partial distribution. These metrics differ from `sql.distsql.select.count` and `sql.distsql.select.count.internal` in that the latter count the number of `SELECT` statements that are **planned** with full or partial distribution, but might not necessarily execute with full or partial distribution, depending on the location of data.
* Added the new metric `sql.distsql.distributed_exec.count` that counts the number of invocations of the execution engine with full or partial distribution. (This is in contrast to `sql.distsql.queries.total`, which counts the total number of invocations of the execution engine.)
* Added some clarification that the following metrics count invocations of the execution engine and not SQL queries (which could each result in multiple invocations of the execution engine):
  * `sql.distsql.queries.active`
  * `sql.distsql.queries.total`
  * `sql.distsql.distributed_exec.count`
* The default value for the cluster setting `trace.span_registry.enabled` has been changed from `true` to `false`.
* Removed the `sql.auth.resolve_membership_single_scan.enabled` cluster setting. This was added in case it was necessary to revert back to the previous behavior for looking up role memberships, but this cluster setting has not 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.

### DB Console changes

* As of v25.1 the legacy Database page, which was previously available through the Advanced Debug page, is no longer available.
* When activating statement diagnostics in the DB Console, users now have the option to produce a redacted bundle as output. This bundle will omit sensitive data.
* Fixed a list of UI bugs on the DB Console Overview and Node Overview pages.
* Removed the link for the legacy table page on the Plan Details page.
* Changed the table and index contents of the Hot Ranges page in DB console.

### Bug fixes

* 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 has existed since v23.1.
* Reduced the duration of partitions in the gossip network when a node crashes in order to eliminate false positives in the `ranges.unavailable` metric.
* Fixed a bug that caused incorrect evaluation of some binary expressions involving `CHAR(N)` values and untyped string literals with trailing whitespace characters. For example, the expression `'f'::CHAR = 'f '` now correctly evaluates to `true`.
* Fixed a race condition in Sarama when Kafka throttling is enabled.
* Fixed a metrics bug in rangefeed restarts introduced in v23.2.
* Fixed a bug that could result in incorrect metrics related to retryable rangefeed errors.
* Fixed a bug that could cause `DELETE` triggers not to fire on cascading `DELETE`, and which could cause `INSERT` triggers to match incorrectly in the same scenario.
* Non- `admin` users that run `DROP ROLE IF EXISTS` on a user that does not exist will no longer receive an error message.
* Fixed a bug where CockroachDB would encounter an internal error when evaluating `FETCH ABSOLUTE 0` statements. The bug had been present since v22.1.
* Fixed a bug that could cause incorrect query results when the optimizer planned a lookup join on an index containing a column of type `CHAR(N)`, `VARCHAR(N)`, `BIT(N)`, `VARBIT(N)`, or `DECIMAL(M, N)`, and the query held that column constant to a single value (e.g., with an equality filter).
* Fixed a bug that prevented restoring cluster backups taken in a multi-region cluster that had configured the `system` database with a region configuration into a non-multi-region cluster.
* Fixed an unhandled error that would occur if `DROP SCHEMA` was executed on the `public` schema of the `system` database, or on an internal schema like `pg_catalog` or `information_schema`.
* `ALTER DATABASE` operations no longer hang when the operation modifies the zone config if an invalid zone config already exists.
* CockroachDB now correctly evaluates `percentile_cont` and `percentile_disc` aggregates over `FLOAT4` values.
* The schema changer's backfill process now includes a retry mechanism that reduces the batch size when memory issues occur. This improves the likelihood of operation success without requiring manual adjustment of the `bulko.index_backfill.batch_size` cluster setting.
* `CREATE SCHEMA` now returns the correct error if a the schema name is missing.
* Fixed an issue where corrupted table statistics could cause the `cockroach` process to crash.
* Table statistics collection in CockroachDB could previously run into `no bytes in account to release` errors in some edge cases (when the SQL memory budget, configured via `--max-sql-memory` flag, was close to being exhausted). The bug has been present since v21.2 and is now fixed.
* `security.certificate.*` metrics will now be updated if a node loads new certificates while running.
* A table that is participating in logical data replication can no longer be dropped. Previously, this was allowed, which would cause all the replicated rows to end up in the dead-letter queue.
* `ALTER COLUMN SET NOT NULL` was not enforced consistently when the table was created in the same transaction.
* `CREATE` relation / type could leave dangling namespace entries if the schema was concurrently being dropped.
* The `idle_in_session_timeout` session variable now excludes the time spent waiting for schema changer jobs to complete, preventing unintended session termination during schema change operations.
* Fixed a bug that causes the optimizer to use stale table statistics after altering an `ENUM` type used in the table.
* CockroachDB now better respects the `statement_timeout` limit on queries involving the top K sort and merge join operations.
* Fixed a bug that would cause the `make_timestamp` and `make_timestamptz` builtin functions to incorrectly extract the `seconds` argument if the value was less than `1`.
* Fixed possible index corruption caused by triggers that could occur when the following conditions were satisfied:
  1. A query calls a user-defined function or stored procedure, and also performs a mutation on a table.
  2. The user-defined function or storage procedure contains a statement that either fires an `AFTER` trigger, or fires a `CASCADE` that itself fires a trigger.
  3. The trigger modifies the same row as the outer statement.
  4. Either the outer or inner mutation is something other than an `INSERT` without an `ON CONFLICT` clause.
* Fixed an issue where license enforcement was not consistently disabled for single-node clusters started with `cockroach start-single-node`, ensuring proper behavior on cluster restarts.
* Fixed a bug that caused an incorrect filesystem to be logged as part of the store information.

### Performance improvements

* The `/_status/nodes_ui` API no longer returns unnecessary metrics in its response. This decreases the payload size of the API and improves the load time of various DB Console pages and components.
* Performance for some PL/pgSQL loops is now significantly improved, by as much as 3–4 times. This is due to applying tail-call optimization in more cases to the recursive sub-routines that implement loops.
* 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.
* The session variable `plan_cache_mode` now defaults to `auto`, enabling generic query plans for some queries.
  * This change is reverted in v25.1.0-rc.1, so this note can be disregarded when running the latest testing release and v25.1 production releases, unless otherwise noted.
* GRPC streams are now pooled across unary intra-cluster RPCs, allowing for reuse of gRPC resources to reduce the cost of remote key-value layer access. This pooling can be disabled using the `rpc.batch_stream_pool.enabled` cluster setting.
  * This information was updated in the [v25.1.0-beta.2 release notes](#v25-1-0-beta-2-performance-improvements).

### Multi-tenancy

* The `nodes` endpoint should work for `shared` secondary tenants. Since nodes are common to all the tenants, this API endpoint behaves similarly to the system tenant's endpoint.
