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

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

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

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

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

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

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

CockroachDB v23.2 <InternalLink path="release-support-policy#support-types">(LTS)</InternalLink> is a required <InternalLink path="index#major-versions">Regular release</InternalLink>. This page contains a complete list of features and changes in v23.2.

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

Get future release notes emailed to you:

<MarketoEmailForm />

## v23.2.31

Release Date: June 26, 2026

### Downloads

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

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

### Docker image

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

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

To download the Docker image:

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

## v23.2.30

Release Date: April 8, 2026

### Downloads

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

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

### Docker image

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

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

To download the Docker image:

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

## v23.2.29

Release Date: February 19, 2026

### Downloads

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

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

### Docker image

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

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

To download the Docker image:

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

### Bug fixes

* Fixed a rare race condition between range splits and MVCC garbage collection where a GCRequest could target keys outside its declared span. In rare cases, this could result in data on the post-split right-hand side (RHS) being incorrectly garbage collected, potentially leading to lost writes. The system now detects and rejects such malformed GC requests.

## v23.2.28

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

### Docker image

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

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

To download the Docker image:

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

### Performance improvements

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

## v23.2.27

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

### Docker image

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

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

To download the Docker image:

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

### Operational changes

* The `goschedstats.always_use_short_sample_period.enabled` cluster setting should be set to `true` for any serious production cluster; this will prevent unnecessary queuing in admission control CPU queues.

### Bug fixes

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

### Performance improvements

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

## v23.2.26

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

### Docker image

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

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

To download the Docker image:

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

### Bug fixes

* Fixed a bug where using values for the cluster setting `changefeed.aggregator.flush_jitter` and the changefeed option `min_checkpoint_frequency` resulting in `changefeed.aggregator.flush_jitter * min_checkpoint_frequency < 1` would cause a panic. Jitter will now be disabled in this case.
* Improved the performance of `SHOW CREATE TABLE` on multi-region databases with a large numbers of objects.
* 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 rare corruption bug that impacts import and materialized views.

## v23.2.25

Release Date: April 30, 2025

### Downloads

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

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

### Docker image

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

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

To download the Docker image:

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

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

### Bug fixes

* Fixed a bug where CockroachDB would encounter an internal error when decoding the gists of plans with `CALL` statements. The bug had been present since v23.2.
* Fixed a bug that caused changefeeds to fail on startup when scanning a single key.
* 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 leave behind a dangling reference to a dropped role if that role had default privileges granted to itself. The bug was caused by defining privileges such as: `ALTER DEFAULT PRIVILEGES FOR ROLE self_referencing_role GRANT INSERT ON TABLES TO self_referencing_role`.
* 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.

## v23.2.24

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

### Docker image

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

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

To download the Docker image:

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

### Bug fixes

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

## v23.2.23

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

### Docker image

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

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

To download the Docker image:

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

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

## v23.2.22

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

### Docker image

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

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

To download the Docker image:

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

### General changes

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

### Bug fixes

* 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 that used the primary key column as the predicate expression.
* Fixed a rare bug in which a query could fail with the error `could not find computed column expression for column in table` while dropping a virtual computed column from a table. This bug was introduced in v23.2.4.
* Fixed a bug that could cause `nil pointer dereference` errors when executing statements with user-defined functions (UDFs). The error could also occur when executing statements with some built-in functions, like `obj_description`.

### Miscellaneous

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

## v23.2.21

Release Date: March 6, 2025

### Downloads

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

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

### Docker image

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

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

To download the Docker image:

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

### SQL language changes

* Since v23.2, table statistics histograms have been collected for non-indexed `JSONB` columns. Histograms are no longer collected for these columns if the `sql.stats.non_indexed_json_histograms.enabled` cluster setting is set to `false`. This reduces memory usage during table statistics collection, for both automatic and manual collection via `ANALYZE` and `CREATE STATISTICS`.

### Bug fixes

* Fixed a bug where under rare circumstances draining a node could fail with `some sessions did not respond to cancellation within 1s`.
* Fixed a bug that prevented the `CREATE` statement for a routine from being shown in a statement bundle. This happened when the routine was created on a schema other than `public`. The bug has existed since v23.1.
* Fixed a bounded memory leak that could previously occur when evaluating some memory-intensive queries via the vectorized engine. The leak has been present since v20.2.
* Previously, in changefeeds using CDC queries and the Parquet format, the output would include duplicate columns when it contained a user-defined primary key. Now, the columns are de-duplicated in Parquet changefeed messages.

## v23.2.20

Release Date: February 6, 2025

### Downloads

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

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

### Docker image

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

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

To download the Docker image:

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

### SQL language changes

* Since v23.2, table statistics histograms have been collected for non-indexed JSON columns. Histograms are no longer collected for these columns if the `sql.stats.non_indexed_json_histograms.enabled` cluster setting is set to `false`. This reduces memory usage during table statistics collection, for both automatic and manual collection via `ANALYZE` and `CREATE STATISTICS`.

### Operational changes

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

### Bug fixes

* Previously, `SHOW CREATE TABLE` was showing incorrect data with regards to inverted indexes. It now shows the correct data that can be repeatedly entered back into CockroachDB to recreate the same table.
* Fixed a bug where querying the `pg_catalog.pg_constraint` table while the schema changer was dropping a constraint could result in a query error.
* Fixed a bounded memory leak that could occur when collecting table statistics on a table that had both very wide (10KiB or more) and relatively small (under 400B) `BYTES` -like values within the same row. This leak had been present since before v19.2.
* Fixed a bug where changefeeds using CDC queries could have duplicate columns in the Parquet output.
* Fixed a bug that prevented the `CREATE` statement for a routine from being included in a statement bundle when the routine was created on a schema other than `public`. The bug had existed since v23.1.

## v23.2.19

Release Date: January 9, 2025

### Downloads

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

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

### Docker image

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

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

To download the Docker image:

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

### Security updates

* The cluster setting `server.jwt_authentication.issuers` now takes the issuers configuration value from the URI. This can be set to one of the following values:
  1. Simple string that can be parsed as a valid issuer URL. For example: `'https://accounts.google.com'`.
  2. String that can be parsed as a valid JSON array of issuer URLs list. For example: `['example.com/adfs','https://accounts.google.com']`.
  3. String that can be parsed as valid JSON and deserialized into a map of issuer URLs to corresponding JWKS URIs. In this case, the JWKS URI present in the issuer's well-known endpoint will be overridden. For example: `'{"issuer_jwks_map": {"https://accounts.google.com": "https://www.googleapis.com/oauth2/v3/certs", "example.com/adfs": "https://example.com/adfs/discovery/keys"}}'`. When `issuer_jwks_map` is set, the JWKS URI is directly used to get the key set. In all other cases when `JWKSAutoFetchEnabled` is set, the JWKS URI is obtained first from the issuer's well-known endpoint and then this endpoint is used.

### General changes

* In order 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 changefeed metrics `changefeed.parallel_io_queue_nanos`, `changefeed.parallel_io_result_queue_nanos`, `changefeed.sink_batch_hist_nanos`, `changefeed.flush_hist_nanos`, and `changefeed.kafka_throttling_hist_nanos` have histogram buckets from `5ms` to `10m` (previously `500ms` to `5m` ).
* Added support for multiple seed brokers in the new Kafka sink.
* Added a metric `distsender.rangefeed.catchup_ranges_waiting_client_side` that counts how many rangefeeds are waiting on the client-side limiter to start performing catchup scans.
* Added changefeed support for the `mvcc_timestamp` option with the `avro` format. If both options are specified, the Avro schema includes an `mvcc_timestamp` metadata field and emits the row's MVCC timestamp with the row data.

### SQL language changes

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

### Operational changes

* Telemetry delivery is now considered successful even in cases where we experience a network timeout. This will prevent throttling in cases outside an operator's control.
* When a schema change job completes, rolls back, or encounters a failure, the time taken since the job began is now logged in a structured log in the `SQL_SCHEMA` log channel.

### Bug fixes

* `CREATE SCHEMA` now returns the correct error if the schema name is missing.
* Fixed an issue where corrupted table statistics could cause the CockroachDB process to crash.
* The `idle_in_session_timeout` setting now excludes the time spent waiting for schema changer jobs to complete, preventing unintended session termination during schema change operations.
* Fixed a bug that caused the optimizer to use stale table statistics after altering an enum type used in the table.
* CockroachDB now better respects `statement_timeout` limit on queries involving the top K sort and merge join operations.
* Fixed an issue where license enforcement was not consistently disabled for single-node clusters started with `start-single-node`. Now, cluster restarts correctly disable licensing.
* Fixed a bug that caused queries against tables with user-defined types to sometimes fail with errors after restoring those tables.
* Fixed a bug that could cause an internal error if a table with an implicit ( `rowid` ) primary key was locked from within a subquery, for example, `SELECT * FROM (SELECT * FROM foo WHERE x = 2) FOR UPDATE;`. The error could occur either under read-committed isolation, or with `optimizer_use_lock_op_for_serializable` enabled.
* Fixed an issue where adding an existing column with the `IF NOT EXISTS` option could exit too early, skipping necessary handling of the abstract syntax tree (AST). This could lead to failure of the `ALTER` statement.
* `CLOSE CURSOR` statements are now allowed in read-only transactions, similar to PostgreSQL. The bug has been present since at least v23.1.
* Fixed an issue where a schema change could incorrectly cause a changefeed to fail with an assertion error like `received boundary timestamp... of type... before reaching existing boundary of type...`.
* Internal scans are now exempt from the `sql.defaults.disallow_full_table_scans.enabled` setting, allowing index creation even when the cluster setting is enabled.
* A new column of type `JSON` or `JSONB` that has a `UNIQUE` constraint will now be blocked from being added to a table if the cluster has not yet finalized the upgrade to v23.2.

## v23.2.18

Release Date: December 26, 2024

### Downloads

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

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

### Docker image

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

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

To download the Docker image:

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

### SQL language changes

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

## v23.2.17

Release Date: December 12, 2024

### Downloads

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

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

### Docker image

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

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

To download the Docker image:

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

### Security updates

* All cluster settings that accept strings are now fully redacted when transmitted as part of Cockroach Labs' diagnostics telemetry. The payload includes a record of modified cluster settings and their values when they are not strings. If you previously applied the mitigations in Technical Advisory 133479, you can safely set the value of cluster setting `server.redact_sensitive_settings.enabled` to `false` and turn on diagnostic reporting via the `diagnostics.reporting.enabled` cluster setting without leaking sensitive cluster setting values.

### General changes

* `COCKROACH_SKIP_ENABLING_DIAGNOSTIC_REPORTING` is no longer mentioned in the `cockroach demo` command.

### Enterprise edition changes

* Added `system.users` to the list of system tables that changefeeds protect with protected timestamps (PTS). This table is required for CDC queries.

### Operational changes

* Added a new cluster setting `ui.database_locality_metadata.enabled`, which allows operators to disable loading extended database and table region information in the DB Console's Databases and Table Details pages. This information can cause significant CPU load on large clusters with many ranges. Versions of this page from v24.3 onwards do not have this problem. If you require this data, you can use the `SHOW RANGES FROM {DATABASE| TABLE}` query via SQL to compute on-demand.

### Bug fixes

* Previously, CockroachDB could encounter an internal error of the form `interface conversion: coldata.Column is` in an edge case. This is now fixed. The bug was present in versions v22.2.13 and later, v23.1.9 and later, and v23.2 and later.
* Fixed a bug that caused incorrect `NOT NULL` constraint violation errors on `UPSERT` and `INSERT... ON CONFLICT... DO UPDATE` statements when those statements updated an existing row and a subset of columns that did not include a `NOT NULL` column of the table. This bug had been present since at least v20.1.0.
* Fixed an unhandled error that could occur when using `REVOKE... ON SEQUENCE... FROM user` on an object that was not a sequence.
* Addressed a panic that could occur inside `CREATE TABLE AS` that occurred if sequence builtin expressions had invalid function overloads.
* String constants can now be compared against collated strings.
* Previously, when executing queries with index or lookup joins when the ordering needed to be maintained, CockroachDB in some cases could get into a pathological state which would lead to increased query latency, possibly by several orders of magnitude. This bug was introduced in v22.2 and is now fixed.
* Addressed a bug with `DROP CASCADE` that would occasionally panic with an `un-dropped backref` message on partitioned tables.
* Reduced the duration of partitions in the gossip network when a node crashes. This eliminates false positives in the `ranges.unavailable` metric.
* An error message is no longer returned when a non-admin user runs `DROP ROLE IF EXISTS` on a user that does not exist.
* Fixed a bug that could cause incorrect query results when the optimizer planned a lookup join on an index containing a column of type `CHAR(N)`, `VARCHAR(N)`, `BIT(N)`, `VARBIT(N)`, or `DECIMAL(M, N)`, and the query held that column constant to a single value (e.g., with an equality filter).
* Fixed an unhandled error that would occur if `DROP SCHEMA` was executed on the `public` schema of the `system` database, or on an internal schema like `pg_catalog` or `information_schema`.
* Fixed a bug that caused incorrect evaluation of some binary expressions involving `CHAR(N)` values and untyped string literals with trailing whitespace characters. For example, the expression `'f'::CHAR = 'f '` now correctly evaluates to `true`.

### Performance improvements

* CockroachDB now avoids loading unnecessary file blocks shortly after a rebalance in a rare case.
* Reduced the write-amplification impact of rebalances by splitting snapshot sstable files into smaller ones before ingesting them into Pebble.

## v23.2.16

Release Date: November 18, 2024

### Downloads

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

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

### Docker image

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

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

To download the Docker image:

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

### General changes

* Changed the license `cockroach` is distributed under to the new CockroachDB Software License (CSL).
* The cluster setting `diagnostics.reporting.enabled` is now ignored if the cluster has a Enterprise Trial or Enterprise Free license, or if the reporting job is unable to load any license at all.
* Added the sink error metric ( `changefeed.sink_errors` ) and expanded the reporting of the internal retries metric ( `changefeed.internal_retry_message_count` ) to all changefeed sinks that perform internal retries.
* Allowed access to DB console APIs via JWT, which can be supplied as a Bearer token in the Authorization header.

### DB Console changes

* DB Console will reflect any throttling behavior from the cluster due to an expired license or missing telemetry data. Enterprise licenses are not affected.
* Due to the inaccuracy of the **Range Count** column on the **Databases** page, and the cost incurred to fetch the correct range count for every database in a cluster, this data will no longer be visible. This data is still available via a `SHOW RANGES` query.

### Bug fixes

* Fixed an error that could happen if an aggregate function was used as the value in a `SET` command.
* Added automated clean-up/validation for dropped roles inside of default privileges.
* Fixed a bug that could cause `RESTORE` to hang after encountering transient errors from the storage layer.
* Fixed a bug that caused incorrect evaluation of `CASE`, `COALESCE`, and `IF` expressions with branches producing fixed-width string-like types, such as `CHAR`. In addition, the `BPCHAR` type has been fixed so that it no longer incorrectly imposes a length limit of `1`.
* Fixed a bug that could lead to incorrect results in rare cases. The bug requires a `JOIN` between two tables, with an equality between columns with equivalent, but not identical types (e.g., `OID` and `REGCLASS` ). In addition, the `JOIN` must lookup an index that includes a computed column that references one of the equivalent columns. This bug has existed since before v23.1.
* Fixed a bug that could lead to incorrect results in rare cases. The bug requires a lookup join into a table with a computed index column, where the computed column expression is composite sensitive. A composite sensitive expression can compare differently if supplied non-identical, but equivalent input values (e.g. `2.0::DECIMAL` vs `2.00::DECIMAL` ). This bug has existed since before v23.1.
* Fixed a bug where a span stats request on a mixed-version cluster resulted in an NPE.
* The `franz-go` library has been updated to fix a potential deadlock on changefeed restarts.
* Fixed an issue where changefeeds would fail to update protected timestamp records in the face of retryable errors.
* Fixed a bug that could result in changefeeds using CDC queries failing due to a system table being garbage collected.
* Fixed a rare bug in which an update of a primary key column that is also the only column in a separate column family can sometimes fail to update the primary index. This bug has existed since v22.2. Requirements to hit the bug are:
  1. A table with multiple column families.
  2. A column family containing a single primary key column.
  3. That column family is not the first column family.
  4. That column family existed before its column was in the primary key.
  5. That column must be of type `FLOAT4/8`, `DECIMAL`, `JSON`, collated string type, or array.
  6. An update that changes that column from a composite value to a non-composite value.
* The `proretset` column of the `pg_catalog.pg_proc` table is now properly set to `true` for set-returning builtin functions.
* Fixed a bug in the query optimizer that could cause CockroachDB nodes to crash in rare cases. The bug could occur when a query contains a filter in the form `col IN (elem0, elem1,..., elemN)` only when `N` is very large, e.g., 1.6+ million, and when `col` exists in a hash-sharded index or, exists in a table with an indexed, computed column dependent on `col`.
* Users with the `admin` role can now run `ALTER DEFAULT PRIVILEGES FOR target_role...` on any `target_role`. Previously, this could result in a privilege error, which is incorrect as admins are allowed to perform any operation.
* `REASSIGN OWNED BY` will now transfer ownership of the `public` schema. Previously, it would always skip over the `public` schema even if it was owned by the target role.
* Added a timer for inner changefeed sink client flushes. Fixed a bug where timers were not correctly registered with the metric system.
* Fixed an error that could be caused by using an `AS OF SYSTEM TIME` expression that references a user-defined (or unknown) type name. These kinds of expressions are invalid, but previously the error was not handled properly. This will now return the correct error message.
* Fixed a bug where backup schedules could advance a protected timestamp too early, which caused incremental backups to fail.

### Performance improvements

* Performance has been improved during periodic polling of table history when the `schema_locked` table storage parameter is not enabled.
* Reduced the write-amplification impact of rebalances by splitting snapshot SSTable files into smaller ones before ingesting them into Pebble.

## v23.2.15

Release Date: November 15, 2024

### Downloads

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

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

### Docker image

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

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

To download the Docker image:

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

### Performance improvements

* Reduced the write-amplification impact of rebalances by splitting snapshot `sstable` files before ingesting them into Pebble.

## v23.2.14

Release Date: October 31, 2024

### Downloads

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

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

### Docker image

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

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

To download the Docker image:

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

### General changes

* Added internal client name options to distinguish backup data transfer bytes from those of other clients, such as changefeeds, for updated CockroachDB Cloud <InternalLink version="v23.2" path="cockroachcloud/costs">billing metrics</InternalLink>.

## v23.2.13

Release Date: October 17, 2024

### Downloads

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

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

### Docker image

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

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

To download the Docker image:

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

### Enterprise edition changes

* The description for the <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink> `changefeed.sink_io_workers` now lists all <InternalLink version="v23.2" path="changefeed-sinks">changefeed sinks</InternalLink> that support the setting.

* Network metrics have been added for the following <InternalLink version="v23.2" path="changefeed-sinks">changefeed sinks</InternalLink>:

* Added two network metrics, `changefeed.network.bytes_in` and `changefeed.network.bytes_out`. These metrics track the number of bytes sent by individual <InternalLink version="v23.2" path="change-data-capture-overview">changefeeds</InternalLink> to the following sinks:
  * <InternalLink version="v23.2" path="changefeed-sinks#kafka">Kafka sinks</InternalLink>. If child metrics are enabled, the metric will have a `kafka` label.
  * <InternalLink version="v23.2" path="changefeed-sinks#webhook-sink">Webhook sinks</InternalLink>. If child metrics are enabled, the metric will have a `webhook` label.
  * <InternalLink version="v23.2" path="changefeed-sinks">Pub/Sub sinks</InternalLink>. If child metrics are enabled, the metric will have a `pubsub` label.
  * <InternalLink version="v23.2" path="changefeed-for">SQL sink</InternalLink>. If child metrics are enabled, the metric will have a `sql` label.

* The new <InternalLink version="v23.2" path="metrics">metric</InternalLink> `changefeed.total_ranges` allows observation of the number of ranges that are watched by a changefeed aggregator. It uses the same polling interval as `changefeed.lagging_ranges`, which is controlled by the changefeed option `lagging_ranges_polling_interval`.

* The following groups of <InternalLink version="v23.2" path="metrics">metrics</InternalLink> and <InternalLink version="v23.2" path="logging">logs</InternalLink> have been renamed to include the buffer they are associated with. The previous metrics are still maintained for backward compatibility.
  * `changefeed.buffer_entries.*`
  * `changefeed.buffer_entries_mem.*`
  * `changefeed.buffer_pushback_nanos.*`

* Added timers and corresponding \[metrics]\([https://www.cockroachlabs.com/docs/v24.2/metrics.html](https://www.cockroachlabs.com/docs/v24.2/metrics.html) for key parts of the <InternalLink version="v23.2" path="change-data-capture-overview">changefeed</InternalLink> pipeline to help debug issues with feeds. The `changefeed.stage.{stage}.latency` metrics now emit latency histograms for each stage. The metrics respect the changefeed `scope` label to debug a specific feed.

### Operational changes

* The new <InternalLink version="v23.2" path="metrics">metric</InternalLink> `ranges.decommissioning` shows the number of ranges with a replica on a <InternalLink version="v23.2" path="node-shutdown">decommissioning node</InternalLink>.

* The following new <InternalLink version="v23.2" path="metrics">metrics</InternalLink> show the number of RPC TCP connections established to remote nodes:
  * `rpc.connection.connected`: the number of gRPC TCP level connections established to remote nodes.
  * `rpc.client.bytes.egress`: the number of TCP bytes sent over gRPC on connections initiated by the cluster.
  * `rpc.client.bytes.ingress`: the number of TCP bytes received over gRPC on connections initiated by the cluster.

* Added a new configuration parameter, `server.cidr_mapping_url`, which maps IPv4 CIDR blocks to arbitrary tag names.

* The <InternalLink version="v23.2" path="metrics">metrics</InternalLink> `sql.bytesin` and `sql.bytesout` are now aggregate metrics if child metrics are enabled.

* The following new <InternalLink version="v23.2" path="metrics">metrics</InternalLink> track the number of bytes sent by an individual <InternalLink version="v23.2" path="change-data-capture-overview">changefeed</InternalLink> to each sink:
  * `changefeed.network.bytes_in`
  * `changefeed.network.bytes_out`

* You can now set the log format for the `STDERR` changefeed sink using the `format` field in the `stderr` sink section of the <InternalLink version="v23.2" path="logging">logging</InternalLink> configuration.

### DB Console changes

* The <InternalLink version="v23.2" path="ui-overview">DB Console</InternalLink> now shows a notification if the cluster has no Enterprise license set. Refer to [upcoming license changes](https://www.cockroachlabs.com/enterprise-license-update) for more information.

### Bug fixes

* Fixed a bug where the command `SHOW CLUSTER SETTING FOR VIRTUAL CLUSTER` would erroneously return `NULL` for some settings.

* Fixed a bug where a node could fail to start with the error `could not insert session...: unexpected value` if an ambiguous result error occurred while inserting data into the `sqlliveness` table.

* Fixed a bug that could prevent <InternalLink version="v23.2" path="upgrade-cockroach-version">upgrade finalization</InternalLink> due to the upgrade pre-condition for repairing descriptor corruption.

* Fixed a rare bug where a lease transfer could lead to a `side-transport update saw closed timestamp regression` panic. The bug could occur when a node was overloaded and failing to heartbeat its node liveness record.

* Fixed a bug that could result in the erroneous log message `expiration of liveness record... is not greater than expiration of the previous lease... after liveness heartbeat`.

* Fixed a bug where queries that are not initiated within a SQL session could fail to respect a statement timeout, including <InternalLink version="v23.2" path="show-jobs">background jobs</InternalLink>, queries issued by the <InternalLink version="v23.2" path="ui-overview">DB Console</InternalLink> that perform introspection, and the <InternalLink version="v23.2" path="cockroachcloud/sql-shell">CockroachDB Cloud SQL Shell</InternalLink>.

* Fixed a bug where a connection could be incorrectly dropped if the client was attempting to change a schema at the same time that the same schema's objects were being dropped.

* Fixed a bug that could cause the following error to be logged when executing a query under <InternalLink version="v23.2" path="read-committed">READ COMMITTED</InternalLink> isolation if it involved a table with `NOT NULL` virtual columns: `internal error: Non-nullable column...`.

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

* Fixed a bug introduced in v23.2.6, where <InternalLink version="v23.2" path="create-statistics">statistics</InternalLink> forecasting could predict a result of zero rows for a downward-trending statistic when `sql.stats.forecasts.max_decrease` is `false`. The setting is now enabled (set to `1/3` by default).

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

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

* Fixed a bug that could prevent a <InternalLink version="v23.2" path="change-data-capture-overview">changefeed</InternalLink> from resuming from a prolonged paused state.

## v23.2.12

Release Date: September 25, 2024

### Downloads

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

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

### Docker image

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

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

To download the Docker image:

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

### Enterprise edition changes

Added a `changefeed.protect_timestamp.lag` metric, which controls how much the changefeed <InternalLink version="v23.2" path="protect-changefeed-data">protected timestamp (PTS)</InternalLink> should lag behind the <InternalLink version="v23.2" path="how-does-an-enterprise-changefeed-work">high-water mark</InternalLink>. A changefeed now only updates its PTS if `changefeed.protect_timestamp.lag` has passed between the last PTS and the changefeed high-water mark. - <InternalLink version="v23.2" path="show-jobs#show-changefeed-jobs">`SHOW CHANGEFEED JOB`</InternalLink>, <InternalLink version="v23.2" path="show-jobs#show-changefeed-jobs">`SHOW CHANGEFEED JOBS`</InternalLink>, and <InternalLink version="v23.2" path="show-jobs">`SHOW JOBS`</InternalLink> no longer expose user sensitive information like `client_key`.

### SQL language changes

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

### Operational changes

* There are now structured logging events that report connection breakage during <InternalLink version="v23.2" path="node-shutdown">node shutdown</InternalLink>. Previously, these logs existed but were unstructured. These logs appear in the `OPS` <InternalLink version="v23.2" path="logging-overview#logging-channels">logging channel</InternalLink>. There are two new events:
  * The `node_shutdown_connection_timeout` event is logged after the timeout defined by the <InternalLink version="v23.2" path="cluster-settings">cluster setting `server.shutdown.connections.timeout`</InternalLink> transpires, if there are still open SQL connections.
  * The `node_shutdown_transaction_timeout` event is logged after the timeout defined by the <InternalLink version="v23.2" path="cluster-settings">cluster setting `server.shutdown.transactions.timeout` transpires</InternalLink>, if there are still open <InternalLink version="v23.2" path="transactions">transactions</InternalLink> on those SQL connections.
* Added the `ranges.decommissioning` metric, representing the number of <InternalLink version="v23.2" path="architecture/overview">ranges</InternalLink> which have a <InternalLink version="v23.2" path="architecture/overview">replica</InternalLink> on a <InternalLink version="v23.2" path="cockroach-node#decommission-nodes">decommissioning node</InternalLink>.
* Added three new network tracking metrics:
  * `rpc.connection.connected` is the number of rRPC TCP-level connections established to remote nodes.
  * `rpc.client.bytes.egress` is the number of TCP bytes sent via gRPC on connections we initiated.
  * `rpc.client.bytes.ingress` is the number of TCP bytes received via gRPC on connections we initiated.
* Added a new configuration parameter `server.cidr_mapping_url`, which maps IPv4 CIDR blocks to arbitrary tag names.
* Modified metrics `sql.bytesin` and `sql.bytesout` to be aggregation metrics If the <InternalLink version="v23.2" path="cluster-settings">`server.child_metrics.enabled`</InternalLink> cluster setting is enabled.
* Added two network metrics, `changefeed.network.bytes_in` and `changefeed.network.bytes_out`. These metrics track the number of bytes sent by individual <InternalLink version="v23.2" path="create-and-configure-changefeeds">changefeeds</InternalLink> to the following sinks:
  * <InternalLink version="v23.2" path="changefeed-sinks#kafka">Kafka sinks</InternalLink>. If the <InternalLink version="v23.2" path="cluster-settings">`server.child_metrics.enabled`</InternalLink> cluster setting is enabled, the metric will have a `kafka` label.
  * <InternalLink version="v23.2" path="changefeed-sinks#webhook-sink">Webhook sinks</InternalLink>. If the <InternalLink version="v23.2" path="cluster-settings">`server.child_metrics.enabled`</InternalLink> cluster setting is enabled, the metric will have a `webhook` label.
  * <InternalLink version="v23.2" path="changefeed-sinks">Pub/Sub sinks</InternalLink>. If the <InternalLink version="v23.2" path="cluster-settings">`server.child_metrics.enabled`</InternalLink> cluster setting is enabled, the metric will have a `pubsub` label.
  * <InternalLink version="v23.2" path="changefeed-for">SQL sink</InternalLink>. If the <InternalLink version="v23.2" path="cluster-settings">`server.child_metrics.enabled`</InternalLink> cluster setting is enabled, the metric will have a `sql` label.

### DB Console changes

* The <InternalLink version="v23.2" path="ui-overview-dashboard">DB Console</InternalLink> time-series graphs now have hover behavior that focuses on individual lines and shows values under the mouse pointer.
* Users with the <InternalLink version="v23.2" path="security-reference/authorization">`VIEWACTIVITY` privilege</InternalLink> can download <InternalLink version="v23.2" path="explain-analyze">statement bundles</InternalLink> from <InternalLink version="v23.2" path="ui-overview">DB Console</InternalLink>.
* The <InternalLink version="v23.2" path="ui-overview">DB Console</InternalLink> now displays an alert message when the <InternalLink version="v23.2" path="licensing-faqs#monitor-for-license-expiry">license is expired</InternalLink> or if there are fewer than 15 days left before the license expires.
* The <InternalLink version="v23.2" path="ui-overview">DB Console</InternalLink> will now show a notification alerting customers without an Enterprise license to [upcoming license changes](https://www.cockroachlabs.com/enterprise-license-update) with a link to more information.

### Bug fixes

* Fixed a bug where declarative and legacy <InternalLink version="v23.2" path="online-schema-changes">schema changes</InternalLink> were incorrectly allowed to be executed concurrently, which could lead to failing or hung schema change jobs.
* Fixed a bug that caused errors like `ERROR: column 'crdb_internal_idx_expr' does not exist` when accessing a table with an <InternalLink version="v23.2" path="expression-indexes">expression index</InternalLink> where the expression evaluates to an <InternalLink version="v23.2" path="enum">`ENUM`</InternalLink> type, e.g., `CREATE INDEX ON t ((col::an_enum))`.
* <InternalLink version="v23.2" path="user-defined-functions">Function</InternalLink> input parameters can no longer have the `VOID` type.
* Internally issued queries that are not initiated within a <InternalLink version="v23.2" path="show-sessions">SQL session</InternalLink> no longer respect a statement timeout. This includes: <InternalLink version="v23.2" path="show-jobs">background jobs</InternalLink>, queries issued by the <InternalLink version="v23.2" path="ui-overview">DB Console</InternalLink> that perform introspection, and the Cloud <InternalLink version="v23.2" path="cockroachcloud/sql-shell">SQL shell</InternalLink>.
* Fixed a bug where the `schema_locked` <InternalLink version="v23.2" path="with-storage-parameter">storage parameter</InternalLink> did not prevent a table from being referenced by a <InternalLink version="v23.2" path="foreign-key">foreign key</InternalLink>.
* Users with the <InternalLink version="v23.2" path="security-reference/authorization">`VIEWACTIVITY` SQL privilege</InternalLink> can now request, view, and cancel <InternalLink version="v23.2" path="explain-analyze">statement bundles</InternalLink> in the <InternalLink version="v23.2" path="ui-overview">DB Console</InternalLink>.
* Fixed a bug where a <InternalLink version="v23.2" path="architecture/replication-layer#epoch-based-leases-table-data">lease transfer</InternalLink> could lead to a panic with the message `side-transport update saw closed timestamp regression`. The bug could occur when a node was overloaded and failing to <InternalLink version="v23.2" path="cluster-setup-troubleshooting#node-liveness-issues">heartbeat its node liveness record</InternalLink>.
* The <InternalLink version="v23.2" path="logging-overview">log message</InternalLink> `expiration of liveness record... is not greater than expiration of the previous lease... after liveness heartbeat` is no longer generated.
* Fixed a bug where the `require_explicit_primary_keys` <InternalLink version="v23.2" path="session-variables">session variable</InternalLink> would prevent all <InternalLink version="v23.2" path="create-table">`CREATE TABLE`</InternalLink> statements from working.
* Fixed a slow-building memory leak when using <InternalLink version="v23.2" path="gssapi_authentication">Kerberos authentication</InternalLink>.
* Fixed a potential memory leak in <InternalLink version="v23.2" path="changefeed-examples#create-a-changefeed-connected-to-a-cloud-storage-sink">changefeeds using a cloud storage sink</InternalLink>. The memory leak could occur if both <InternalLink version="v23.2" path="cluster-settings">`changefeed.fast_gzip.enabled`</InternalLink> and `changefeed.cloudstorage.async_flush.enabled` were `true`, and the changefeed received an error while attempting to write to the cloud storage sink.

## v23.2.11

Release Date: September 16, 2024

### Downloads

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

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

### Docker image

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

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

To download the Docker image:

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

### Bug fixes

* Internally issued queries that are not initiated within a <InternalLink version="v23.2" path="show-sessions">SQL session</InternalLink> no longer respect a <InternalLink version="v23.2" path="session-variables">statement timeout</InternalLink>. This includes: background <InternalLink version="v23.2" path="show-jobs">jobs</InternalLink>, queries issued by the <InternalLink version="v23.2" path="ui-overview">DB Console</InternalLink> that perform introspection, and the <InternalLink version="v23.2" path="cockroachcloud/sql-shell">Cloud SQL shell</InternalLink>.
* Fixed a rare bug where a <InternalLink version="v23.2" path="architecture/replication-layer#leases">lease transfer</InternalLink> could lead to a `side-transport update saw closed timestamp regression` panic. The bug could occur when a node was <InternalLink version="v23.2" path="ui-overload-dashboard">overloaded</InternalLink> and failing to heartbeat its <InternalLink version="v23.2" path="cluster-setup-troubleshooting#node-liveness-issues">node liveness</InternalLink> record.
* Resolved a concerning <InternalLink version="v23.2" path="logging-overview">log</InternalLink> message: `expiration of liveness record... is not greater than expiration of the previous lease... after liveness heartbeat`. This message is no longer possible.

## v23.2.10

Release Date: August 29, 2024

### Downloads

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

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

### Docker image

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

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

To download the Docker image:

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

### Security updates

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

### Enterprise edition changes

* Added a new <InternalLink version="v23.2" path="changefeed-sinks#kafka">Kafka sink</InternalLink> utilizing the `franz-go` library and our own `batching_sink` behind a <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink> ( `changefeed.new_kafka_sink_enabled`, disabled by default).
* The v2 Kafka and Google Cloud Pub/Sub <InternalLink version="v23.2" path="changefeed-sinks">changefeed sinks</InternalLink> now display notices indicating the topics they will emit to.

### SQL language changes

* Added the <InternalLink version="v23.2" path="cluster-settings">`sql.auth.grant_option_for_owner.enabled` cluster setting</InternalLink>. The default value is `true`, which results in behavior that matches the existing behavior of CockroachDB. When set to `false`, then the `GRANT OPTION` is not implcitly given to the owner of an object. The object owner still implicitly has all privileges on the object, just not the ability to grant them to other users.
* Fixed a bug where the `DISCARD` statement was disallowed when the <InternalLink version="v23.2" path="session-variables">`default_transaction_read_only`</InternalLink> session setting was set to `on`.

### DB Console changes

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

### Bug fixes

* Fixed a bug causing gateway nodes to crash while executing <InternalLink version="v23.2" path="insert">`INSERT`</InternalLink> statements in <InternalLink version="v23.2" path="table-localities#regional-by-row-tables">`REGIONAL BY ROW`</InternalLink> tables. This bug had been present since v23.2.
* Fixed a bug where <InternalLink version="v23.2" path="alter-type#drop-a-value-in-a-user-defined-type">dropping `ENUM` values</InternalLink> that were referenced by <InternalLink version="v23.2" path="expression-indexes">index expressions</InternalLink> could fail with an error.
* Fixed a bug that caused a memory leak when executing SQL statements with comments, e.g., <InternalLink version="v23.2" path="select-clause">`SELECT /* comment */ 1;`</InternalLink>. Memory owned by a SQL session would continue to grow as these types of statements were executed. The memory would only be released when closing the SQL session. This bug had been present since v23.1.
* Fixed a memory leak that could occur when specifying a non-existent <InternalLink version="v23.2" path="cluster-virtualization-overview">virtual cluster</InternalLink> name in the connection string.
* Fixed a bug where <InternalLink version="v23.2" path="create-index">`CREATE INDEX IF NOT EXISTS`</InternalLink> would not correctly short-circuit if the given index already existed.
* Fixed a bug in overly eager syntax validation, which did not allow the `DESCENDING` clause for non-terminal columns of an <InternalLink version="v23.2" path="inverted-indexes">inverted index</InternalLink>. Only the last column of an inverted index should be prevented from being `DESCENDING`, and this is now properly checked.
* Fixed a bug where an <InternalLink version="v23.2" path="indexes">index</InternalLink> could store a column in the primary index if that column had a mixed-case name.
* Fixed small memory leaks that would occur during <InternalLink version="v23.2" path="create-changefeed">changefeed creation</InternalLink>.
* Setting or dropping a default value on a <InternalLink version="v23.2" path="computed-columns">computed column</InternalLink> is now blocked -- even for null defaults. Previously, setting or dropping a default value on a computed column was a no-op; now there will be an error message.
* Fixed a bug that could cause spurious user permission errors when multiple databases shared a common schema with a routine referencing a table. The bug had existed since <InternalLink version="v23.2" path="user-defined-functions">user-defined functions</InternalLink> were introduced in v22.2.
* Fixed a bug where a hash-sharded constraint could not be created if it referred to columns that had a backslash in the name.
* Fixed a bug where `TYPEDESC SCHEMA CHANGE` jobs could end up retrying forever if the descriptor targeted by them was already dropped.
* Fixed a bug in which the output of <InternalLink version="v23.2" path="explain">`EXPLAIN (OPT, REDACT)`</InternalLink> for various `CREATE` statements was not redacted. This bug had existed since <InternalLink version="v23.2" path="explain#parameters">`EXPLAIN (REDACT)`</InternalLink> was introduced in v23.1 and affects the following statements:
  * `EXPLAIN (OPT, REDACT) CREATE TABLE`
  * `EXPLAIN (OPT, REDACT) CREATE VIEW`
  * `EXPLAIN (OPT, REDACT) CREATE FUNCTION`

### Contributors

This release includes 80 merged PRs by 28 authors.

## v23.2.9

Release Date: August 1, 2024

### Downloads

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

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

### Docker image

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

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

To download the Docker image:

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

### SQL language changes

* <InternalLink version="v23.2" path="explain-analyze">`EXPLAIN ANALYZE`</InternalLink> statements are now supported when executed via Cloud Console <InternalLink version="v23.2" path="cockroachcloud/sql-shell">SQL shell</InternalLink>.
* Added the <InternalLink version="v23.2" path="cluster-settings">`sql.auth.grant_option_inheritance.enabled` cluster setting</InternalLink>. The default value is `true`, which maintains consistency with CockroachDB's previous behavior: users granted a privilege with <InternalLink version="v23.2" path="grant">`WITH GRANT OPTION`</InternalLink> can in turn grant that privilege to others. When `sql.auth.grant_option_inheritance.enabled` is set to `false`, the `GRANT OPTION` is not inherited through role membership, thereby preventing descendant roles from granting the privilege to others. However, the privilege itself continues to be inherited through role membership.

### Operational changes

* `crdb_internal.cluster_execution_insights.txt` and `crdb_internal.cluster_txn_execution_insights.txt` have been removed from the <InternalLink version="v23.2" path="cockroach-debug-zip">debug zip</InternalLink>. These files contained cluster-wide insights for statements and transactions. Users can still rely on the <InternalLink version="v23.2" path="cockroach-debug-zip#files">per-node execution</InternalLink> insights in `crdb_internal.node_execution_insights.txt` and `crdb_internal.node_txn_execution_insights.txt`.
* Some debugging-only information about physical plans is no longer collected in the `system.job_info` table for <InternalLink version="v23.2" path="change-data-capture-overview">changefeeds</InternalLink>, because it has the potential to grow very large.
* For the <InternalLink version="v23.2" path="logging#telemetry">TELEMETRY channel</InternalLink>, TCL <InternalLink version="v23.2" path="eventlog#sampled_query">`sampled_query`</InternalLink> events will now be sampled at the rate specified by the setting <InternalLink version="v23.2" path="cluster-settings">`sql.telemetry.query_sampling.max_event_frequency`</InternalLink>, which is already used to limit the rate of sampling DML statements.

### Bug fixes

* Fixed a bug introduced in v23.2.0 in which CockroachDB would hit an internal error when evaluating <InternalLink version="v23.2" path="insert">`INSERT`s</InternalLink> into <InternalLink version="v23.2" path="alter-table#set-the-table-locality-to-regional-by-row">`REGIONAL BY ROW`</InternalLink> tables where the source was a <InternalLink version="v23.2" path="selection-queries#values-clause">`VALUES`</InternalLink> clause with a single row and at least one boolean expression.
* Fixed a bug where a <InternalLink version="v23.2" path="drop-role">`DROP ROLE`</InternalLink> or <InternalLink version="v23.2" path="drop-user">`DROP USER`</InternalLink> command could leave references behind inside types, which could prevent subsequent <InternalLink version="v23.2" path="show-grants">`SHOW GRANTS`</InternalLink> commands from working.
* Fixed a bug that could lead to descriptors having privileges to roles that no longer exist. Added an automated clean up for <InternalLink version="v23.2" path="drop-role">dropped roles</InternalLink> inside descriptors.
* Fixed a bug where a change to a <InternalLink version="v23.2" path="create-type">user-defined type (UDT)</InternalLink> could cause queries against tables using that type to fail with an error message like: `histogram.go:694: span must be fully contained in the bucket`. The change to the user-defined type could occur either directly from an <InternalLink version="v23.2" path="alter-type">`ALTER TYPE`</InternalLink> statement or indirectly from an <InternalLink version="v23.2" path="alter-database#add-region">`ALTER DATABASE... ADD REGION`</InternalLink> or <InternalLink version="v23.2" path="alter-database#drop-region">`ALTER DATABASE... DROP REGION`</InternalLink> statement, which implicitly modifies the `crdb_internal_region` UDT. This bug had existed since UDTs were introduced in v20.2.
* Fixed a bug in which constant `LIKE` patterns containing certain sequences of backslashes did not become constrained scans. This bug has been present since v21.1.13 when support for building constrained scans from `LIKE` patterns containing backslashes was added.
* Fixed a bug introduced in alpha versions of v23.1 where calling a routine could result in an unexpected `function... does not exist` error. The bug is triggered when the routine is called twice using the exact same SQL query, and either: (a) the routine has polymorphic arguments, or: (b) between the two calls, the routine is replaced by a routine with the same name and different parameters.
* Fixed the statistics estimation code in the <InternalLink version="v23.2" path="cost-based-optimizer">optimizer</InternalLink> so it does not use the empty histograms produced if <InternalLink version="v23.2" path="cost-based-optimizer#control-histogram-collection">histogram collection</InternalLink> has been disabled during stats collection due to excessive memory utilization. Now the optimizer will rely on distinct counts instead of the empty histograms and should produce better plans as a result. This bug has existed since v22.1.
* Fixed a bug in <InternalLink version="v23.2" path="cockroach-debug-tsdump">`cockroach debug tsdump`</InternalLink> where the command fails when a custom SQL port is used and the <InternalLink version="v23.2" path="cockroach-debug-tsdump#flags">`--format=raw`</InternalLink> flag is provided.
* Fixed a bug where a <InternalLink version="v23.2" path="user-defined-functions">user-defined function (UDF)</InternalLink> that shared a name with a <InternalLink version="v23.2" path="functions-and-operators#built-in-functions">built-in function</InternalLink> would not be resolved, even if the UDF had higher precedence according to the <InternalLink version="v23.2" path="sql-name-resolution#search-path">`search_path`</InternalLink> variable.
* Fixed a bug that caused <InternalLink version="v23.2" path="show-jobs">background jobs</InternalLink> to incorrectly respect a statement timeout.
* Fixed a bug where <InternalLink version="v23.2" path="alter-database#drop-region">`ALTER DATABASE... DROP REGION`</InternalLink> could fail if any tables under the given database have <InternalLink version="v23.2" path="expression-indexes">indexes on expressions</InternalLink>.
* Fixed a bug when <InternalLink version="v23.2" path="restore">restoring</InternalLink> a database with a <InternalLink version="v23.2" path="create-type#create-a-composite-data-type">composite type</InternalLink>.
* Fixed a bug when inputting `public` role as user name for <InternalLink version="v23.2" path="functions-and-operators#compatibility-functions">built-in compatibility functions</InternalLink>, such as `has_database_privilege` and `has_schema_privilege`.
* Fixed a bug where the <InternalLink version="v23.2" path="ui-databases-page">Database page</InternalLink> could crash if range information is not available.
* Fixed a bug where CockroachDB could incorrectly evaluate an <InternalLink version="v23.2" path="null-handling#nulls-and-simple-comparisons">`IS NOT NULL`</InternalLink> filter if it was applied to non- `NULL` tuples that had `NULL` elements, such as `(1, NULL)` or `(NULL, NULL)`. This bug has existed since v20.2.
* In the <InternalLink version="v23.2" path="ui-overview-dashboard#events-panel">DB Console event log</InternalLink>, <InternalLink version="v23.2" path="alter-role">`ALTER ROLE`</InternalLink> events now display correctly even when no <InternalLink version="v23.2" path="alter-role#role-options">role options</InternalLink> are included in the `ALTER ROLE` statement.
* Fixed a bug where <InternalLink version="v23.2" path="create-table">`CREATE TABLE`</InternalLink> with <InternalLink version="v23.2" path="expression-indexes">index expressions</InternalLink> could hit undefined column errors on <InternalLink version="v23.2" path="transactions#transaction-retries">transaction retries</InternalLink>.

### Performance improvements

* <InternalLink version="v23.2" path="online-schema-changes">Schema changes</InternalLink> that cause a data backfill, such as adding a non-nullable column or changing the primary key, will now split and scatter the temporary indexes used to perform the change. This reduces the chance of causing a write hotspot that can slow down foreground traffic.

### Contributors

This release includes 100 merged PRs by 33 authors.

## v23.2.8

Release Date: July 15, 2024

### Downloads

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

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

### Docker image

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

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

To download the Docker image:

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

### Performance improvements

* Updated the <InternalLink version="v23.2" path="architecture/replication-layer">replica allocator</InternalLink> with a small performance win for very large clusters.
* Updated the <InternalLink version="v23.2" path="architecture/distribution-layer">gossip layer</InternalLink> to avoid unnecessary mutex contention.,

### Bug fixes

* Fixed a bug where the `disallow_full_table_scans` <InternalLink version="v23.2" path="session-variables">session variable</InternalLink> was not working for tables with <InternalLink version="v23.2" path="hash-sharded-indexes">hash-sharded indexes</InternalLink>.

### Contributors

This release includes 5 merged PRs by 4 authors.

## v23.2.7

Release Date: July 2, 2024

### Downloads

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

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

### Docker image

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

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

To download the Docker image:

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

### Enterprise edition changes

* <InternalLink version="v23.2" path="change-data-capture-overview">Changefeeds</InternalLink> can use the bulk oracle for planning, which distributes work evenly across all <InternalLink version="v23.2" path="architecture/reads-and-writes-overview#replica">replicas</InternalLink> in the locality filter, including followers if enabled. Set the `changefeed.random_replica_selection.enabled` <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink> to `true` to enable this planning behavior. To use the previous bin-packing oracle, set the cluster setting `changefeed.random_replica_selection.enabled` to `false`.
* <InternalLink version="v23.2" path="alter-changefeed">`ALTER CHANGEFEED`</InternalLink> no longer removes the <InternalLink version="v23.2" path="cdc-queries">CDC query</InternalLink> when modifying changefeed properties.

### SQL language changes

* Precision is no longer limited when encoding `geo` data types to JSON.
* When the new `optimizer_push_offset_into_index_join` <InternalLink version="v23.2" path="set-vars">session setting</InternalLink> is enabled, the <InternalLink version="v23.2" path="cost-based-optimizer">optimizer</InternalLink> attempts to produce more efficient query plans by attempting to push offset expressions into index join expressions to produce more efficient query plans.

### General changes

* CockroachDB v23.2.7 and subsequent v23.2 releases are eligible for <InternalLink version="v23.2" path="releases/release-support-policy#support-types">long term support (LTS)</InternalLink>.

### Operational changes

* Improved metrics related to <InternalLink version="v23.2" path="ui-storage-dashboard#capacity-metrics">disk usage</InternalLink> reporting for volumes that dynamically change their size over time.

### Security changes

* Improved the automated cleanup when dropping roles inside descriptors.

### Bug fixes

* Fixed a bug where a range with a replication factor of `1` to be scaled up to a replication factor of `2`.
* Fixed a bug that could cause leases to thrash between nodes when perturbed with a replication factor of `1`.
* Fixed a bug where, when the `ttl_row_stats_poll_interval` storage parameter is non-zero, the job to update row statistics for a table with <InternalLink version="v23.2" path="row-level-ttl">row-level TTL</InternalLink> enabled could be blocked from completing by the queries issued to update the row statistics. Now, if the job completes, these queries are cancelled, and the `jobs.row_level_ttl.total_rows` and `jobs.row_level_ttl.total_expired_rows` metrics will report 0 if the job finishes before the queries to update the row statistics complete.
* Fixed a bug where the `results_buffer_size` <InternalLink version="v23.2" path="set-vars">session setting</InternalLink> could not be configured using the `options` query parameter in the connection string, but only as a top-level query parameter. This variable cannot be changed by using the `SET` command after the session begins.
* Fixed a bug where dropping a role or user could leave references behind inside types. This in turn could prevent the <InternalLink version="v23.2" path="show-grants">`SHOW GRANTS`</InternalLink> command from working correctly.
* Fixed a bug where the <InternalLink version="v23.2" path="alter-table#alter-primary-key">`ALTER TABLE... ALTER PRIMARY KEY`</InternalLink> command could hang for a table if its indexes are referred to by views or functions using the `force syntax` syntax.
* Fixed a bug where the <InternalLink version="v23.2" path="show-types">`SHOW TYPES`</InternalLink> command omitted user-defined composite types. This bug was introduced in v23.1.
* Fixed a bug where if a column name that contains UTF-8 characters is referenced in the `STORING()` clause of the <InternalLink version="v23.2" path="create-index">`CREATE INDEX`</InternalLink> command, the <InternalLink version="v23.2" path="online-schema-changes">declarative schema changer</InternalLink> cannot detect whether the column is already handled by an existing index.
* Fixed a bug where the <InternalLink version="v23.2" path="online-schema-changes">declarative schema changer</InternalLink> erroneously includes virtual columns that are referenced in the `STORING()` clause of the <InternalLink version="v23.2" path="create-index">`CREATE INDEX`</InternalLink> command.
* Fixed a bug introduced in v20.2, where a change to a user-defined type could cause queries against tables using that type to fail with the error like `histogram.go: span must be fully contained in the bucket`. This bug could occur if the change was from an <InternalLink version="v23.2" path="alter-table">`ALTER TABLE`</InternalLink> command or from an <InternalLink version="v23.2" path="alter-database">`ALTER DATABASE... ADD REGION`</InternalLink> or <InternalLink version="v23.2" path="alter-database">`ALTER DATABASE... DROP REGION`</InternalLink> command, which implicitly change the non-public `crdb_internal_region` type.
* Fixed a bug where telemetry logs could emit the same statement fingerprint ID for different SQL statements.
* Fixed a bug where adding a column with a default value of an empty array could fail.
* Fixed a bug where the <InternalLink version="v23.2" path="online-schema-changes">declarative schema changer</InternalLink> could erroneously succeed despite a violation of an `ALTER TABLE... ADD CONSTRAINT UNIQUE` constraint. Now such a violation results in an error message with the error code `42601`.
* Fixed a <InternalLink version="v23.2" path="create-and-configure-changefeeds">changefeed</InternalLink> panic in v24.1, v23.2, and v23.1 when the <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink> `changefeed.aggregator.flush_jitter` <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink> is configured and a changefeed's <InternalLink version="v23.2" path="create-changefeed">`min_checkpoint_frequency`</InternalLink> option is set to zero.
* Fixed a bug where the public schema was erroneously created with its owner set to the `admin` role instead of the database owner. Ownership of the public schema can be altered after the schema is created.
* Fixed a bug introduced in v23.2.0 where inserting rows into a <InternalLink version="v23.2" path="table-localities#regional-by-row-tables">`REGIONAL BY ROW` table</InternalLink> could cause an internal error if the source was a `VALUES` clause with a single row and at least one boolean expression.

### Performance improvements

* The optimizer now generates more efficient query plans for some queries with <InternalLink version="v23.2" path="limit-offset#offset">`OFFSET`</InternalLink> clauses.

### Contributors

This release includes 77 merged PRs by 30 authors.

## v23.2.6

Release Date: June 11, 2024

### Downloads

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

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

### Docker image

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

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

To download the Docker image:

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

### Enterprise edition changes

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

### SQL language changes

* Updated the <InternalLink version="v23.2" path="show-grants">`SHOW GRANTS`</InternalLink> responses to display the `object_type` and `object_name`, which has replaced the `relation_name` column.
* Added <InternalLink version="v23.2" path="create-external-connection">external connection</InternalLink> granted privileges to the <InternalLink version="v23.2" path="show-grants">`SHOW GRANTS`</InternalLink> command.
* Introduced three new <InternalLink version="v23.2" path="cluster-settings">cluster settings</InternalLink> for controlling table statistics forecasting:
  * <InternalLink version="v23.2" path="cluster-settings">`sql.stats.forecasts.min_observations`</InternalLink> is the minimum number of observed statistics required to produce a forecast.
  * <InternalLink version="v23.2" path="cluster-settings">`sql.stats.forecasts.min_goodness_of_fit`</InternalLink> is the minimum R² (goodness of fit) measurement required from all predictive models to use a forecast.
  * <InternalLink version="v23.2" path="cluster-settings">`sql.stats.forecasts.max_decrease`</InternalLink> is the most a prediction can decrease, expressed as the minimum ratio of the prediction to the lowest prior observation.
* Added a new <InternalLink version="v23.2" path="session-variables">session setting</InternalLink> `optimizer_use_improved_multi_column_selectivity_estimate`, which if enabled, causes the <InternalLink version="v23.2" path="cost-based-optimizer">optimizer</InternalLink> to use an improved selectivity estimate for multi-column predicates. This setting will default to `true` on v24.2 and later, and `false` on earlier versions.
* The <InternalLink version="v23.2" path="cost-based-optimizer">optimizer</InternalLink> can now plan constrained scans over partial indexes in more cases, particularly on <InternalLink version="v23.2" path="partial-indexes">partial indexes</InternalLink> with predicates referencing <InternalLink version="v23.2" path="computed-columns">virtual computed columns</InternalLink>.
* The row-level TTL setting <InternalLink version="v23.2" path="row-level-ttl">`ttl_delete_rate_limit`</InternalLink> is now set to `100` by default, which sets the rate limit for deleting expired rows to `100`.

### Operational changes

* Two new metrics track the status of the SQL Activity Update job, which pre-aggregates top K information within the SQL statistics subsytem and writes the results to `system.statement_activity` and `system.transaction_activity`:
  * `sql.stats.activity.updates.successful`: Number of successful updates made by the SQL activity updater job.
  * `sql.stats.activity.update.latency`: The latency of updates made by the SQL activity updater job. Includes failed update attempts.
* Added a new counter <InternalLink version="v23.2" path="metrics">metric</InternalLink>, `sql.stats.flush.done_signals.ignored`, that tracks the number of times the SQL activity update job has ignored the signal that indicates that a flush has completed. This metric may indicate that the SQL activity update job is taking longer than expected to complete.
* Added a new counter <InternalLink version="v23.2" path="metrics">metric</InternalLink>, `sql.stats.activity.updates.failed`, to measure the number of update attempts made by the SQL activity update job that failed with errors. The SQL activity update job is used to pre-aggregate top K information within the SQL stats subsystem and write the results to `system.statement_activity` and `system.transaction_activity`.
* Added a new counter <InternalLink version="v23.2" path="metrics">metric</InternalLink>, `sql.stats.flush.fingerprint.count`, that tracks the number of unique statement and transaction fingerprints included in the SQL stats flush.
* Added the `sql.pgwire.pipeline.count` <InternalLink version="v23.2" path="metrics">metric</InternalLink>, which measures how many wire protocol commands have been received by the server, but have not yet started processing. This metric will only grow if clients are using the [pipeline mode](https://www.postgresql.org/docs/current/libpq-pipeline-mode) of the PostgreSQL wire protocol.
* The `client_authentication_ok` and `client_session_end` events are now logged to the <InternalLink version="v23.2" path="logging-use-cases#sessions">`SESSIONS` log channel</InternalLink> unconditionally. Previously, these would only be logged if the `server.auth_log.sql_sessions.enabled` <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink> was set to `true`. All other `SESSIONS` log messages are still only logged if `server.auth_log.sql_sessions.enabled` or `server.auth_log.sql_connections.enabled` are set to `true`. To not show `client_authentication_ok` and `client_session_end` events, disable the `SESSIONS` log channel entirely.

### DB Console changes

* The <InternalLink version="v23.2" path="ui-databases-page">**Database**</InternalLink> details and **Table** details pages now display the correct stats in the **Table Stats Last Updated**.
* Viewing the <InternalLink version="v23.2" path="ui-statements-page#active-executions-view">**SQL Activity**</InternalLink> sorted by `% of Runtime` now correctly sorts entries by the runtime amount.

### Bug fixes

* Fixed a bug where <InternalLink version="v23.2" path="authentication#client-authentication">client certificate authentication</InternalLink> combined with <InternalLink version="v23.2" path="sso-sql#identity-map-configuration">identity maps</InternalLink> ( `server.identity_map.configuration` ) did not work. For the feature to work correctly, the client must specify a valid database user in the <InternalLink version="v23.2" path="connection-parameters">connection string</InternalLink>.
* Fixed a bug where the <InternalLink version="v23.2" path="architecture/sql-layer#query-execution">row-based execution engine</InternalLink> could drop a <InternalLink version="v23.2" path="limit-offset">`LIMIT`</InternalLink> clause when there was an <InternalLink version="v23.2" path="order-by">`ORDER BY`</InternalLink> clause, and the ordering was partially provided by an input operator. For example, this bug could occur with an ordering such as `ORDER BY a, b` when the scanned index was only ordered on column `a`. The impact of this bug was that more rows may have been returned than specified by the `LIMIT` clause. This bug is only present when not using the <InternalLink version="v23.2" path="architecture/sql-layer#vectorized-query-execution">vectorized execution engine</InternalLink>; that is, when running with `SET vectorize = off;`. This bug has existed since CockroachDB v22.1.
* Fixed a bug in the DB Console's <InternalLink version="v23.2" path="ui-custom-chart-debug-page">**Custom Chart**</InternalLink> tool where store-level metrics were displayed only for the first store ID associated with the node. Now data is displayed for all stores present on a node, and a single time series is shown for each store, rather than an aggregated value for all of the node's stores. This allows finer-grained monitoring of store-level metrics.
* Fixed a bug where privileges granted for <InternalLink version="v23.2" path="create-external-connection">external connections</InternalLink> were incorrectly showing up in <InternalLink version="v23.2" path="show-system-grants">`SHOW SYSTEM GRANTS`</InternalLink>, but were not useful because there was no associated object name. The privileges no longer appear in `SHOW SYSTEM GRANTS`. Instead, the `SHOW GRANTS ON EXTERNAL CONNECTION` statement should be used.
* Statistics forecasts of zero rows can cause suboptimal <InternalLink version="v23.2" path="cost-based-optimizer">query plans</InternalLink>. Forecasting will now avoid predicting zero rows for most downward-trending statistics.
* Fixed a bug introduced in v23.2 that could cause a <InternalLink version="v23.2" path="plpgsql">PL/pgSQL</InternalLink> routine to return incorrect results when the routine included:
  * At least one parameter.
  * An `IF` statement with one leak-proof branch and one branch with side effects.
* Fixed a bug that could result in an internal error when attempting to create a <InternalLink version="v23.2" path="plpgsql">PL/pgSQL</InternalLink> routine using the (currently unsupported) `%ROWTYPE` syntax for a variable declaration.
* Fixed a bug where a <InternalLink version="v23.2" path="restore">`RESTORE`</InternalLink> of a backup that itself contained a table created by the `RESTORE` of a table with an in-progress <InternalLink version="v23.2" path="import-into">`IMPORT INTO`</InternalLink> would fail to restore all rows.
* Fixed a bug introduced in v23.2 that could cause a <InternalLink version="v23.2" path="plpgsql">PL/pgSQL</InternalLink> variable assignment to not be executed if the variable was never referenced after the assignment.
* Fixed a bug where CockroachDB could run into an `attempting to append refresh spans after the tracked timestamp has moved forward` internal error in some edge cases. The bug had been present since v22.2.
* A <InternalLink version="v23.2" path="show-jobs">job</InternalLink> will now log rather than fail if it reports an out-of-bound progress fraction.
* Fixed a bug that would occur when <InternalLink version="v23.2" path="alter-type">`ALTER TYPE... DROP VALUE`</InternalLink> is followed by <InternalLink version="v23.2" path="drop-schema">`DROP SCHEMA CASCADE...`</InternalLink> in the same transaction. Previously, the `ALTER TYPE` schema change would get queued up to run at commit time, but by that point, the type may have already been removed, so the commit could fail.
* Fixed a bug that could lead to descriptors with self references that pointed to incorrect descriptor IDs. Now, tables that see the error `invalid inbound foreign key... origin table ID should be` or `invalid outbound foreign key... reference table ID should be` will automatically repair post deserialization.
* Fixed a bug where a failed <InternalLink version="v23.2" path="restore">restore</InternalLink> job could leave the system in a state where re-attempting the restore was not possible without manual intervention.
* <InternalLink version="v23.2" path="ui-databases-page#index-recommendations">Index recommendations</InternalLink> in the <InternalLink version="v23.2" path="ui-overview">DB Console</InternalLink> will now function properly for indexes on tables or columns whose names contain quotation marks or whitespace. For example: `CREATE INDEX ON "my table" ("my col");`.
* Fixed a crash introduced in v23.2.5 that could occur when planning <InternalLink version="v23.2" path="cost-based-optimizer#enable-and-disable-automatic-statistics-collection-for-clusters">statistics collection</InternalLink> on a table with a <InternalLink version="v23.2" path="computed-columns">virtual computed column</InternalLink> using a user-defined type when the newly introduced <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink> `sql.stats.virtual_computed_columns.enabled` is set to `true`. (The setting was introduced in v23.2.4 and set to `false` by default.)
* Added automated clean up and validation for <InternalLink version="v23.2" path="drop-role">dropped roles</InternalLink> inside descriptors.
* Fixed a bug where <InternalLink version="v23.2" path="drop-role">`DROP ROLE`</InternalLink> and <InternalLink version="v23.2" path="drop-user">`DROP USER`</InternalLink> could leave references behind inside types, which could prevent <InternalLink version="v23.2" path="show-grants">`SHOW GRANTS`</InternalLink> from working.
* Fixed a bug where a change to a <InternalLink version="v23.2" path="create-type">user-defined type</InternalLink> could cause queries against tables using that type to fail with the error `histogram.go:694: span must be fully contained in the bucket`. The change to the user-defined type could come directly from an <InternalLink version="v23.2" path="alter-type">`ALTER TYPE`</InternalLink> statement, or indirectly from an <InternalLink version="v23.2" path="alter-database#add-region">`ALTER DATABASE ADD REGION`</InternalLink> or <InternalLink version="v23.2" path="alter-database#drop-region">`DROP REGION`</InternalLink> statement (which implicitly change the `crdb_internal_region` type). This was present since user-defined types were introduced in v20.2.

### Performance improvements

* More efficient <InternalLink version="v23.2" path="cost-based-optimizer">query plans</InternalLink> are now generated for queries with text similarity filters, for example, `text_col % 'foobar'`. These plans are generated if the `optimizer_use_trigram_similarity_optimization` <InternalLink version="v23.2" path="session-variables">session setting</InternalLink> is enabled. It is disabled by default.
* The <InternalLink version="v23.2" path="cost-based-optimizer">optimizer</InternalLink> now costs <InternalLink version="v23.2" path="select-clause#eliminate-duplicate-rows">`distinct-on`</InternalLink> operators more accurately. It may produce more efficient query plans in some cases.
* Added a new <InternalLink version="v23.2" path="session-variables">session setting</InternalLink> `optimizer_use_improved_zigzag_join_costing`. When enabled and when the <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink> `enable_zigzag_join` is also enabled, the cost of zigzag joins is updated such that a zigzag join will be chosen over a scan only if it produces fewer rows than a scan.
* Improved the selectivity estimation of multi-column filters when the multi-column distinct count is high. This prevents the <InternalLink version="v23.2" path="cost-based-optimizer">optimizer</InternalLink> from choosing a bad query plan due to over-estimating the selectivity of a multi-column predicate.
* Improved the efficiency of error handling in the <InternalLink version="v23.2" path="vectorized-execution">vectorized execution engine</InternalLink> to reduce the CPU overhead of statement timeout handling and reduce the potential for more statement timeouts.

### Contributors

This release includes 115 merged PRs by 32 authors.

## v23.2.5

Release Date: May 7, 2024

### Downloads

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

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

### Docker image

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

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

To download the Docker image:

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

### SQL language changes

* The new <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink> <InternalLink version="v23.2" path="cluster-settings">`sql.stats.virtual_computed_columns.enabled`</InternalLink> enables collection of <InternalLink version="v23.2" path="cost-based-optimizer#table-statistics">table statistics</InternalLink> on virtual <InternalLink version="v23.2" path="computed-columns">computed columns</InternalLink>.
* The new <InternalLink version="v23.2" path="session-variables">session variable</InternalLink> `optimizer_use_virtual_computed_column_stats` configures the <InternalLink version="v23.2" path="cost-based-optimizer">optimizer</InternalLink> to consider table statistics on virtual computed columns.
* The new `FORCE_INVERTED_INDEX` <InternalLink version="v23.2" path="indexes#selection">hint</InternalLink> configures the <InternalLink version="v23.2" path="cost-based-optimizer">optimizer</InternalLink> to prefer a query plan scan over any inverted index of the hinted table. If no such query plan can be generated, an error is logged.
* The <InternalLink version="v23.2" path="cost-based-optimizer">optimizer</InternalLink> can now plan constrained scans over <InternalLink version="v23.2" path="partial-indexes">partial indexes</InternalLink> in more cases, particularly on partial indexes with predicates referencing virtual <InternalLink version="v23.2" path="cluster-settings">computed columns</InternalLink>.

### Operational changes

* A minimum <InternalLink version="v23.2" path="architecture/replication-layer#raft">Raft</InternalLink> scheduler concurrency is now enforced per <InternalLink version="v23.2" path="cockroach-start#storage">store</InternalLink> so that a node with many stores does not spread workers too thinly. This avoids high scheduler latency across <InternalLink version="v23.2" path="architecture/glossary#replica">replicas</InternalLink> on a store when load is imbalanced.
* A <InternalLink version="v23.2" path="change-data-capture-overview">changefeed</InternalLink> optimization to reduce duplicates during aggregator restarts has been disabled due to poor performance.

### DB Console changes

* The **Commit Latency** chart in the <InternalLink version="v23.2" path="ui-cdc-dashboard">Changefeed Dashboard</InternalLink> now aggregates by max instead of by sum for multi-node changefeeds. This more accurately reflects the amount of time for events to be acknowledged by the downstream sink.

### Bug fixes

* Fixed a slow memory leak when opening many new <InternalLink version="v23.2" path="connect-to-the-database">connections</InternalLink>. This bug was introduced in v22.2.9 and v23.1.0.

* Fixed a bug that occurred when using <InternalLink version="v23.2" path="alter-table">`ALTER TABLE`</InternalLink> to drop and re-add a <InternalLink version="v23.2" path="check">`CHECK` constraint</InternalLink> with the same name.

* <InternalLink version="v23.2" path="create-sequence">Sequence</InternalLink> options `MINVALUE` and `MAXVALUE` automatically adjust to new types bounds. This mirrors the behavior of PostgreSQL.

* Fixed a bug that could prevent timeseries graphs shown on the DB Console SQL Activity <InternalLink version="v23.2" path="ui-statements-page">Statement Details</InternalLink> page from rendering correctly when specifying a custom time range.

* Fixed a bug present since at least v21.1 that could lead to incorrect evaluation of an `IN` expression with:
  * <InternalLink version="v23.2" path="int">`INT2` or `INT4`</InternalLink> type on the left side, and
  * Values on the right side that are outside of the range of the left side.

* Fixed a leak in reported memory usage (not the actual memory usage) by the internal memory accounting system, the limit for which is configured via the <InternalLink version="v23.2" path="cockroach-start#flags">`--max-sql-memory`</InternalLink> flag when a long-running sessions issues hundreds of thousands or more <InternalLink version="v23.2" path="transactions">transactions</InternalLink>. This reporting bug could cause `root: memory budget exceeded` errors for other queries. The bug was introduced in v23.1.17 and v23.2.3.

* Fixed a bug introduced in v23.2.4 that could prevent collection of <InternalLink version="v23.2" path="cost-based-optimizer#table-statistics">table statistics</InternalLink> on tables that have on virtual <InternalLink version="v23.2" path="computed-columns">computed columns</InternalLink> of <InternalLink version="v23.2" path="create-type">user-defined type</InternalLink> when the newly-introduced <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink> <InternalLink version="v23.2" path="cluster-settings">`sql.stats.virtual_computed_columns.enabled`</InternalLink> is set to `true` (defaults to `false`). The setting was introduced in v23.2.4 and is disabled by default.

* Fixed a bug where a <InternalLink version="v23.2" path="grant">`GRANT... ON ALL TABLES`</InternalLink> statement could fail if a sequence existed that did not support the <InternalLink version="v23.2" path="security-reference/authorization#privileges">privilege</InternalLink> being granted.

* Fixed an existing bug where an unused value cannot be dropped from an <InternalLink version="v23.2" path="enum">`ENUM`</InternalLink> if the`ENUM` itself is referenced by a <InternalLink version="v23.2" path="user-defined-functions">user-defined function</InternalLink>. A value can now be dropped from an`ENUM` as long as the value itself is not being referenced by any other data element, including a user-defined function.

### Contributors

This release includes 79 merged PRs by 33 authors.

## v23.2.4

Release Date: April 11, 2024

### Downloads

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

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

### Docker image

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

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

To download the Docker image:

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

### SQL language changes

* Mutation statements such as <InternalLink version="v23.2" path="update">`UPDATE`</InternalLink> and <InternalLink version="v23.2" path="delete">`DELETE`</InternalLink> as well as locking statements such as <InternalLink version="v23.2" path="select-for-update">`SELECT FOR UPDATE`</InternalLink> are not allowed in <InternalLink version="v23.2" path="set-transaction#parameters">read-only transactions</InternalLink> or <InternalLink version="v23.2" path="set-transaction#parameters">`AS OF SYSTEM TIME` transactions</InternalLink>. Previously, a bug existed where mutation statements and locking statements in implicit single-statement transactions using AS OF SYSTEM TIME were allowed.
* The new cluster setting <InternalLink version="v23.2" path="cluster-settings">`sql.stats.virtual_computed_columns.enabled`</InternalLink>, when enabled, allows the collection of <InternalLink version="v23.2" path="show-statistics">table statistics</InternalLink> on <InternalLink version="v23.2" path="computed-columns">virtual computed columns</InternalLink>.
* The new <InternalLink version="v23.2" path="session-variables">session variable</InternalLink> `optimizer_use_virtual_computed_column_stats`, when enabled, configures the <InternalLink version="v23.2" path="cost-based-optimizer">cost-based optimizer</InternalLink> to use <InternalLink version="v23.2" path="show-statistics">table statistics</InternalLink> on <InternalLink version="v23.2" path="computed-columns">virtual computed columns</InternalLink>.

### DB Console changes

* Fixed an issue where clusters with multiple <InternalLink version="v23.2" path="cockroach-start#store">stores</InternalLink> per node could list inaccurate region and node information on the <InternalLink version="v23.2" path="ui-databases-page#databases">**Databases** page</InternalLink>.
* Users will no longer see <InternalLink version="v23.2" path="views">views</InternalLink> displayed on the <InternalLink version="v23.2" path="ui-databases-page#databases">**Databases** page</InternalLink>. Previously views would be listed with no information, only displaying errors.

### Bug fixes

* Previously, on long-running <InternalLink version="v23.2" path="show-sessions">sessions</InternalLink> that issue many (hundreds of thousands or more) <InternalLink version="v23.2" path="transactions">transactions</InternalLink>, CockroachDB's internal memory accounting system, the limit for which is configured via the <InternalLink version="v23.2" path="cockroach-start#general">`--max-sql-memory` flag</InternalLink> ) could leak. This bug, in turn, could result in the error message `"root: memory budget exceeded"` for other queries. The bug was present in v23.2.3 and is now fixed.
* Previously, <InternalLink version="v23.2" path="alter-table#set-locality">altering a table's locality</InternalLink> from <InternalLink version="v23.2" path="alter-table#set-the-table-locality-to-regional-by-row">`REGIONAL BY ROW`</InternalLink> to <InternalLink version="v23.2" path="alter-table">`REGIONAL BY TABLE`</InternalLink> could cause <InternalLink version="v23.2" path="architecture/replication-layer#leases">leaseholders</InternalLink> to never move to the <InternalLink version="v23.2" path="alter-database#set-primary-region">database's primary region</InternalLink>. This is now fixed.
* A user with the <InternalLink version="v23.2" path="security-reference/authorization#privileges">`VIEWACTIVITYREDACTED` privilege</InternalLink> can no longer see constants inside of queries that originate from other users in the <InternalLink version="v23.2" path="show-sessions#response">`SHOW SESSIONS` result</InternalLink>. Previously, this redaction did not occur.
* Previously, the <InternalLink version="v23.2" path="show-statements">`SHOW STATEMENTS`</InternalLink> and the <InternalLink version="v23.2" path="show-statements#aliases">`SHOW QUERIES`</InternalLink> commands incorrectly required the user to have the <InternalLink version="v23.2" path="security-reference/authorization#privileges">`VIEWACTIVITY` or `VIEWACTIVITYREDACTED` privilege</InternalLink>. However, a user always should be able to view their own queries, even without these privileges. This is now fixed.
* Fixed a bug where <InternalLink version="v23.2" path="restore">`RESTORE`</InternalLink> on certain <InternalLink version="v23.2" path="backup">`BACKUP`s</InternalLink> would open a very large number of connections to the backup storage provider.
* Fixed a bug that occurred when using <InternalLink version="v23.2" path="alter-table">`ALTER TABLE`</InternalLink> to <InternalLink version="v23.2" path="alter-table#drop-constraint">drop</InternalLink> and <InternalLink version="v23.2" path="alter-table#add-constraint">add</InternalLink> back a <InternalLink version="v23.2" path="check">`CHECK` constraint</InternalLink> with the same name.
* Fixed a bug in which it was possible to set <InternalLink version="v23.2" path="session-variables">session variable</InternalLink> `transaction_read_only` to `false` during an <InternalLink version="v23.2" path="set-transaction#parameters">`AS OF SYSTEM TIME` transaction</InternalLink>.
* Fixed a bug where some files were not closed when inspecting <InternalLink version="v23.2" path="backup-architecture#metadata-writing-phase">backup metadata</InternalLink> during <InternalLink version="v23.2" path="backup">`BACKUP`</InternalLink> and <InternalLink version="v23.2" path="restore">`RESTORE`</InternalLink>.
* Fixed an intermittent page crash on the <InternalLink version="v23.2" path="cockroachcloud/insights-page#schema-insights-tab">**Schema Insights**</InternalLink> view.

### Contributors

This release includes 65 merged PRs by 37 authors

## v23.2.3

Release Date: March 20, 2024

### Downloads

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

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

### Docker image

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

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

To download the Docker image:

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

### Security updates

* The <InternalLink version="v23.2" path="ui-overview">DB Console</InternalLink> `session` cookie is now marked `HttpOnly` to prevent it from being read by any Javascript code. Cookies are also marked `Secure` for the browser when the cluster is running in secure mode.
* Clusters using <InternalLink version="v23.2" path="sso-sql">Cluster Single Sign-on (SSO) with JSON web tokens (JWTs)</InternalLink> can now optionally fetch signing keys from configured issuers instead of configuring static signing keys for each issuer. When the new cluster setting `server.jwt_authentication.jwks_auto_fetch.enabled` is set to `true`, signing keys are automatically fetched from the issuer using metadata published in its OpenID configuration. In this case, static signing keys in `server.jwt_authentication.jwks` are ignored. When automatic fetching is enabled, there may be a slight increase in network latency for each JWT authentication request, proportional to the latency between the cluster and the issuer's endpoint.

### Enterprise edition changes

* Fixed a bug where creating a changefeed with the <InternalLink version="v23.2" path="create-changefeed">`format='avro'`</InternalLink> and <InternalLink version="v23.2" path="create-changefeed">`diff`</InternalLink> options that targeted tables with a `DECIMAL(n)` column (i.e., zero-scale `DECIMAL` column) would cause a panic.

### SQL language changes

* Changed the `sql.index_recommendation.drop_unused_duration` cluster setting to `public` so that it is documented on the <InternalLink version="v23.2" path="cluster-settings">Cluster Settings</InternalLink> page.
* Added the `server.max_open_transactions_per_gateway` <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink>. When set to a non-negative value, non-admin users cannot execute a query if the number of transactions open on the current gateway node is already at the configured limit.
* Out-of-process SQL servers will now start exporting a new `sql.aggregated_livebytes` <InternalLink version="v23.2" path="metrics">metric</InternalLink>. This metric gets updated once every 60 seconds by default, and its update interval can be configured via the `tenant_global_metrics_exporter_interval` <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink>.
* Added support for index hints with <InternalLink version="v23.2" path="insert">`INSERT`</InternalLink> and <InternalLink version="v23.2" path="upsert">`UPSERT`</InternalLink> statements. This allows `INSERT... ON CONFLICT` and `UPSERT` queries to use index hints in the same way they are already supported for <InternalLink version="v23.2" path="update">`UPDATE`</InternalLink> and <InternalLink version="v23.2" path="delete">`DELETE`</InternalLink> statements.

### Operational changes

* Expanded the <InternalLink version="v23.2" path="cockroach-debug-zip">`--include-range-info`</InternalLink> flag to include problem ranges. This flag still defaults to `true`.
* In unredacted <InternalLink version="v23.2" path="cockroach-debug-zip">debug zips</InternalLink>, the `crdb_internal.transaction_contention_events` table file has two new columns:
  * `waiting_stmt_query`: the query of the waiting statement.
  * `blocking_txn_queries_unordered`: the unordered list of the blocking transaction's queries.

### Command-line changes

* Updated the SQL shell help URL to point to the <InternalLink version="v23.2" path="cockroach-sql">`cockroach sql`</InternalLink> page.
* <InternalLink version="v23.2" path="cockroach-debug-tsdump">`cockroach debug tsdump`</InternalLink> creates a `tsdump.yaml` file. The `tsdump` raw format automatically creates the YAML file in the default location `/tmp/tsdump.yaml`. Added a new flag `--yaml` that allows users to specify the path to create `tsdump.yaml` instead of using the default location. For example, `cockroach debug tsdump --host <host>:<port> \ --format raw --yaml=/some_path/tsdump.yaml > /some_path/tsdump.gob`.

### DB Console changes

* Fixed a bug where a warning about the need to refresh data would remain displayed on the Active Executions view of the <InternalLink version="v23.2" path="ui-statements-page#active-executions-view">Statements</InternalLink> and <InternalLink version="v23.2" path="ui-transactions-page#active-executions-view">Transactions</InternalLink> pages despite enabling **Auto Refresh**.
* Updated the <InternalLink version="v23.2" path="ui-statements-page">Statement Details page</InternalLink> to always show the entire selected period, instead of just the period that had data.
* The <InternalLink version="v23.2" path="ui-overload-dashboard">Overload dashboard</InternalLink> now includes two additional graphs:
  * **Elastic CPU Utilization**: displays the CPU utilization by elastic work, compared to the limit set for elastic work.
  * **Elastic CPU Exhausted Duration Per Second**: displays the duration of CPU exhaustion by elastic work, in microseconds.
* The **Full Table/Index Scans** chart in the <InternalLink version="v23.2" path="ui-sql-dashboard">SQL Metrics dashboard</InternalLink> now shows the non-negative derivative of the number of full scans tracked.

### Bug fixes

* Fixed a bug where a <InternalLink version="v23.2" path="change-data-capture-overview">changefeed</InternalLink> could omit events in rare cases, logging the error `cdc ux violation: detected timestamp... that is less or equal to the local frontier`. This could happen in the following scenario:
  1. A <InternalLink version="v23.2" path="create-and-configure-changefeeds#enable-rangefeeds">rangefeed</InternalLink> runs on a follower <InternalLink version="v23.2" path="architecture/glossary#cockroachdb-architecture-terms">replica</InternalLink> that lags significantly behind the <InternalLink version="v23.2" path="architecture/glossary#cockroachdb-architecture-terms">leaseholder</InternalLink>.
  2. A transaction commits and removes its transaction record before its <InternalLink version="v23.2" path="architecture/transaction-layer#writing">intent</InternalLink> resolution is applied on the follower.
  3. The follower's <InternalLink version="v23.2" path="architecture/transaction-layer#closed-timestamps">closed timestamp</InternalLink> has advanced past the transaction commit timestamp.
  4. The rangefeed attempts to push the transaction to a new timestamp (at least 10 seconds after the transaction began).
  5. This may cause the rangefeed to prematurely emit a checkpoint before emitting writes at lower timestamps, which in turn may cause the <InternalLink version="v23.2" path="how-does-an-enterprise-changefeed-work">changefeed</InternalLink> to drop these events entirely, never emitting them.
* Decommissioning replicas that are part of a mis-replicated range will no longer get stuck on a rebalance operation that was falsely determined to be unsafe. This bug was introduced in v23.1.0.
* CockroachDB will no longer spam the logs with `unable to get CPU capacity` errors every 10 seconds when running outside of a CPU cgroup.
* <InternalLink version="v23.2" path="cost-based-optimizer#table-statistics">`AUTO CREATE STATS`</InternalLink> jobs could previously lead to growth in an internal system table resulting in slower job-system related queries.
* Fixed a bug that caused an inscrutable error when a <InternalLink version="v23.2" path="create-sequence">sequence</InternalLink> name allocated by `SERIAL` conflicted with an existing type name.
* Fixed an internal error with a message like: `LeafTxn... incompatible with locking request` that occurs when performing an update under <InternalLink version="v23.2" path="read-committed">`READ COMMITTED` isolation</InternalLink> that cascades to a table with multiple other foreign keys.
* Fixed a bug where <InternalLink version="v23.2" path="alter-table#alter-primary-key">`ALTER PRIMARY KEY`</InternalLink> could fail with an error `non-nullable column <x> with no value! Index scanned..` when validating recreated <InternalLink version="v23.2" path="schema-design-indexes">secondary indexes</InternalLink>.
* Fixed a bug where <InternalLink version="v23.2" path="comment-on">`COMMENT ON`</InternalLink> statements could fail with an `unexpected value` error if multiple `COMMENT` statements were running concurrently.
* Previously, in certain cases, using virtual tables such as `crdb_internal.system_jobs` could result in the internal error `attempting to append refresh spans after the tracked timestamp has moved forward`. This is now fixed. The bug was introduced in CockroachDB v23.1.
* Fixed a bug where operations on the `crdb_internal.leases` table could cause a node to become unavailable due to a deadlock in the leasing subsystem.
* Fixed a bug where rangefeed resolved timestamps could get stuck, continually emitting the log message `pushing old intents failed: range barrier failed, range split`, typically following a <InternalLink version="v23.2" path="architecture/distribution-layer#range-merges">range merge</InternalLink>.
* Fixed a bug where running a <InternalLink version="v23.2" path="change-data-capture-overview">changefeed</InternalLink> that targets a table with a user-defined type column and with the <InternalLink version="v23.2" path="create-changefeed">`envelope` option</InternalLink> set to any value other than `wrapped` would cause a node panic due to a nil dereference.
* Fixed a rare panic that could happen during a `pg_dump` import that contains a function that has a subquery in one of its arguments, like `SELECT addgeometrycolumn(...)`. Now, attempting to import a `pg_dump` with such a function results in an expected error.
* Users with the <InternalLink version="v23.2" path="security-reference/authorization#supported-privileges">VIEWACTIVITY</InternalLink> privilege can now request statement bundles using `crdb_internal.request_statement_bundle` or through the DB Console <InternalLink version="v23.2" path="security-reference/authorization#supported-privileges">SQL Activity</InternalLink> page.
* Fixed a bug in changefeed <InternalLink version="v23.2" path="changefeed-sinks#webhook-sink">webhook sinks</InternalLink> where the HTTP request body may not be initialized on retries, resulting in the error `http: ContentLength=... with Body length 0`.
* Fixed a bug that caused internal errors when executing an <InternalLink version="v23.2" path="export">`EXPORT`</InternalLink> statement.
* Fixed a bug that could lead to schema changes with a large number of descriptors doing full table scans on `system.leases`.
* Fixed a bug where rangefeed resolved timestamps could get stuck, continually emitting the log message `pushing old intents failed: range barrier failed, range split`, typically following a range merge. This bug was introduced in v23.2.1.
* Fixed a bug that occurred when using <InternalLink version="v23.2" path="alter-table">`ALTER TABLE`</InternalLink> to drop and re-add a <InternalLink version="v23.2" path="check">`CHECK`</InternalLink> constraint with the same name.
* Fixed a bug that caused a slow memory leak that can accumulate when opening many new connections. The bug was present in v22.2.9+ and v23.1+ versions.

### Contributors

This release includes 118 merged PRs by 42 authors.

## v23.2.2

Release Date: February 27, 2024

### Downloads

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

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

### Docker image

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

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

To download the Docker image:

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

### Bug fixes

* Fixed a bug where <InternalLink version="v23.2" path="create-and-configure-changefeeds#enable-rangefeeds">rangefeed</InternalLink> resolved timestamps could get stuck, continually emitting the log message `pushing old intents failed: range barrier failed, range split`, typically following a <InternalLink version="v23.2" path="architecture/distribution-layer#range-merges">range merge</InternalLink>. This bug was introduced in v23.2.1.

### Contributors

This release includes 2 merged PRs by 2 authors.

## v23.2.1

Release Date: February 20, 2024

### Downloads

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

<table><thead><tr><th>Operating System</th><th>Architecture</th><th>Full executable</th><th>SQL-only executable</th></tr></thead><tbody><tr><td rowspan="2">Linux</td><td>Intel</td><td><a href="https://binaries.cockroachdb.com/cockroach-v23.2.1.linux-amd64.tgz">cockroach-v23.2.1.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v23.2.1.linux-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v23.2.1.linux-amd64.tgz">cockroach-sql-v23.2.1.linux-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v23.2.1.linux-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v23.2.1.linux-arm64.tgz">cockroach-v23.2.1.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v23.2.1.linux-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v23.2.1.linux-arm64.tgz">cockroach-sql-v23.2.1.linux-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v23.2.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-v23.2.1.darwin-10.9-amd64.tgz">cockroach-v23.2.1.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v23.2.1.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v23.2.1.darwin-10.9-amd64.tgz">cockroach-sql-v23.2.1.darwin-10.9-amd64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v23.2.1.darwin-10.9-amd64.tgz.sha256sum">SHA256</a>)</td></tr><tr><td>ARM</td><td><a href="https://binaries.cockroachdb.com/cockroach-v23.2.1.darwin-11.0-arm64.tgz">cockroach-v23.2.1.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v23.2.1.darwin-11.0-arm64.tgz.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v23.2.1.darwin-11.0-arm64.tgz">cockroach-sql-v23.2.1.darwin-11.0-arm64.tgz</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v23.2.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-v23.2.1.windows-6.2-amd64.zip">cockroach-v23.2.1.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-v23.2.1.windows-6.2-amd64.zip.sha256sum">SHA256</a>)</td><td><a href="https://binaries.cockroachdb.com/cockroach-sql-v23.2.1.windows-6.2-amd64.zip">cockroach-sql-v23.2.1.windows-6.2-amd64.zip</a><br />(<a href="https://binaries.cockroachdb.com/cockroach-sql-v23.2.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:v23.2.1
```

### Security updates

* Introduced the `server.redact_sensitive_settings.enabled` <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink>, which is false by default. If set to `true`, then the values of the following settings will be redacted when accessed through `SHOW` commands or other introspection interfaces. In the future, any other sensitive cluster settings that are added will be redacted as well. Users who have the `MODIFYCLUSTERSETTING` <InternalLink version="v23.2" path="security-reference/authorization#managing-privileges">privilege</InternalLink> can always view the unredacted settings.
  * `server.oidc_authentication.client_id`
  * `server.oidc_authentication.client_secret`
* If the `server.redact_sensitive_settings.enabled` <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink> is set to `true`, then the `MANAGEVIRTUALCLUSTER` <InternalLink version="v23.2" path="security-reference/authorization#managing-privileges">privilege</InternalLink> is required to view the values of the per-virtual-cluster overrides for sensitive cluster settings.
* The <InternalLink version="v23.2" path="ui-overview">DB Console</InternalLink> `session` cookie is now marked `HttpOnly` to prevent it from being read by any JavaScript code.
* <InternalLink version="v23.2" path="ui-overview">DB Console</InternalLink> cookies are marked `Secure` for the browser when the cluster is running in secure mode.

### General changes

* Updated Go version to 1.21.3.

### Enterprise edition changes

* Added a new <InternalLink version="v23.2" path="functions-and-operators">SQL function</InternalLink> `fips_ready`, which can be used to verify the <InternalLink version="v23.2" path="fips">FIPS</InternalLink> readiness of the <InternalLink version="v23.2" path="architecture/life-of-a-distributed-transaction#gateway">gateway node</InternalLink>.
* <InternalLink version="v23.2" path="physical-cluster-replication-overview">Physical Cluster Replication (PCR)</InternalLink> now retries for approximately 3 minutes before failing. This is increased from 20 µs.
* Fixed a bug where <InternalLink version="v23.2" path="create-and-configure-changefeeds">changefeeds</InternalLink> that targeted schema-locked tables could fail due to a very old highwater timestamp being incorrectly persisted.
* Fixed a bug where creating a <InternalLink version="v23.2" path="create-and-configure-changefeeds">changefeed</InternalLink> that targeted tables with a <InternalLink version="v23.2" path="decimal">`DECIMAL(n)`</InternalLink> column (i.e., zero-scale `DECIMAL` column), `format='avro'`, and `diff` would cause a panic.

### SQL language changes

* Added the `sql.ttl.default_select_rate_limit` <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink> and the `ttl_select_rate_limit` table <InternalLink version="v23.2" path="row-level-ttl#ttl-storage-parameters">storage parameter</InternalLink> to set the <InternalLink version="v23.2" path="row-level-ttl">TTL</InternalLink> select rate limit. This sets the number of records per table per second per node that can be selected by the <InternalLink version="v23.2" path="row-level-ttl#view-scheduled-ttl-jobs">TTL job</InternalLink>.
* Fixed a bug in <InternalLink version="v23.2" path="plpgsql">PL/pgSQL</InternalLink> where altering the name of a <InternalLink version="v23.2" path="create-sequence">sequence</InternalLink> or <InternalLink version="v23.2" path="create-type">user-defined type (UDT)</InternalLink> that was used in a PL/pgSQL <InternalLink version="v23.2" path="user-defined-functions">function</InternalLink> or <InternalLink version="v23.2" path="stored-procedures">procedure</InternalLink> could break them. This bug was only present in v23.2 alpha and beta releases.
* Added support for <InternalLink version="v23.2" path="import-into">`IMPORT INTO`</InternalLink> on a table that has columns typed as <InternalLink version="v23.2" path="array">arrays</InternalLink> of <InternalLink version="v23.2" path="create-type">user-defined types</InternalLink> (like <InternalLink version="v23.2" path="enum">enums</InternalLink> ). Tables that use multiple user-defined types with the same name but different <InternalLink version="v23.2" path="create-schema">schemas</InternalLink> are still unsupported.
* The new <InternalLink version="v23.2" path="select-for-update">`SELECT FOR UPDATE`</InternalLink> implementation used under <InternalLink version="v23.2" path="read-committed">Read Committed isolation</InternalLink> (and under <InternalLink version="v23.2" path="demo-serializable">Serializable isolation</InternalLink> when the `optimizer_use_lock_op_for_serializable` <InternalLink version="v23.2" path="session-variables">session variable</InternalLink> is `true` ) now locks all <InternalLink version="v23.2" path="column-families">column families</InternalLink> instead of only the first column family.
* Fixed a bug where <InternalLink version="v23.2" path="select-for-update">`SELECT FOR UPDATE`</InternalLink> under <InternalLink version="v23.2" path="read-committed">Read Committed isolation</InternalLink> on multi-column-family tables was not locking <InternalLink version="v23.2" path="column-families">column families</InternalLink> containing only key columns.
* It is now possible to run <InternalLink version="v23.2" path="call">`CALL`</InternalLink> statements with <InternalLink version="v23.2" path="explain">`EXPLAIN`</InternalLink>. The `EXPLAIN (OPT)` variant will show the body of the procedure, while other variants will only show the procedure name and arguments.
* <InternalLink version="v23.2" path="explain">`EXPLAIN`</InternalLink> output now contains detailed information about the plans for `CASCADE` actions.

### Operational changes

* Per-node <InternalLink version="v23.2" path="ui-hot-ranges-page">hot ranges</InternalLink> logging now logs the top 5 hot ranges on the local node instead of the top 5 hot ranges cluster-wide.

### Command-line changes

* Added a new command `cockroach debug enterprise-check-fips`, which diagnoses errors in <InternalLink version="v23.2" path="fips">FIPS</InternalLink> deployments.
* The new flag `--enterprise-require-fips-ready` can be added to any <InternalLink version="v23.2" path="cockroach-commands">`cockroach` command</InternalLink> to prevent startup if certain prerequisites for <InternalLink version="v23.2" path="fips">FIPS</InternalLink> compliance are not met.
* <InternalLink version="v23.2" path="cockroach-workload">`cockroach workload`</InternalLink> commands now appropriately invoke `.Close` in the case of an error.

### DB Console changes

* Updated the "CPU Time" label on the <InternalLink version="v23.2" path="ui-runtime-dashboard">Runtime Dashboard</InternalLink> to "SQL CPU Time" and added clarifications to its tooltip.
* <InternalLink version="v23.2" path="ui-statements-page#diagnostics">Statement bundles</InternalLink> are now enabled for Serverless clusters.
* The <InternalLink version="v23.2" path="ui-networking-dashboard">Networking Dashboard</InternalLink> is enhanced with charts that visualize number of packets received, number of receiving packets with error, number of receiving packets that got dropped, number of packets sent, number of sending packets with error, and number of sending packets that got dropped.
* The <InternalLink version="v23.2" path="ui-statements-page#explain-plans">Explain Plans</InternalLink> tab is now shown for the <InternalLink version="v23.2" path="ui-statements-page">Statements</InternalLink> and <InternalLink version="v23.2" path="ui-insights-page">Insights</InternalLink> pages, for Serverless clusters.

### Bug fixes

* Fixed a durability bug in <InternalLink version="v23.2" path="architecture/replication-layer#raft">Raft log</InternalLink> storage, caused by incorrect syncing of filesystem metadata. Previously, it was possible to lose writes of a particular kind ( `AddSSTable` ) that were used by e.g. <InternalLink version="v23.2" path="restore">`RESTORE`</InternalLink>. This loss was possible only under power-off or operating system crash conditions. Under such conditions, CockroachDB could enter a crash loop on node restart. In the worst case of a coordinated power-off/crash across multiple nodes this could lead to an unrecoverable loss of <InternalLink version="v23.2" path="architecture/replication-layer#raft">Raft quorum</InternalLink>.
* Fixed a bug where large <InternalLink version="v23.2" path="show-jobs">jobs</InternalLink> running with execution locality (such as some <InternalLink version="v23.2" path="changefeeds-in-multi-region-deployments#run-a-changefeed-job-by-locality">changefeeds</InternalLink> ) could result in the <InternalLink version="v23.2" path="architecture/life-of-a-distributed-transaction#gateway">gateway</InternalLink> node being assigned most of the work, causing performance degradation and cluster instability.
* Fixed a bug that caused node crashes and panics when running <InternalLink version="v23.2" path="insert">`INSERT`</InternalLink> queries on <InternalLink version="v23.2" path="alter-table#add-a-unique-index-to-a-regional-by-row-table">`REGIONAL BY ROW` tables with `UNIQUE` constraints or indexes</InternalLink>. The bug was only present in v23.2.0-beta.1.
* Fixed a bug that existed only in v23.2 alpha and beta versions that could have caused side effects to happen out of order for <InternalLink version="v23.2" path="plpgsql">PL/pgSQL</InternalLink> routines in rare cases.
* Fixed a bug that existed since v23.1 that prevented naming <InternalLink version="v23.2" path="create-type">user-defined type (UDT)</InternalLink> parameters when dropping a <InternalLink version="v23.2" path="user-defined-functions">user-defined function</InternalLink> (or procedure).
* Fixed a bug where <InternalLink version="v23.2" path="show-schedules">scheduled jobs</InternalLink> using <InternalLink version="v23.2" path="create-external-connection">external storage providers</InternalLink> could fail shortly after node startup.
* Locking tables (e.g., with <InternalLink version="v23.2" path="select-for-update">`SELECT FOR UPDATE`</InternalLink> ) on the null-extended side of <InternalLink version="v23.2" path="joins">outer joins</InternalLink> (e.g., the right side of a `LEFT JOIN` ) is now disallowed and returns an error. This improves compatibility with PostgreSQL and prevents ambiguity in <InternalLink version="v23.2" path="architecture/transaction-layer#concurrency-control">locking semantics</InternalLink>. This bug has existed since locking with `FOR UPDATE` was introduced.
* Fixed a display bug in the <InternalLink version="v23.2" path="ui-overview">DB Console</InternalLink> where because not all types of <InternalLink version="v23.2" path="online-schema-changes">schema changes</InternalLink> are setting the value for the mutation ID, the value of the ID could previously show as "with ID undefined" on the <InternalLink version="v23.2" path="ui-overview-dashboard#events-panel">Events panel</InternalLink>. Now, the notification omits the undefined value (the rest of the event notification is still displayed).
* Fixed the formatting for <InternalLink version="v23.2" path="plpgsql">PL/pgSQL</InternalLink> routines, which could prevent creating a routine with <InternalLink version="v23.2" path="create-procedure#create-a-stored-procedure-that-uses-a-while-loop">loop labels</InternalLink>, and could prevent some expressions from being <InternalLink version="v23.2" path="configure-logs#redact-logs">redacted</InternalLink> correctly. The bug only existed in v23.2 alpha and beta releases.
* Fixed a bug that would cause a syntax error during <InternalLink version="v23.2" path="configure-logs#redact-logs">redaction</InternalLink> of a <InternalLink version="v23.2" path="plpgsql">PL/pgSQL</InternalLink> routine. The bug existed only in v23.2 alpha and beta releases.
* Fixed a bug that would cause syntax errors when attempting to <InternalLink version="v23.2" path="restore">`RESTORE`</InternalLink> a database with <InternalLink version="v23.2" path="plpgsql">PL/pgSQL</InternalLink> <InternalLink version="v23.2" path="user-defined-functions">user-defined functions (UDFs)</InternalLink> or <InternalLink version="v23.2" path="stored-procedures">stored procedures</InternalLink>. This bug only affected v23.2 alpha and beta releases.
* <InternalLink version="v23.2" path="update">`UPDATE`</InternalLink>, <InternalLink version="v23.2" path="upsert">`UPSERT`</InternalLink>, and <InternalLink version="v23.2" path="insert#on-conflict-clause">`INSERT ON CONFLICT`</InternalLink> queries are now disallowed under <InternalLink version="v23.2" path="read-committed">Read Committed isolation</InternalLink> when the table contains a <InternalLink version="v23.2" path="check">check constraint</InternalLink> involving a <InternalLink version="v23.2" path="column-families">column family</InternalLink> that is updated, and the check constraint also involves a column family that is **not** updated, but **is** read. This is a temporary fix to prevent possible violation of the check constraint, and the restriction will be lifted in the future.
* Previously, all `AggHistogram` -powered metrics were not reporting quantiles properly in the <InternalLink version="v23.2" path="ui-overview">DB Console</InternalLink>. This patch fixes the histograms so that the quantiles in DB Console are reported correctly. these histograms were only broken in the <InternalLink version="v23.2" path="ui-overview-dashboard">DB Console metrics dashboards</InternalLink>, but were **not** broken in the <InternalLink version="v23.2" path="monitoring-and-alerting#prometheus-endpoint">Prometheus-compatible endpoint</InternalLink>, `/_status/vars`. The list of affected metrics is shown below.
  * `changefeed.message_size_hist`
  * `changefeed.parallel_io_queue_nanos`
  * `changefeed.sink_batch_hist_nanos`
  * `changefeed.flush_hist_nanos`
  * `changefeed.commit_latency`
  * `changefeed.admit_latency`
  * `jobs.row_level_ttl.span_total_duration`
  * `jobs.row_level_ttl.select_duration`
  * `jobs.row_level_ttl.delete_duration`
* Fixed a bug introduced in v23.2 that caused internal errors and panics when certain SQL queries were run with automatic <InternalLink version="v23.2" path="ui-databases-page#index-recommendations">index recommendation</InternalLink> collection enabled.
* <InternalLink version="v23.2" path="indexes">Standard indexes</InternalLink> and <InternalLink version="v23.2" path="inverted-indexes">inverted indexes</InternalLink> may no longer be created on <InternalLink version="v23.2" path="plpgsql">PL/pgSQL</InternalLink> `REFCURSOR[]` s columns. `REFCURSOR` columns themselves are not indexable.
* Fixed a bug that prevented database <InternalLink version="v23.2" path="restore">`RESTORE`</InternalLink> when the database contained a <InternalLink version="v23.2" path="views">view</InternalLink> or <InternalLink version="v23.2" path="create-procedure">routine</InternalLink> that referenced a <InternalLink version="v23.2" path="create-type">user-defined type (UDT)</InternalLink> in the body string. For views, this bug was introduced in v20.2, when <InternalLink version="v23.2" path="create-type">user-defined types (UDTs)</InternalLink> were introduced. For routines, this bug was introduced in v22.2, when user-defined functions (UDFs) were introduced.
* Fixed a bug that could cause a function resolution error when attempting to use a <InternalLink version="v23.2" path="functions-and-operators">builtin function</InternalLink> like `now()` as a formatting argument to a <InternalLink version="v23.2" path="plpgsql">PL/pgSQL</InternalLink> `RAISE` statement.
* Fixed a bug where CDC custom key columns did not function correctly with <InternalLink version="v23.2" path="create-and-configure-changefeeds">CDC queries</InternalLink>. For example, `CREATE CHANGEFEED WITH key_column=..., unordered AS SELECT * FROM table` now works correctly instead of retrying forever. Note that some functionalities with CDC custom keys are not fully supported, see for more details.
* Fixed a bug in <InternalLink version="v23.2" path="architecture/replication-layer#raft">Raft log</InternalLink> truncation that could lead to crash loops, and unrecoverable loss of <InternalLink version="v23.2" path="architecture/replication-layer#raft">quorum</InternalLink> in the unlikely worst case that all <InternalLink version="v23.2" path="architecture/overview">replicas</InternalLink> enter this crash loop. The bug manifested when a few things coincided: The cluster was running a bulk write workload (e.g., <InternalLink version="v23.2" path="online-schema-changes">schema change</InternalLink>, <InternalLink version="v23.2" path="copy">import</InternalLink>, <InternalLink version="v23.2" path="restore">`RESTORE`</InternalLink> ); a log truncation command was running; and the process crashed at an unfortunate moment (e.g., the process was killed, or killed itself for reasons like detecting a <InternalLink version="v23.2" path="cluster-setup-troubleshooting#disk-stalls">disk stall</InternalLink> ).
* Fixed the value used for the total runtime on SQL statistics. This was using the wrong value previously, causing the <InternalLink version="v23.2" path="ui-overview#sql-activity">SQL Activity</InternalLink> page to display values with more than 100%.
* Fixed a bug where trying to set an empty `search_path` <InternalLink version="v23.2" path="session-variables">session variable</InternalLink> resulted in an error.
* It is now possible to assign to the parameter of a <InternalLink version="v23.2" path="plpgsql">PL/pgSQL</InternalLink> <InternalLink version="v23.2" path="create-procedure">routine</InternalLink>. Previously, attempts to do this would result in a "variable not found" error at routine creation time. In addition, variable shadowing is now explicitly disabled, where previously it would cause an internal error. These bugs existed in the v23.2.0 release and the v23.2 pre-release versions.
* Fixed a bug in the <InternalLink version="v23.2" path="row-level-ttl">row-level TTL</InternalLink> <InternalLink version="v23.2" path="show-schedules">job</InternalLink> that would cause it to skip expired rows if the <InternalLink version="v23.2" path="primary-key">primary key</InternalLink> of the table included columns of the <InternalLink version="v23.2" path="collate">collated string</InternalLink> type. This bug was present since the initial release of row-level TTL in v22.2.0.
* Fixed a bug where concurrent <InternalLink version="v23.2" path="grant">`GRANT`</InternalLink> statements can cause deadlocks.
* CockroachDB can now transparently retry more retryable errors when performing a non-atomic <InternalLink version="v23.2" path="copy">`COPY`</InternalLink> command.
* Fixed a bug that caused <InternalLink version="v23.2" path="performance-best-practices-overview#dml-best-practices">DML statements</InternalLink> to fail while a <InternalLink version="v23.2" path="hash-sharded-indexes">hash-sharded index</InternalLink> was being created. The symptom of this bug was an error like `column "crdb_internal_val_shard_16" does not exist`. This bug was present since v23.1.0.
* Previously, CockroachDB could encounter the error `unable to encode table key: *tree.DTSQuery` when operating on columns with the internal `TSQuery` type in some contexts (e.g., when collecting <InternalLink version="v23.2" path="cost-based-optimizer#table-statistics">table statistics</InternalLink> or when performing a <InternalLink version="v23.2" path="select-clause#eliminate-duplicate-rows">`DISTINCT` operation</InternalLink> ). This is now fixed. The bug had been present since v23.1 when support for the internal `TSQuery` type was added.
* Previously, in some cases CockroachDB could incorrectly evaluate queries that scanned an <InternalLink version="v23.2" path="inverted-indexes">inverted index</InternalLink> and had a <InternalLink version="v23.2" path="select-clause">`WHERE` filter</InternalLink> in which two sides of the `AND` expression had "similar" expressions (e.g., `ARRAY['str1'] <@ col AND (ARRAY['str1'] && col OR...)` ); this is now fixed. The bug had been present since prior to v22.2.
* Fixed a bug that could cause <InternalLink version="v23.2" path="delete">`DELETE`</InternalLink> queries sent by the <InternalLink version="v23.2" path="row-level-ttl">row-level TTL</InternalLink> <InternalLink version="v23.2" path="show-schedules">job</InternalLink> to use a <InternalLink version="v23.2" path="indexes">secondary index</InternalLink> rather than the <InternalLink version="v23.2" path="primary-key">primary index</InternalLink> to find the rows to delete. This could lead to some `DELETE` operations taking a much longer time than they should. This bug was present since v22.2.0.
* Fixed an issue with missing data on SQL statistics, and consequently missing data on the <InternalLink version="v23.2" path="ui-overview#sql-activity">SQL Activity page</InternalLink>, by properly recalculating the value from the current and past hour on the top activity table.
* Internal queries issued by the <InternalLink version="v23.2" path="row-level-ttl">row-level TTL</InternalLink> <InternalLink version="v23.2" path="show-schedules">jobs</InternalLink> should now use optimal plans. The bug has been present since at least v22.2.
* Fixed a bug where a <InternalLink version="v23.2" path="change-data-capture-overview">changefeed</InternalLink> could omit events in rare cases, logging the error `cdc ux violation: detected timestamp... that is less or equal to the local frontier`. This could happen in the following scenario:
  1. A <InternalLink version="v23.2" path="create-and-configure-changefeeds#enable-rangefeeds">rangefeed</InternalLink> runs on a follower <InternalLink version="v23.2" path="architecture/glossary#cockroachdb-architecture-terms">replica</InternalLink> that lags significantly behind the <InternalLink version="v23.2" path="architecture/glossary#cockroachdb-architecture-terms">leaseholder</InternalLink>.
  2. A transaction commits and removes its <InternalLink version="v23.2" path="architecture/transaction-layer#transaction-records">transaction record</InternalLink> before its <InternalLink version="v23.2" path="architecture/transaction-layer#writing">intent</InternalLink> resolution is applied on the follower.
  3. The follower's <InternalLink version="v23.2" path="architecture/transaction-layer#closed-timestamps">closed timestamp</InternalLink> has advanced past the transaction commit timestamp.
  4. The rangefeed attempts to push the transaction to a new timestamp (at least 10 seconds after the transaction began).
  5. This may cause the rangefeed to prematurely emit a checkpoint before emitting writes at lower timestamps, which in turn may cause the <InternalLink version="v23.2" path="change-data-capture-overview">changefeed</InternalLink> to drop these events entirely, never emitting them.

### Contributors

This release includes 252 merged PRs by 60 authors.

## v23.2.0

Release Date: February 5, 2024

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

### Downloads

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

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

### Docker image

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

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

To download the Docker image:

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

### Feature highlights

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

* **Feature categories**
  * [Observability](#v23-2-0-observability)
  * [Migrations](#v23-2-0-migrations)
  * [Security and compliance](#v23-2-0-security-and-compliance)
  * [Disaster recovery](#v23-2-0-disaster-recovery)
  * [Deployment and operations](#v23-2-0-deployment-and-operations)
  * [SQL](#v23-2-0-sql)
* **Additional information**
  * [Backward-incompatible changes](#v23-2-0-backward-incompatible-changes)
  * [Deprecations](#v23-2-0-deprecations)
  * [Known limitations](#v23-2-0-known-limitations)
  * [Additional resources](#v23-2-0-additional-resources)

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

#### Observability

<table><tbody><tr><th class="center-align" colspan="1" rowspan="2">Feature</th><th class="center-align" colspan="4" rowspan="1">Availability</th></tr><tr><th colspan="1" rowspan="1">Ver.</th><th colspan="1" rowspan="1">Self-Hosted</th><th colspan="1" rowspan="1">Dedicated</th><th colspan="1" rowspan="1">Serverless</th></tr><tr><td>Identify network partitions using updated metrics in the Network page<br /><br />The <InternalLink path="ui-network-latency-page#no-connections">Network page</InternalLink> in the DB console has been updated with additional metrics that surface when the cluster is unstable due to network partitions.</td><td>23.2</td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Gray circle with horizontal white line (No)" src="https://upload.wikimedia.org/wikipedia/commons/b/b9/Eo_circle_grey_white_no-entry.svg" /></td></tr><tr><td>Troubleshoot 40001 errors from isolation conflicts in highly contended workloads<br /><br /><InternalLink path="ui-insights-page#failed-execution">Failed execution insights</InternalLink> have been enhanced to include additional information (conflicting transaction and location) into 40001 errors that stem from isolation conflicts in highly contentious workloads.</td><td>23.2</td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td></tr><tr><td>Identify and troubleshoot your most recent transactions and statements in the console<br /><br />Users can control the <InternalLink path="ui-statements-page#refresh">refresh of SQL activity Active Executions</InternalLink>. They can turn off automatic polling and instead manually refresh the page. The page will persist recent executions and their statistics and plans to allow users to troubleshoot their recent workload. Previously, the Active executions page would refresh automatically and cause potentially problematic executions to disappear from the page making it difficult to troubleshoot recent workloads.</td><td>23.2</td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td></tr><tr><td>Integrate SQL activity with Datadog for end-to-end observability<br /><br /><InternalLink path="log-sql-activity-to-datadog">SQL activity</InternalLink> such as statements and transactions can be emitted with fine granularity to Datadog as logs to allow end to end observability using both metrics and logs.</td><td>23.2</td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Gray circle with horizontal white line (No)" src="https://upload.wikimedia.org/wikipedia/commons/b/b9/Eo_circle_grey_white_no-entry.svg" /></td><td class="icon-center"><InlineImage alt="Gray circle with horizontal white line (No)" src="https://upload.wikimedia.org/wikipedia/commons/b/b9/Eo_circle_grey_white_no-entry.svg" /></td></tr><tr><td>Customize your own metric dashboard for CockroachDB serverless<br /><br />The CockroachDB Cloud console supports additional <InternalLink version="cockroachcloud" path="custom-metrics-chart-page">metrics that can be customized</InternalLink> in a single dashboard for CockroachDB Serverless.</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="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></tr></tbody></table>

#### Migrations

<table><tbody><tr><th class="center-align" colspan="1" rowspan="2">Feature</th><th class="center-align" colspan="4" rowspan="1">Availability</th></tr><tr><th colspan="1" rowspan="1">Ver.</th><th colspan="1" rowspan="1">Self-Hosted</th><th colspan="1" rowspan="1">Dedicated</th><th colspan="1" rowspan="1">Serverless</th></tr><tr><td>Migrate to CockroachDB using Oracle Golden Gate<br /><br />You can now use <InternalLink path="goldengate">Oracle Golden Gate</InternalLink> to stream data directly into CockroachDB. Migrate data from compatible databases onto CockroachDB using this connector.</td><td>All<sup>\*\*</sup></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td></tr><tr><td>Migrate to CockroachDB using Debezium<br /><br />You can now use <InternalLink path="debezium">Debezium</InternalLink> to stream data directly into CockroachDB. Migrate data from compatible databases onto CockroachDB using this connector.</td><td>All<sup>\*\*</sup></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td></tr></tbody></table>

#### Disaster recovery

<table><tbody><tr><th class="center-align" colspan="1" rowspan="2">Feature</th><th class="center-align" colspan="4" rowspan="1">Availability</th></tr><tr><th colspan="1" rowspan="1">Ver.</th><th colspan="1" rowspan="1">Self-Hosted</th><th colspan="1" rowspan="1">Dedicated</th><th colspan="1" rowspan="1">Serverless</th></tr><tr><td>Physical Cluster Replication is now available in Preview<br /><br /><InternalLink path="physical-cluster-replication-overview">Physical Cluster Replication</InternalLink> is an asynchonous replication feature that allows your cluster to recover from full-cluster failure with a low RPO and RTO. In 23.2, it is a Preview feature, requiring an <InternalLink path="licensing-faqs">Enterprise license</InternalLink>, and only available for self-hosted CockroachDB deployments.</td><td>23.2</td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Gray circle with horizontal white line (No)" src="https://upload.wikimedia.org/wikipedia/commons/b/b9/Eo_circle_grey_white_no-entry.svg" /></td><td class="icon-center"><InlineImage alt="Gray circle with horizontal white line (No)" src="https://upload.wikimedia.org/wikipedia/commons/b/b9/Eo_circle_grey_white_no-entry.svg" /></td></tr></tbody></table>

#### Security and compliance

<table><tbody><tr><th class="center-align" colspan="1" rowspan="2">Feature</th><th class="center-align" colspan="4" rowspan="1">Availability</th></tr><tr><th colspan="1" rowspan="1">Ver.</th><th colspan="1" rowspan="1">Self-Hosted</th><th colspan="1" rowspan="1">Dedicated</th><th colspan="1" rowspan="1">Serverless</th></tr><tr><td>Use Azure IAM to authenticate storage for changefeeds and backup/restore<br /><br />Use <InternalLink path="cloud-storage-authentication?filters=azure#azure-blob-storage-implicit-authentication">implicit authorization</InternalLink> to leverage existing azure credentials to authenticate with your Azure Blob Storage bucket.</td><td>23.2</td><td class="icon-center"><InlineImage alt="Gray circle with horizontal white line (No)" src="https://upload.wikimedia.org/wikipedia/commons/b/b9/Eo_circle_grey_white_no-entry.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Gray circle with horizontal white line (No)" src="https://upload.wikimedia.org/wikipedia/commons/b/b9/Eo_circle_grey_white_no-entry.svg" /></td></tr><tr><td>Folders UI in CockroachDB Cloud Orgs (Limited Access)<br /><br />CockroachDB Cloud organizations can now organize clusters using <InternalLink version="cockroachcloud" path="folders">folders</InternalLink> and can assign roles and permissions at the folder scope.</td><td>All<sup>\*</sup></td><td class="icon-center"><InlineImage alt="Gray circle with horizontal white line (No)" src="https://upload.wikimedia.org/wikipedia/commons/b/b9/Eo_circle_grey_white_no-entry.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td></tr></tbody></table>

#### Deployment and operations

<table><tbody><tr><th class="center-align" colspan="1" rowspan="2">Feature</th><th class="center-align" colspan="4" rowspan="1">Availability</th></tr><tr><th colspan="1" rowspan="1">Ver.</th><th colspan="1" rowspan="1">Self-Hosted</th><th colspan="1" rowspan="1">Dedicated</th><th colspan="1" rowspan="1">Serverless</th></tr><tr><td>General Availability for ARM binaries for Linux and Docker<br /><br />With this release, Linux and Docker binaries for the ARM 64-bit architecture are Generally Available (GA) for production workloads. ARM binaries for macOS are \*\*experimental\*\* and not yet qualified for production use. For more details, installation instructions, and limitations, refer to <InternalLink path="install-cockroachdb">Install CockroachDB on Linux</InternalLink>.</td><td>23.2</td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Gray circle with horizontal white line (No)" src="https://upload.wikimedia.org/wikipedia/commons/b/b9/Eo_circle_grey_white_no-entry.svg" /></td><td class="icon-center"><InlineImage alt="Gray circle with horizontal white line (No)" src="https://upload.wikimedia.org/wikipedia/commons/b/b9/Eo_circle_grey_white_no-entry.svg" /></td></tr></tbody></table>

#### SQL

<table><tbody><tr><th class="center-align" colspan="1" rowspan="2">Feature</th><th class="center-align" colspan="4" rowspan="1">Availability</th></tr><tr><th colspan="1" rowspan="1">Ver.</th><th colspan="1" rowspan="1">Self-Hosted</th><th colspan="1" rowspan="1">Dedicated</th><th colspan="1" rowspan="1">Serverless</th></tr><tr><td>Support Read Committed Isolation Level in public preview<br /><br /><InternalLink path="read-committed">Read Committed</InternalLink> is a weaker transaction isolation level than Serializable and is the default isolation level in databases such as PostgreSQL, Oracle, and SQL Server. Read Committed isolation allows writes to interleave without aborting transactions and prevents writes from blocking reads, thus minimizing query latency and retries caused by read/write contention.</td><td>23.2</td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td></tr><tr><td>Improved UDF capabilities<br /><br /><InternalLink path="user-defined-functions">UDFs</InternalLink> now support mutations (INSERT, UPDATE, UPSERT, and DELETE).</td><td>23.2</td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td></tr><tr><td>Support stored procedures and PL/pgSQL<br /><br />PL/pgSQL capabilities such as <InternalLink path="stored-procedures">stored procedures</InternalLink>, conditional logic, loops, and exception handling are now supported, increasing compatibility between CockroachDB and PostgreSQL. An <InternalLink path="licensing-faqs">Enterprise license</InternalLink> is required.</td><td>23.2</td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td>Delete operation admission control<br /><br />This feature reduces the potential impact of deleting a large number of rows—directly, as well as implicitly via row-level TTL—on query performance and system stability. For more information, see <InternalLink path="admission-control#operations-subject-to-admission-control">Operations subject to admission control</InternalLink>.</td><td>23.2</td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td></tr><tr><td>Replication admission control<br /><br />This mechanism automatically paces work for which longer exection times are acceptable (such as index backfills) at the speed of the slowest replica in order to maintain cluster stability and throughput. For more information, see <InternalLink path="admission-control#operations-subject-to-admission-control">Operations subject to admission control.</InternalLink></td><td>23.2</td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td></tr><tr><td>Column Level Encryption<br /><br />CockroachDB now supports <InternalLink path="column-level-encryption">column-level encryption</InternalLink> through a set of built-in functions. This feature allows you to encrypt one or more columns in every row of a database table, and can be useful for compliance scenarios such as adhering to PCI or GDPR. An <InternalLink path="licensing-faqs">Enterprise license</InternalLink> is required.</td><td>23.2</td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td></tr><tr><td>Revoke CREATE privilege by default for public schema<br /><br />Newer versions of PostgreSQL (15 and above) do not grant the <InternalLink path="security-reference/authorization#supported-privileges"><code>CREATE</code> privilege</InternalLink> by default on the public schema. This change can be disruptive but to preserve Postgres compatibility it is now guarded behind a cluster setting as an opt in feature. This is controlled using a cluster setting: <code>SET CLUSTER SETTING sql.auth.public\_schema\_create\_privilege.enabled=true;</code></td><td>23.2</td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td></tr><tr><td>Easily find Default Privileges for a Role<br /><br />This feature adds a simple syntax to see the <InternalLink path="show-default-privileges#show-default-privileges-for-a-grantee">default privileges for a particular grantee</InternalLink>. SHOW DEFAULT PRIVILEGES FOR GRANTEE root;</td><td>23.2</td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td><td class="icon-center"><InlineImage alt="Green checkmark (Yes)" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Eo_circle_green_checkmark.svg" /></td></tr></tbody></table>

##### Feature detail key

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

#### Backward-incompatible changes

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

* The pre-v23.1 output produced by `SHOW RANGES`, `crdb_internal.ranges`, and `crdb_internal.ranges_no_leases` was deprecated in v23.1 and is now replaced by default with output that's compatible with coalesced ranges (anges that pack multiple tables/indexes/partitions into individual ranges). See the <InternalLink version="v23.2" path="releases/v23.1">v23.1 release notes</InternalLink> for `SHOW RANGES` for more details.
* When a deployment is configured to use a time zone for log file output using formats `crdb-v1` or `crdb-v2`, new output log entries cannot be processed by nodes that have not been upgraded to v23.2.
* When customizing the <InternalLink version="v23.2" path="cockroach-sql">SQL shell's interactive prompt</InternalLink>, the special sequence `%M` now expands to the full host name instead of the combination of host name and port number. To include the port number explicitly, use `%>`. The special sequence `%m` now expands to the host name up to the first period.
* The <InternalLink version="v23.2" path="cockroach-debug-zip">`cockroach debug zip`</InternalLink> command stores data retrieved from SQL tables in the remote cluster using the TSV format by default.
* The <InternalLink version="v23.2" path="protect-changefeed-data">`changefeed.protect_timestamp.max_age` cluster setting</InternalLink> will only apply to newly created changefeeds in v23.2. For existing changefeeds, you can set the <InternalLink version="v23.2" path="create-changefeed">`protect_data_from_gc_on_pause`</InternalLink> option so that changefeeds do not experience infinite retries and accumulate protected change data. You can use the <InternalLink version="v23.2" path="alter-changefeed">`ALTER CHANGEFEED`</InternalLink> statement to add `protect_data_from_gc_on_pause` to existing changefeeds.
* The direct export of traces to Jaeger and the <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink> `trace.jaeger.agent` have been removed. The direct export functionality had been obsoleted since 2022; it stopped working altogether sometime in 2023 with the following error: `data does not fit within one UDP packet; size 65006, max 65000, spans NN`. Since 2022, Jaeger supports ingestion of traces using OTLP; and CockroachDB has supported emitting traces using OTLP since v22.1. Operators and developers who want to inspect traces are thus invited to use the OTLP protocol instead. The corresponding cluster setting is `trace.opentelemetry.collector`. For a successful deployment, an intermediate OTLP collector/forwarder should be configured. For an example of how to orchestrate the OpenTelemetry collector and Jaeger together using Docker Compose, or how to configure the `otel-collector`, see the more-detailed entry in [v23.2-alpha.3 backward-incompatible changes](#v23-2-0-alpha-3-backward-incompatible-changes).

#### Key Cluster Setting Changes

The following changes should be reviewed prior to upgrading. Default cluster settings will be used unless you have manually set a value for a setting. This can be confirmed by checking the `system.settings` table (`select * from system.settings`) to view the non-default settings.

* The new <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink> `sql.txn.read_committed_syntax.enabled`, controls whether transactions run under `READ COMMITTED` or `SERIALIZABLE` isolation. It defaults to `false`. When set to `true`, the following statements will configure transactions to run under `READ COMMITTED` isolation:
  * `BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED`
  * `SET TRANSACTION ISOLATION LEVEL READ COMMITTED`
  * `SET default_transaction_isolation = 'read committed'`
  * `SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL READ COMMITTED`

* The `sql.txn.read_committed_syntax.enabled` <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink> was renamed to <InternalLink version="v23.2" path="cluster-settings">`sql.txn.read_committed_isolation.enabled`</InternalLink>.

* Users who have the <InternalLink version="v23.2" path="grant">`CREATEROLE` role option</InternalLink> can now grant and revoke role membership in any non-admin role. This change also removes the <InternalLink version="v23.2" path="cluster-settings">`sql.auth.createrole_allows_grant_role_membership.enabled` cluster setting</InternalLink>, which was added in v23.1. In v23.2, the cluster setting is effectively always true.

* The <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink> `sql.metrics.statement_details.gateway_node.enabled` now defaults to false to reduce the number of rows generated in SQL Statistics pages.

* The <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink> `kv.rangefeed.enabled` no longer controls access to `RANGEFEED SQL` commands. Instead, use `feature.changefeed.enabled`.

* The <InternalLink version="v23.2" path="cluster-settings">cluster settings</InternalLink> related to <InternalLink version="v23.2" path="physical-cluster-replication-overview">physical cluster replication</InternalLink> have been renamed for consistency. For example, `bulkio.stream_ingestion.minimum_flush_interval` is now named `physical_replication.consumer.minimum_flush_interval`.

* CockroachDB now periodically dumps the state of its internal memory accounting system into the `heap_profiler/` directory when a heap profile is taken. To disable this behavior, set the `diagnostics.memory_monitoring_dumps.enabled` <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink> to `false`.

* Introduced the <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink> `kv.gc.sticky_hint.enabled` in v23.1.13. This setting helps expedite <InternalLink version="v23.2" path="architecture/storage-layer#garbage-collection">garbage collection</InternalLink> after range deletions. For example, when a SQL table or index is dropped. `kv.gc.sticky_hint.enabled` is enabled by default and deprecated in v23.2.

* CockroachDB now enables the pacing mechanism in rangefeed closed timestamp notifications, by setting the default `kv.rangefeed.closed_timestamp_smear_interval` cluster setting to 1ms. This makes rangefeed closed timestamp delivery more uniform and less spikey, which reduces its impact on the Go scheduler and, ultimately, foreground SQL latencies.

#### Deprecations

* The `protect_data_from_gc_on_pause` option has been deprecated. This option is no longer needed since changefeed jobs always protect data.
* The `cockroach connect` functionality has been deprecated.

#### Known limitations

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

#### Additional resources

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

## v23.2.0-rc.2

Release Date: January 9, 2024

### Downloads

<Danger>
  CockroachDB v23.2.0-rc.2 is a testing release. Testing releases are intended for testing and experimentation only, and are not qualified for production environments and not eligible for support or uptime SLA commitments.
</Danger>

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

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

### Docker image

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

Within the multi-platform image:

* The ARM image is in **Limited Access**.
* The Intel image is **Generally Available** for production use.

To download the Docker image:

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

### Bug fixes

* Fixed a bug introduced in v23.2 that caused internal errors and panics when certain queries ran with automatic <InternalLink version="v23.2" path="cluster-settings">index recommendation collection enabled</InternalLink>.
* Fixed a bug where mixed-version clusters with both v23.1 and v23.2 nodes could detect a false-positive replica inconsistency in <InternalLink version="v23.2" path="global-tables">`GLOBAL` tables</InternalLink>.

### Contributors

This release includes 12 merged PRs by 9 authors.

## v23.2.0-rc.1

Release Date: December 21, 2023

### Downloads

<Danger>
  CockroachDB v23.2.0-rc.1 is a testing release. Testing releases are intended for testing and experimentation only, and are not qualified for production environments and not eligible for support or uptime SLA commitments.
</Danger>

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

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

### Docker image

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

Within the multi-platform image:

* The ARM image is in **Limited Access**.
* The Intel image is **Generally Available** for production use.

To download the Docker image:

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

### Enterprise edition changes

* Added a SQL function `crdb_internal.fips_ready()` that can be used to verify the <InternalLink version="v23.2" path="fips">FIPS</InternalLink> readiness of the gateway node.
* <InternalLink version="v23.2" path="physical-cluster-replication-overview">Physical cluster replication</InternalLink> now retries for just over 3 minutes before failing.

### SQL language changes

* `CALL` statements can now be run with <InternalLink version="v23.2" path="explain">`EXPLAIN`</InternalLink>. The `EXPLAIN (OPT)` variant will show the body of the procedure, while other variants will show only the procedure name and arguments.
* Added support for <InternalLink version="v23.2" path="import-into">`IMPORT INTO`</InternalLink> a table that has columns typed as arrays of user-defined types (like <InternalLink version="v23.2" path="enum">`ENUM`</InternalLink> ). Tables that use multiple user-defined types with the same name but different schemas are still unsupported.
* The <InternalLink version="v23.2" path="select-for-update">`SELECT FOR UPDATE`</InternalLink> implementation used under Read Committed isolation (and under <InternalLink version="v23.2" path="demo-serializable">Serializable isolation</InternalLink> when <InternalLink version="v23.2" path="set-vars">`optimizer_use_lock_op_for_serializable`</InternalLink> is set to `true` ) now locks all <InternalLink version="v23.2" path="column-families">column families</InternalLink> instead of only the first column family.

### Command-line changes

* Added the command <InternalLink version="v23.2" path="cockroach-commands">`cockroach debug enterprise-check-fips`</InternalLink> that diagnoses errors in <InternalLink version="v23.2" path="fips">FIPS</InternalLink> deployments.
* Added the flag `--enterprise-require-fips-ready` that can be run with any <InternalLink version="v23.2" path="cockroach-commands">CockroachDB command</InternalLink> to prevent startup if certain prerequisites for <InternalLink version="v23.2" path="fips">FIPS</InternalLink> compliance are not met.

### DB Console changes

* Updated the **CPU Time** label to **SQL CPU Time** and added clarification to its tooltip on the <InternalLink version="v23.2" path="ui-overview#sql-activity">SQL Activity</InternalLink> and <InternalLink version="v23.2" path="ui-insights-page">Insights</InternalLink> pages.
* Removed the ID when it is `undefined` from the event description in the <InternalLink version="v23.2" path="ui-overview-dashboard#events-panel">Metrics Events Panel</InternalLink>.

### Bug fixes

* Fixed a bug that caused node crashes and panics when running <InternalLink version="v23.2" path="insert">`INSERT`</InternalLink> queries on <InternalLink version="v23.2" path="table-localities#regional-by-row-tables">`REGIONAL BY ROW`</InternalLink> tables with `UNIQUE` constraints or indexes. The bug is only present in version v23.2.0-beta.1.
* <InternalLink version="v23.2" path="update">`UPDATE`</InternalLink>, <InternalLink version="v23.2" path="upsert">`UPSERT`</InternalLink>, and <InternalLink version="v23.2" path="insert#on-conflict-clause">`INSERT ON CONFLICT`</InternalLink> queries are now disallowed under Read Committed isolation when the table contains a <InternalLink version="v23.2" path="check">`CHECK` constraint</InternalLink> involving a <InternalLink version="v23.2" path="column-families">column family</InternalLink> that is updated, and that `CHECK` constraint also involves a column family that is **not** updated, but **is** read. This restriction is a temporary fix to prevent possible violation of the `CHECK` constraint. However, it is important to note that this restriction will be lifted in the future.
* Fixed a bug where <InternalLink version="v23.2" path="show-schedules">scheduled jobs</InternalLink> using <InternalLink version="v23.2" path="use-cloud-storage">external storage providers</InternalLink> may fail shortly after node startup.
* Fixed the formatting for `plpgsql` routines, which could prevent the creation of a routine with loop labels and could prevent some expressions from being redacted correctly. The bug only existed in alpha and beta versions of v23.2.
* Fixed a bug that would cause a syntax error during redaction of a PL/pgSQL routine. The bug existed only in alpha and beta versions of the v23.2 release.
* Fixed a bug that would cause syntax errors when attempting to <InternalLink version="v23.2" path="restore#restore-a-database">restore a database</InternalLink> with [PL/pgSQL UDFs](https://www.postgresql.org/docs/current/sql-createfunction) or stored [procedures](https://www.postgresql.org/docs/16/sql-createprocedure). This bug only affected alpha and beta versions of v23.2.
* Fixed a bug in PL/pgSQL where altering the name of a <InternalLink version="v23.2" path="create-sequence">sequence</InternalLink> or UDT that was used in a [PL/pgSQL function](https://www.postgresql.org/docs/current/sql-createfunction) or [procedure](https://www.postgresql.org/docs/16/sql-createprocedure) could break them. This is only present in v23.2 alpha and beta releases.
* Fixed a bug where <InternalLink version="v23.2" path="select-for-update">`SELECT FOR UPDATE`</InternalLink> under Read Committed isolation on multi-column-family tables was not locking <InternalLink version="v23.2" path="column-families">column families</InternalLink> containing only key columns.
* Fixed a bug where all `AggHistogram`-powered metrics were not reporting quantiles properly in the <InternalLink version="v23.2" path="ui-overview">DB Console</InternalLink>. The quantiles in the DB Console are now reported correctly. This bug was only present in histograms in the <InternalLink version="v23.2" path="ui-overview-dashboard">DB Console metrics</InternalLink> features, and did **not** affect metrics reporting in the <InternalLink version="v23.2" path="monitor-cockroachdb-with-prometheus">Prometheus-compatible</InternalLink> endpoint, `/_status/vars`. The affected metrics were:
  * `changefeed.message_size_hist`
  * `changefeed.parallel_io_queue_nanos`
  * `changefeed.sink_batch_hist_nanos`
  * `changefeed.flush_hist_nanos`
  * `changefeed.commit_latency`
  * `changefeed.admit_latency`
  * `jobs.row_level_ttl.span_total_duration`
  * `jobs.row_level_ttl.select_duration`
  * `jobs.row_level_ttl.delete_duration`

### Contributors

This release includes 49 merged PRs by 26 authors.

## v23.2.0-beta.3

Release Date: December 13, 2023

### Downloads

<Danger>
  CockroachDB v23.2.0-beta.3 is a testing release. Testing releases are intended for testing and experimentation only, and are not qualified for production environments and not eligible for support or uptime SLA commitments.
</Danger>

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

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

### Docker image

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

Within the multi-platform image:

* The ARM image is **Experimental** and not yet qualified for production use and not eligible for support or uptime SLA commitments.
* The Intel image is **Generally Available** for production use.

To download the Docker image:

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

### General changes

* Updated Go version to 1.21.3.

### SQL language changes

* Added the `sql.ttl.default_select_rate_limit` <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink> and the `ttl_select_rate_limit` <InternalLink version="v23.2" path="with-storage-parameter#table-parameters">table storage parameter</InternalLink> to set the TTL select rate limit. This sets the number of records per table per second per node that can be selected by the TTL job.

### Bug fixes

* Fixed a bug that could result in an incorrect `too few columns` error for queries that use `ANY <array>` syntax with a subquery.
* Fixed a bug that could cause `too few columns` / `too many columns` errors for queries that used `IN` or `NOT IN` with a non-trivial right operand, such as a subquery (rather than a constant tuple).
* Fixed a bug where <InternalLink version="v23.2" path="create-index">`CREATE INDEX`</InternalLink> with expressions could fail on materialized <InternalLink version="v23.2" path="views">views</InternalLink> when the declarative schema changer was used.
* Fixed a bug that could cause PL/pgSQL routines with `SELECT INTO` syntax to return early. This bug existed only in pre-release versions v23.2.0-beta.1 and v23.2.0-beta.2.
* Fixed a bug that could cause side effects to happen out of order for PL/pgSQL routines in rare cases. This bug existed only in v23.2 alpha versions and previous v23.2 beta versions.
* Previously, in rare cases, CockroachDB could incorrectly evaluate queries with lookup <InternalLink version="v23.2" path="joins">joins</InternalLink> where `equality cols are key` when performing lookups on multiple ranges. This could either manifest as a stuck query or result in incorrect output. The bug was introduced in v22.2 and is now fixed.
* Fixed a durability bug in Raft log storage that was caused by incorrect syncing of filesystem metadata. It was possible to lose writes of a particular kind ( `AddSSTable` ) used by (e.g.) `RESTORE`. This loss was possible only under power-off or OS crash conditions. As a result, CockroachDB could enter a crash loop on restart. In the worst case of a coordinated power-off/crash across multiple nodes, this could lead to an unrecoverable loss of quorum.
* Fixed a bug where large jobs running with <InternalLink version="v23.2" path="take-locality-restricted-backups">`execution locality`</InternalLink> option could result in the <InternalLink version="v23.2" path="architecture/sql-layer">gateway node</InternalLink> being assigned most of the work causing performance degradation and cluster instability.
* Fixed a bug that prevented naming UDT parameters when <InternalLink version="v23.2" path="drop-function">dropping a user-defined function</InternalLink> (or procedure). This bug has existed since v23.1.
* Locking tables (e.g., with <InternalLink version="v23.2" path="select-for-update">SELECT... FOR UPDATE</InternalLink> ) on the null-extended side of outer joins (e.g., the right side of a `LEFT JOIN` ) is now disallowed and returns an error. This improves compatibility with PostgreSQL and prevents ambiguity in locking semantics. This bug has existed since locking with `FOR UPDATE` was introduced.

### Contributors

This release includes 26 merged PRs by 20 authors.

## v23.2.0-beta.2

Release Date: December 5, 2023

### Downloads

<Danger>
  CockroachDB v23.2.0-beta.2 is a testing release. Testing releases are intended for testing and experimentation only, and are not qualified for production environments and not eligible for support or uptime SLA commitments.
</Danger>

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

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

### Docker image

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

Within the multi-platform image:

* The ARM image is **Experimental** and not yet qualified for production use and not eligible for support or uptime SLA commitments.
* The Intel image is **Generally Available** for production use.

To download the Docker image:

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

### General changes

* CockroachDB now periodically dumps the state of its internal memory accounting system into the `heap_profiler/` directory when a heap profile is taken. To disable this behavior, set the `diagnostics.memory_monitoring_dumps.enabled` [cluster setting](https://cockroachlabs.com/docs/v23.2/cluster-settings) to `false`.
* Multi-level compactions have been disabled to investigate possible performance issues with foreground throughput and latency.

### Enterprise Edition changes

* When using [Physical Cluster Replication](https://cockroachlabs.com/docs/v23.2/physical-cluster-replication-overview), you can now [initiate a cutover](https://cockroachlabs.com/docs/v23.2/cutover-replication) as of `LATEST` before the initial scan completes.
* Sensitive information such as `api_secret`, `sasl_password`, `client_cert`, and `ca_cert`, is now redacted in output from commands `SHOW CHANGEFEED JOB`, `SHOW CHANGEFEED JOBS`, and [`SHOW JOBS`](https://cockroachlabs.com/docs/v23.2/show-jobs).
* The `physical_replication.frontier_lag_nanos` metric and the related DB Console graph have been removed because they sometimes display incorrect information. For [alerting](https://cockroachlabs.com/docs/v23.2/physical-cluster-replication-monitoring#prometheus), it is recommended to use the new metric `physical_replication.replicated_time_seconds` metric instead.
* Fixed a bug in [physical cluster replication](https://cockroachlabs.com/docs/v23.2/physical-cluster-replication-overview) where replicating from a primary cluster that is on a version prior to v23.2.x to a standby cluster running on v23.2.x could fail because of an undefined builtin function in the primary cluster.

### DB Console changes

* In the <InternalLink version="v23.2" path="ui-cdc-dashboard">Changeeds dashboard</InternalLink>, the **Max Checkpoint Latency** chart title now refers to "Lag" rather than "Latency", to better reflect the intention of the underlying metric, which measures how recently the changefeed was last checkpointed.
* Times on the X-Axis of bar charts in **Statement details** pages are now correctly formatted in UTC.
* In the **SQL Activity** **Transaction Details** page, you can now view a transaction fingerprint ID across multiple applications by specifying the application name in the `appNames` URL `GET` parameter using a comma-separated encoded string of transaction fingerprint IDs.

### Bug fixes

* Fixed a bug that prevented the **Now** button on time range selectors in the DB Console from working as expected when a custom time period was previously selected.
* Fixed a bug that prevented the **SQL Activity** page from showing internal statements when the `sql.stats.response.show_internal.enabled` [cluster setting](https://cockroachlabs.com/docs/v23.2/cluster-settings) was set to `true`.
* Fixed a bug where an active replication report update could get stuck in a retry loop on clusters with over 10000 ranges. This could prevent a node from shutting down cleanly.
* Fixed a bug introduced in v23.1 that could cause an internal error when using the text format (as opposed to binary) when <InternalLink version="v23.2" path="sql-grammar">preparing a statement</InternalLink> with a user-defined composite type.
* Fixed a bug that could cause a replica to be stuck processing in a queue's replica set when the replica had recently been removed from purgatory for processing but was destroyed, or the replica's ID changed before being processed. These replicas are now removed from the queue when they are encountered.
* Fixed a bug that could cause a <InternalLink version="v23.2" path="sql-grammar">prepared statement</InternalLink> to fail if it references both an `enum` and a table that has undergone a schema change.
* Fixed a bug that could cause cluster version finalization to contend with descriptor lease renewals on large clusters. Descriptor lease renewals previously had a higher priority than cluster upgrade finalization. Finalization now always has a higher priority than descriptor lease renewal.
* Fixed a bug that prevented [backups](https://cockroachlabs.com/docs/v23.2/backup) from distributing work evenly across all replicas, including followers, regardless of leaseholder placement.
* Fixed a bug introduced in v23.2.0-beta.1 that could cause a single composite-typed variable to be incorrectly handled as the target of a PostgreSQL `INTO` clause.
* Fixed a bug that could cause a `BEGIN` statement log to record incorrect information in the `Age` field, which could also cause them to appear erroneously in slow-query logs.

### Performance improvements

* Query planning time has been reduced significantly for some queries in which many tables are joined.

### Contributors

This release includes 91 merged PRs by 35 authors.

## v23.2.0-beta.1

Release Date: November 27, 2023

### Downloads

<Danger>
  CockroachDB v23.2.0-beta.1 is a testing release. Testing releases are intended for testing and experimentation only, and are not qualified for production environments and not eligible for support or uptime SLA commitments.
</Danger>

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

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

### Docker image

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

Within the multi-platform image:

* The ARM image is **Experimental** and not yet qualified for production use and not eligible for support or uptime SLA commitments.
* The Intel image is **Generally Available** for production use.

To download the Docker image:

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

### SQL language changes

* <InternalLink version="v23.2" path="copy">`COPY`</InternalLink> commands now use the <InternalLink version="v23.2" path="admission-control#set-quality-of-service-level-for-a-session">`background` quality-of-service level</InternalLink> by default, which makes `COPY` commands subject to <InternalLink version="v23.2" path="admission-control">admission control</InternalLink>. The new session variable `copy_transaction_quality_of_service` controls the quality-of-service level for `COPY` commands. Previously, `COPY` used the same level as other commands, determined by the `default_transaction_quality_of_service` session variable, which is set to `regular` by default. `regular` is not subject to admission control.

### DB Console changes

* The <InternalLink version="v23.2" path="ui-overview">Overview page</InternalLink> now correctly renders the background color for the email signup, which fixes an issue where it was difficult to read the text.
* Fixed a bug where selecting the internal application name prefix `$ internal` from the **Application Name** dropdown on the <InternalLink version="v23.2" path="ui-statements-page">**SQL Activity Statements** page</InternalLink> was not showing internal queries. The filtering logic will now show if there are statements with the `$ internal` application name prefix.

### Bug fixes

* Fixed a bug where an empty <InternalLink version="v23.2" path="architecture/overview">range</InternalLink> corresponding to a <InternalLink version="v23.2" path="drop-table">`DROP TABLE`</InternalLink> did not respect system-level span configurations such as <InternalLink version="v23.2" path="architecture/storage-layer#protected-timestamps">protected timestamps</InternalLink>, which potentially caused reads above the protected timestamp to fail.
* Fixed error handling for `GetFiles` so that it does not cause a nil pointer dereference.

### Contributors

This release includes 33 merged PRs by 21 authors.

## v23.2.0-alpha.7

Release Date: November 20, 2023

### Downloads

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

* The ARM image is **Experimental** and not yet qualified for production use and not eligible for support or uptime SLA commitments.
* The Intel image is **Generally Available** for production use.

To download the Docker image:

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

### SQL language changes

* Previously, if <InternalLink version="v23.2" path="session-variables">session variable `use_declarative_schema_changer`</InternalLink> was set to `off`, then <InternalLink version="v23.2" path="alter-table#alter-column">`ALTER TABLE... ALTER COLUMN... SET NOT NULL`</InternalLink> was run on a column which contained a NULL value, an error with code `23514` ( `check_violation` ) would be returned. Now in this scenario the error returned will have code 23502 ( `not_null_violation` ) to match [PostgreSQL](https://www.postgresql.org/docs/8.4/errcodes-appendix).
* The `sql.txn.read_committed_syntax.enabled` <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink> was renamed to <InternalLink version="v23.2" path="cluster-settings">`sql.txn.read_committed_isolation.enabled`</InternalLink>.

### Command-line changes

* The `cockroach connect` functionality has been deprecated.

### DB Console changes

* Previously, the forward arrow button on the <InternalLink version="v23.2" path="ui-statements-page#time-interval">time selector</InternalLink> would not move the time window forward if the current end time was less than "Now() - time window". For example, with a 10 minute time window, it was not possible to move forward if current end time is less that "Now() - 10 minutes". This caused the forward arrow button to become disabled even though there was more data to display. Now this scenario is handled by the forward arrow button selecting the latest available time window (similar to the **Now** button).

### Bug fixes

* Removed duplication of metrics names on <InternalLink version="v23.2" path="ui-overview#metrics">DB Console Metrics</InternalLink> charts' tooltips.
* Fixed a bug that could cause <InternalLink version="v23.2" path="alter-database#add-region">ALTER DATABASE... ADD/DROP REGION</InternalLink> to hang if <InternalLink version="v23.2" path="cockroach-start#locality">node localities</InternalLink> were changed after regions were added.
* A bug in the <InternalLink version="v23.2" path="configure-logs">log configuration</InternalLink> code prevented users from setting the <InternalLink version="v23.2" path="configure-logs#datetime-field-for-json-format">`datetime-format` and `datetime-timezone` log format options</InternalLink> (set via the `format-options` structure) within their log configuration. Specifically, when users tried to use these options in `file-defaults` with any <InternalLink version="v23.2" path="log-formats#format-json">`json`</InternalLink> type log format, the log configuration was previously unable to be parsed due to validation errors. This was because the `file-defaults.format-options` were propagated to the `sinks.stderr.format-options`. `sinks.stderr` only supports a format of <InternalLink version="v23.2" path="log-formats#format-crdb-v2-tty">`crdb-v2-tty`</InternalLink>. Therefore, the incorrectly propagated `format-options`, which are only supported by the `json` log format, were identified as not being supported when validating `sinks.stderr`. This bug is now fixed and the `file-defaults.format-options` are only propagated to `sinks.stderr.format-options` if both of these conditions are true: 1. `file-defaults.format` is one of <InternalLink version="v23.2" path="log-formats#format-crdb-v2">`crdb-v2`</InternalLink> or `crdb-v2-tty`. 2. `sinks.stderr.format-options` are not explicitly set in the log configuration.
* Previously, when executing queries with <InternalLink version="v23.2" path="indexes#storing-columns">index joins</InternalLink> or <InternalLink version="v23.2" path="joins#lookup-joins">lookup joins</InternalLink> or both when the ordering needs to be maintained, CockroachDB in some cases would get into a pathological behavior which would lead to increased query latency, possibly by one or two orders of magnitude. This bug was introduced in v22.2 and is now fixed.
* Previously, the <InternalLink version="v23.2" path="show-statistics">SHOW STATISTICS command</InternalLink> incorrectly required the user to have the admin role. Now, it correctly only requires the user to have any <InternalLink version="v23.2" path="security-reference/authorization#privileges">privilege</InternalLink> on the table being inspected.
* Fixed a bug that could cause a <InternalLink version="v23.2" path="cost-based-optimizer">query plan</InternalLink> to skip scanning rows from the local region when performing a <InternalLink version="v23.2" path="joins#lookup-joins">lookup join</InternalLink> with a <InternalLink version="v23.2" path="regional-tables#regional-by-row-tables">`REGIONAL BY ROW` table</InternalLink> as the input.

### Performance improvements

* This change prevents failed requests from being issued on follower nodes that are <InternalLink version="v23.2" path="node-shutdown">draining, decommissioning</InternalLink> or unhealthy which prevents latency spikes if those nodes later go offline.

### Contributors

This release includes 95 merged PRs by 33 authors.

## v23.2.0-alpha.6

Release Date: November 7, 2023

### Downloads

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

* The ARM image is **Experimental** and not yet qualified for production use and not eligible for support or uptime SLA commitments.
* The Intel image is **Generally Available** for production use.

To download the Docker image:

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

### General changes

* The CockroachDB Docker image is now based on [Red Hat's ubi9/ubi-minimal image](https://catalog.redhat.com/software/containers/ubi9/ubi-minimal/615bd9b4075b022acc111bf5?architecture=amd64\&image=652fc5a903899c8ddcf105be) instead of the ubi8/ubi-minimal image.

### SQL language changes

* Added the built-in <InternalLink version="v23.2" path="functions-and-operators">function</InternalLink> `jsonb_array_to_string_array` that converts <InternalLink version="v23.2" path="jsonb">`JSONB`</InternalLink> array to <InternalLink version="v23.2" path="string">`STRING`</InternalLink> array.
* The built-in <InternalLink version="v23.2" path="functions-and-operators">function</InternalLink> `jsonb_array_to_string_array` can now return <InternalLink version="v23.2" path="null-handling">`NULL`</InternalLink> objects.

### Operational changes

* Introduced the <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink> `kv.gc.sticky_hint.enabled` that helps expediting <InternalLink version="v23.2" path="architecture/storage-layer#garbage-collection">garbage collection</InternalLink> after range deletions. For example, when a SQL table or index is dropped. `kv.gc.sticky_hint.enabled` is enabled by default in v23.2. The setting has been deprecated in v23.2.
* Introduced a new <InternalLink version="v23.2" path="set-vars">environment variable</InternalLink> that allows an operator to configure the <InternalLink version="v23.2" path="architecture/storage-layer#compaction">compaction</InternalLink> concurrency.
* <InternalLink version="v23.2" path="cockroach-debug-zip">Debug zip</InternalLink> will now collect the active traces of all running or reverting traceable jobs. This includes <InternalLink version="v23.2" path="restore">restores</InternalLink>, <InternalLink version="v23.2" path="import">imports</InternalLink>, <InternalLink version="v23.2" path="backup">backups</InternalLink>, and <InternalLink version="v23.2" path="physical-cluster-replication-overview">physical cluster replication</InternalLink>.

### Cluster virtualization

* The <InternalLink version="v23.2" path="security-reference/authorization#supported-privileges">privilege</InternalLink> that controls access to `CREATE VIRTUAL CLUSTER` and other virtual cluster management syntax is now called `MANAGEVIRTUALCLUSTER`.

### Bug fixes

* Fixed a bug that could prevent <InternalLink version="v23.2" path="restore">`RESTORE`</InternalLink> from working if it was performed during a cluster upgrade.
* Fixed a bug where the opclass for a <InternalLink version="v23.2" path="trigram-indexes">trigram index</InternalLink> is not shown if CockroachDB creates a trigram index and later displays it via <InternalLink version="v23.2" path="show-create">`SHOW CREATE TABLE`</InternalLink>.
* Fixed a bug where CockroachDB could incorrectly evaluate <InternalLink version="v23.2" path="joins#lookup-joins">lookup</InternalLink> and index <InternalLink version="v23.2" path="joins">joins</InternalLink> into tables with at least three <InternalLink version="v23.2" path="column-families">column families</InternalLink>. This would result in either the `non-nullable column with no value` internal error, or the query would return incorrect results. This bug was introduced in v22.2.
* Fixed a bug where <InternalLink version="v23.2" path="alter-table#alter-primary-key">`ALTER PRIMARY KEY`</InternalLink> would incorrectly disable <InternalLink version="v23.2" path="schema-design-indexes">secondary indexes</InternalLink> while new secondary indexes were being backfilled when using the <InternalLink version="v23.2" path="online-schema-changes">declarative schema changer</InternalLink>.
* Fixed a bug where the `unique_constraint_catalog` and `unique_constraint_schema` columns in <InternalLink version="v23.2" path="information-schema#referential_constraints">`information_schema.referential_constraints`</InternalLink> could be incorrect for cross schema or cross database references.
* Fixed a bug in a method that was used by some of the <InternalLink version="v23.2" path="show-jobs">jobs</InternalLink> observability infrastructure. This method could be triggered if a file was overwritten with a different chunking strategy.
* Fixed a bug where the result of <InternalLink version="v23.2" path="show-create">`SHOW CREATE TABLE`</InternalLink> for a table that had a <InternalLink version="v23.2" path="collate">collated string column</InternalLink> with a default expression was incorrect because the statement could not be parsed.
* Fixed the SQL activity update job to: avoid conflicts on update, reduce the amount of data cached to only what the overview page requires, and fix the correctness of the top queries.
* Fixed a bug that could prevent <InternalLink version="v23.2" path="physical-cluster-replication-overview">physical cluster replication</InternalLink> from advancing in the face of some range deletion operations.
* Fixed a bug where <InternalLink version="v23.2" path="alter-type">`ALTER TYPE`</InternalLink> could get stuck if <InternalLink version="v23.2" path="drop-type">`DROP TYPE`</InternalLink> was executed concurrently.
* Fixed a bug that could cause internal errors or panics while attempting to forecast <InternalLink version="v23.2" path="show-statistics">statistics</InternalLink> on a numeric column.
* Rolled back deletes no longer cause a discrepancy between computed statistics and the actual stored values.

### Performance improvements

* Addressed a performance regression that can happen when the declarative <InternalLink version="v23.2" path="online-schema-changes">schema changer</InternalLink> is used to create an index with a concurrent workload.

### Contributors

This release includes 117 merged PRs by 49 authors.

## v23.2.0-alpha.5

Release Date: October 30, 2023

### Downloads

<Danger>
  CockroachDB v23.2.0-alpha.5 is a testing release. Testing releases are intended for testing and experimentation only, and are not qualified for production environments and not eligible for support or uptime SLA commitments.
</Danger>

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

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

### Docker image

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

Within the multi-platform image:

* The ARM image is **Experimental** and not yet qualified for production use and not eligible for support or uptime SLA commitments.
* The Intel image is **Generally Available** for production use.

To download the Docker image:

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

### SQL language changes

* Added support for the special `OTHERS` condition in PL/pgSQL exception blocks, which allows matching any error code apart from `query_canceled` and `assert_failure`. Note that Class 40 errors ( `40000`, `40001`, `40003`, `40002`, and `40P01` ) cannot be caught either. This is tracked in.

### Bug fixes

* Previously, queries with the <InternalLink version="v23.2" path="st_union">`ST_Union`</InternalLink> aggregate function could produce incorrect results in some cases due to the query optimizer performing invalid optimizations. This is now fixed. This bug had been present since the `ST_Union` function was introduced in v20.2.0.

### Contributors

This release includes 27 merged PRs by 17 authors.

## v23.2.0-alpha.4

Release Date: October 23, 2023

### Downloads

<Danger>
  CockroachDB v23.2.0-alpha.4 is a testing release. Testing releases are intended for testing and experimentation only, and are not qualified for production environments and not eligible for support or uptime SLA commitments.
</Danger>

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

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

### Docker image

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

Within the multi-platform image:

* The ARM image is **Experimental** and not yet qualified for production use and not eligible for support or uptime SLA commitments.
* The Intel image is **Generally Available** for production use.

To download the Docker image:

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

### General changes

* Updated the `licenses/CCT.txt` file to reflect the latest [Cockroachdb Community License](https://www.cockroachlabs.com/cockroachdb-community-license).

### Enterprise edition changes

* Renamed <InternalLink version="v23.2" path="cluster-settings">cluster settings</InternalLink> related to <InternalLink version="v23.2" path="physical-cluster-replication-overview">physical cluster replication</InternalLink> for consistency. For example, `bulkio.stream_ingestion.minimum_flush_interval` is now `physical_replication.consumer.minimum_flush_interval`.

### SQL language changes

* <InternalLink version="v23.2" path="show-schedules">`SHOW SCHEDULES`</InternalLink> has two columns that surface the schedule options. These columns have been renamed to align with the documented option names: `on_previous_running` and `on_execution_failure`.
* Added support for the [PLpgSQL `CLOSE` statement](https://www.postgresql.org/docs/current/plpgsql-cursors#PLPGSQL-CURSOR-USING-CLOSE), which allows a PLpgSQL routine to close a cursor with the name specified by a cursor variable.
* When a <InternalLink version="v23.2" path="restore">`RESTORE`</InternalLink> with `remove_regions` is performed, the restore job will now fail if the object contains a <InternalLink version="v23.2" path="table-localities#regional-by-row-tables">`REGIONAL BY ROW`</InternalLink> table.
* It is now possible to open a <InternalLink version="v23.2" path="cursors">cursor</InternalLink> within a PLpgSQL function or procedure with an exception block. If an error occurs, creation of the cursor is rolled back before control reaches the exception handler.
* If a <InternalLink version="v23.2" path="create-schedule-for-backup">scheduled backup</InternalLink> resumes on a new cluster (e.g., after <InternalLink path="cutover-replication">physical cluster replication cutover</InternalLink> or a cluster restore), the backup schedule will pause. The user may <InternalLink version="v23.2" path="resume-schedules">resume the schedule</InternalLink> without changing it, but should take special care to ensure no other schedule is backing up to the same <InternalLink version="v23.2" path="take-full-and-incremental-backups#backup-collections">collection</InternalLink>. The user may also want to cancel the paused schedule and start a new one.
* Added support for PLpgSQL [`FETCH`](https://www.postgresql.org/docs/current/plpgsql-cursors#PLPGSQL-CURSOR-USING-FETCH) and [`MOVE`](https://www.postgresql.org/docs/current/plpgsql-cursors#PLPGSQL-CURSOR-USING-MOVE) statements. Similar to SQL `FETCH` / `MOVE` statements, commands that would seek the <InternalLink version="v23.2" path="cursors">cursor</InternalLink> backward will fail. In addition, expressions other than constant integers are not yet supported for the `count` option.
* Added support for the [`REFCURSOR`](https://www.postgresql.org/docs/current/plpgsql-cursors#PLPGSQL-CURSOR-DECLARATIONS) data type. `REFCURSOR` is a special string type that is used to handle cursors. PLpgSQL cursor declarations are required to use a variable of type `REFCURSOR`, and the name of a cursor can be passed to and from a PLpgSQL function or procedure.
* Added two changes to <InternalLink version="v23.2" path="select-for-update">`FOR UPDATE`</InternalLink>:
  * Multiple `FOR UPDATE` clauses on fully parenthesized queries are now disallowed. For example, the following statements are now disallowed:

    ```sql theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
    (SELECT 1 FOR UPDATE) FOR UPDATE;
    SELECT * FROM ((SELECT 1 FOR UPDATE) FOR UPDATE) AS x;
    ```

    Whereas statements like the following are still allowed:

    ```sql theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
    SELECT * FROM (SELECT 1 FOR UPDATE) AS x FOR UPDATE;
    SELECT (SELECT 1 FOR UPDATE) FOR UPDATE;
    ```

    This does not match PostgreSQL, which allows all of these, but does match CockroachDB behavior for `ORDER BY` and `LIMIT`.
  * `FOR UPDATE` is now allowed on statements with `VALUES` in the `FROM` list, or as a subquery. For example, the following statements are now allowed:

    ```sql theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
    SELECT (VALUES (1)) FOR UPDATE;
    SELECT * FROM (VALUES (1)) AS x FOR UPDATE;
    ```

    Using `FOR UPDATE` directly on `VALUES` is still disallowed:

    ```sql theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
    VALUES (1) FOR UPDATE; (VALUES (1)) FOR UPDATE;
    INSERT INTO t VALUES (1) FOR UPDATE;
    ```

    This matches PostgreSQL.
* `FOR UPDATE` is now permitted on some queries that were previously disallowed. Queries that use the following operations are now allowed to have `FOR UPDATE OF` as long as the prohibited operation is in a subquery not locked by the `FOR UPDATE OF`:
  * `UNION`
  * `INTERSECT`
  * `EXCEPT`
  * `DISTINCT`
  * `GROUP BY`
  * `HAVING`
  * Aggregations
  * <InternalLink version="v23.2" path="window-functions">Window functions</InternalLink>

    For example, the following query is now allowed because the subquery using the prohibited operations is not affected by the `FOR UPDATE OF`:

    ```sql theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
    SELECT * FROM t, (SELECT DISTINCT 0, 0 UNION SELECT a, count(*) FROM t GROUP BY a HAVING a > 0) AS u FOR UPDATE OF t;
    ```

    This matches PostgreSQL.
* Identifiers after numeric constants that are not separated by whitespace are now disallowed to match PostgreSQL 15 behavior.
* Added the new column `contention_type` to the <InternalLink version="v23.2" path="crdb-internal">`crdb_internal.transaction_contention_events`</InternalLink> table. This column indicates the type of <InternalLink version="v23.2" path="performance-best-practices-overview#transaction-contention">transaction contention</InternalLink> encountered. Current values are `LOCK_WAIT` and `SERIALIZATION_CONFLICT`.
* Changed the error message: `statement error cannot execute FOR UPDATE in a read-only transaction` to `statement error cannot execute SELECT FOR UPDATE in a read-only transaction` to match PostgreSQL.
* Added a new <InternalLink version="v23.2" path="set-vars">session variable</InternalLink> `optimizer_use_lock_op_for_serializable`, which when set enables a new implementation of `SELECT FOR UPDATE`. This new implementation of `SELECT FOR UPDATE` acquires row locks **after** any joins and filtering, and always acquires row locks on the primary index of the table being locked. This more closely matches <InternalLink version="v23.2" path="select-for-update">`SELECT FOR UPDATE`</InternalLink> behavior in PostgreSQL, but at the cost of more round trips from gateway node to replica leaseholder. Under read-committed isolation (and other isolation levels weaker than serializable), CockroachDB will always use this new implementation of `SELECT FOR UPDATE` regardless of the value of `optimizer_use_lock_op_for_serializable` to ensure correctness.

### Operational changes

* Added a new <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink> `server.http.base_path` that controls the redirection of the browser after successful login with <InternalLink version="v23.2" path="sso-db-console">OIDC SSO</InternalLink>. It is unlikely that this setting would need adjustment. However, it is helpful in cases where CockroachDB is running behind a load balancer or proxy that serves CockroachDB under a subpath, such as `https:// <hostname>/crdb/`. In those cases, it is necessary for the browser to redirect to `/ crdb` after login instead of `/`, which has always been the hard-coded default.

### Cluster virtualization

* The following settings can now only be set from the system virtual cluster:
  * All the `physical_replication.*` settings
  * `server.rangelog.ttl`
  * `timeseries.storage.*`

* The <InternalLink version="v23.2" path="cluster-settings">cluster settings</InternalLink> `cluster.organization` and `enterprise.license` can now only be set via the system virtual cluster. Attempting to set them from any other virtual cluster results in an error.

* A new flag `--internal-rpc-port-range` allows operators to specify the port range used by virtual clusters for node-to-node communication. Users implementing <InternalLink version="v23.2" path="physical-cluster-replication-overview">physical cluster replication</InternalLink> or cluster virtualization public preview features should use this flag if they require the `cockroach` processes to only communicate using ports in a known port range.

* Two guardrails are available to system operators to help with users upgrading from a deployment without cluster virtualization enabled to a deployment using cluster virtualization. This is intended to help in cases where the user is not connected to the correct SQL interface to perform certain configuration operations. There are two guardrails included:
  * The `sql.restrict_system_interface.enabled` cluster setting encourages users to use a virtual cluster for their application workload. When set, certain common operations that end users may execute to set up an application workload are disallowed, such as running DDL statements or modifying an application level cluster setting. Users will receive an error similar to:

    ```text theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
    ERROR: blocked DDL from the system interface SQLSTATE: 42501 HINT: Object creation blocked via sql.restrict_system_interface.enabled to prevent likely user errors. Try running the DDL from a virtual cluster instead.
    ```
  * The `sql.error_tip_system_interface.enabled` cluster setting enhances errors reported when a user mistakenly uses a storage-level SQL feature within any virtual cluster besides the system virtual cluster. For example, when attempting to modify a cluster setting that was previously at the application level, an error like the following occurs:

    ```text theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
    NOTICE: ignoring attempt to modify "kv.rangefeed.enabled"
    HINT: The setting is only modifiable by the operator.
    Normally, an error would be reported, but the operation is silently accepted here as configured by "sql.error_tip_system_interface.enabled".
    ```
  * For a cluster setting that was always system-level, an error like the following occurs:

    ```text theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
    ERROR: cannot modify storage-level setting from virtual cluster
    SQLSTATE: 42501
    HINT: Connect to the system interface and modify the cluster setting from there.
    ```

* The predefined config profiles related to cluster virtualization now automatically set the new <InternalLink version="v23.2" path="cluster-settings">cluster settings</InternalLink> `sql.restrict_system_interface.enabled` and `sql.error_tip_system_interface.enabled`.

* The hidden `--secondary-tenant-port-offset` option has been removed. Users who were previously using this option should use `--internal-rpc-port-range` instead.

* Added support for automatic finalization of a virtual cluster's version upgrade. A new setting `cluster.auto_upgrade.enabled` was added to enable and disable automatic cluster version upgrade (finalization). It will be used in automatic upgrade of both the storage cluster and its virtual clusters.

### Command-line changes

* <InternalLink version="v23.2" path="cockroach-debug-zip">`cockroach debug zip`</InternalLink> has an additional flag that is default off `include-running-job-traces` that will enable collecting the in-flight traces of traceable jobs, such as <InternalLink version="v23.2" path="backup">backup</InternalLink>, <InternalLink version="v23.2" path="restore">restore</InternalLink>, <InternalLink version="v23.2" path="import-into">import</InternalLink>, <InternalLink version="v23.2" path="physical-cluster-replication-overview">physical cluster replication</InternalLink> and dump them in a `jobs/` subdirectory in the zip.

### DB Console changes

* The <InternalLink version="v23.2" path="ui-jobs-page">**Jobs** table</InternalLink> will now correctly display timestamps for creation, last modified, and the completed time fields.
* The <InternalLink version="v23.2" path="ui-insights-page">transaction insight details</InternalLink> will show the following details when CockroachDB has information on a transaction execution with a `40001` error code and it has captured the conflicting transaction meta details (only available if the transaction had not yet committed at the time of execution). A section called `Failed Execution` will appear when this information is available and it will contain:
  * Blocking transaction execution ID
  * Blocking transaction fingerprint ID
  * Conflict location
  * Database, table, and index names
* Added progressive loading functionality to the <InternalLink version="v23.2" path="ui-databases-page">Databases page</InternalLink>.

### Bug fixes

* Fixed a bug in <InternalLink version="v23.2" path="physical-cluster-replication-overview">physical cluster replication</InternalLink> where the primary cluster would not be able to take <InternalLink version="v23.2" path="take-full-and-incremental-backups">backups</InternalLink> when a primary cluster node was unavailable.
* Fixed a bug in <InternalLink version="v23.2" path="ui-insights-page">transaction insight details</InternalLink> where it was possible to see the contention details of other transactions. Now, CockroachDB will only surface contention details for the current transaction.
* <InternalLink version="v23.2" path="configure-replication-zones">Voter constraints</InternalLink> will now be satisfied by promoting existing non-voters. Previously, there was a bug where voter constraints were never satisfied due to all existing replicas being considered necessary to satisfy a replica constraint.
* Fixed a bug where `indoption` inside `pg_index` was not properly encoded causing clients to be unable to decode it as `int2vector`.
* This patch fixes an issue where the <InternalLink version="v23.2" path="cost-based-optimizer">optimizer</InternalLink> fails to honor the `statement_timeout` session setting when generating constrained index scans for queries with large `IN` lists or `= ANY` predicates on multiple index key columns, which may lead to an out of memory condition on the node.
* This patch fixes a performance issue in join queries with a `LIMIT` clause, where the <InternalLink version="v23.2" path="cost-based-optimizer">optimizer</InternalLink> may fail to push a `WHERE` clause filter into a join due to how the `LIMIT` operation is internally rewritten. This causes a full scan of the table referenced in the filter.
* Fixed a bug that caused internal errors during query optimization in rare cases. The bug has been present since version v2.1.11, but it is more likely to occur in version v21.2.0 and later, though it is still rare. The bug only presents when a query contains `min` and `max` <InternalLink version="v23.2" path="functions-and-operators#aggregate-functions">aggregate functions</InternalLink>.

### Performance improvements

* This patch adds support for insert fast-path uniqueness checks on <InternalLink version="v23.2" path="table-localities#regional-by-row-tables">`REGIONAL BY ROW`</InternalLink> tables where the source is a `VALUES` clause with a single row. This results in a reduction in latency for single-row inserts to `REGIONAL BY ROW` tables and hash-sharded `REGIONAL BY ROW` tables with unique indexes.

### Contributors

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

* Finn Mattis (first-time contributor)
* craig

## v23.2.0-alpha.3

Release Date: October 10, 2023

### Downloads

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

* The ARM image is **Experimental** and not yet qualified for production use and not eligible for support or uptime SLA commitments.
* The Intel image is **Generally Available** for production use.

To download the Docker image:

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

### Backward-incompatible changes

* The direct export of traces to Jaeger and the <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink> `trace.jaeger.agent` have been removed. The direct export functionality had been obsoleted since 2022; it stopped working altogether sometime in 2023 with the following error: `data does not fit within one UDP packet; size 65006, max 65000, spans NN`. Since 2022, Jaeger supports ingestion of traces using OTLP; and CockroachDB has supported emitting traces using OTLP since v22.1. Operators and developers who want to inspect traces are thus invited to use the OTLP protocol instead. The corresponding cluster setting is `trace.opentelemetry.collector`. For a successful deployment, an intermediate OTLP collector/forwarder should be configured.
  * You can orchestrate the OpenTeletry collector and Jaeger together using Docker Compose by adapting the following example:

    ```yaml theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
    otel-collector:
      image: otel/opentelemetry-collector-contrib
      container_name: otel-collector
      volumes:
        - ./otel-collector-config.yaml:/etc/otelcol-contrib/config.yaml
      ports:
        - 1888:1888 # pprof extension
        - 8888:8888 # Prometheus metrics exposed by the collector
        - 8889:8889 # Prometheus exporter metrics
        - 13133:13133 # health_check extension
        - 4317:4317 # OTLP gRPC receiver
        - 4318:4318 # OTLP http receiver
        - 55679:55679 # zpages extension

    jaeger:
      image: jaegertracing/all-in-one
      container_name: jaeger
      ports:
        - "16685:16685"
        - "16686:16686"
        - "14250:14250"
        - "14268:14268"
        - "14269:14269"
        - "6831:6831/udp"
      environment:
        - COLLECTOR_ZIPKIN_HTTP_PORT=9411
        - COLLECTOR_OTLP_ENABLED=true
    ```
  * To configure the `otel-collector`, you can adapt this example:

    ```yaml theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
    receivers:
      otlp: # the OTLP receiver the app is sending traces to
        protocols:
          grpc:
          http:

    processors:
      batch:

    exporters:
      otlp/jaeger: # Jaeger supports OTLP directly
        endpoint: http://jaeger:4317
        tls:
          insecure: true

    service:
      pipelines:
        traces/dev:
          receivers: [otlp]
          processors: [batch]
          exporters: [otlp/jaeger]
    ```

To use this configuration, unset Jaeger via `SET CLUSTER SETTING trace.jaeger.agent=''`, and then set the OTLP collector using `SET CLUSTER SETTING trace.opentelemetry.collector='localhost:4317'`.

### Enterprise edition changes

* <InternalLink version="v23.2" path="create-and-configure-changefeeds">Changefeeds</InternalLink> now support the `confluent-cloud://` sink scheme. This scheme can be used to connect to Kafka hosted on Confluent Cloud. The scheme functions identically to Kafka, but it has it's own authentication parameters. Namely, it requires `api_key` and `api_secret` to be passed as parameters in the sink URI. They must be URL encoded. An example URI is: `'confluent-cloud://pkc-lzvrd.us-west4.gcp.confluent.cloud:9092?api_key=<KEY>&api_secret=<SECRET>'`. By default, the options `tls_enabled=true`, `sasl_handshake=true`, `sasl_enabled=true`, and `sasl_mechanism=PLAIN` are applied. For more information about authenticating with Confluent Cloud, see [https://docs.confluent.io/platform/current/security/security\_tutorial.html#overview](https://docs.confluent.io/platform/current/security/security_tutorial.html#overview). The sink scheme still supports non-authentication parameters such as `topic_name` and `topic_prefix`. It also supports the standard Kafka changefeed options (ex. `kafka_sink_config` ).

### SQL language changes

* The <InternalLink version="v23.2" path="restore">`RESTORE`</InternalLink> option `strip_localities`, which was added in, has been renamed to `remove_regions`. This option will lead to a "region-less restore"; it is used to strip the locality and region information from a backup when there are mismatched cluster regions between the backup's cluster and the target cluster. Note that a restore using this option will fail if the backup's cluster had <InternalLink version="v23.2" path="multiregion-overview">`REGIONAL BY ROW`</InternalLink> table localities. This is because the `RESTORE` statement has a contract that all tables must be available to serve writes once it finishes.
* Added initial support for executing the PLpgSQL `OPEN` statement, which allows a PLpgSQL routine to create a <InternalLink version="v23.2" path="cursors">cursor</InternalLink>. Currently, opening bound or unnamed cursors is not supported. In addition, `OPEN` statements cannot be used in a routine with an exception block.
* Added support for declaring bound <InternalLink version="v23.2" path="cursors">cursors</InternalLink>, which associate a query with a cursor in a PLpgSQL routine before it is opened.
* The `SELECT FOR SHARE` and `SELECT FOR KEY SHARE` statements previously did not acquire any locks. Users issuing these statements would expect them to acquire shared locks (multiple readers allowed, but no writers). This patch switches over the behavior to acquire such read locks when the user has selected the <InternalLink version="v23.2" path="transactions#isolation-levels">`READ COMMITTED` isolation level</InternalLink>. For serializable transactions, we default to the previous behavior, unless the `enable_shared_locking_for_serializable` <InternalLink version="v23.2" path="set-vars">session setting</InternalLink> is set to `true`.
* When a PLpgSQL exception handler catches an error, it now rolls back any changes to database state that occurred within the block. Exception blocks are not currently permitted to catch <InternalLink version="v23.2" path="common-errors#restart-transaction">`40001`</InternalLink> and <InternalLink version="v23.2" path="common-errors#result-is-ambiguous">`40003`</InternalLink> errors.
* Added support for unnamed PLpgSQL <InternalLink version="v23.2" path="cursors">cursors</InternalLink>, which generate a unique name when no cursor name was specified.
* Fixed a bug that caused CockroachDB to stop collecting new statistics about <InternalLink version="v23.2" path="ui-statements-page#statement-fingerprint-page">Statement fingerprints</InternalLink> and <InternalLink version="v23.2" path="ui-transactions-page">Transaction fingerprints</InternalLink>.
* Make the `max_event_frequency` <InternalLink version="v23.2" path="metrics">metric</InternalLink> visible for public documentation and usage. This is the maximum event frequency at which we sample executions for telemetry.

### Operational changes

* Added the following <InternalLink version="v23.2" path="metrics">metrics</InternalLink> for <InternalLink version="v23.2" path="architecture/replication-layer#raft">Raft</InternalLink> proposals and reproposals: `raft.commands.proposed`, `raft.commands.reproposed.unchanged`, and `raft.commands.reproposed.new-lai`.
* Removed the <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink> `spanconfig.store.enabled` and the ability to use the `COCKROACH_DISABLE_SPAN_CONFIGS` environment variable.
* Renamed the <InternalLink version="v23.2" path="metrics">metric</InternalLink> `fluent.sink.conn.errors` to `log.fluent.sink.conn.errors`. The addition of the `log.` prefix was to better group together logging-related metrics. The behavior and purpose of the metric remains unchanged.
* Set the Metric Type metadata on the <InternalLink version="v23.2" path="metrics">metric</InternalLink> `log.fluent.sink.conn.errors`. Previously, the Metric Type was incorrectly left unset. Note that this is an update to the metric's metadata; the behavior and purpose of the metric remains unchanged.
* Added a new <InternalLink version="v23.2" path="metrics">metric</InternalLink> `log.buffered.messages.dropped`. Buffered network logging sinks have a `max-buffer-size` attribute, which determines, in bytes, how many log messages can be buffered. Any `fluent-server` or `http-server` log sink that makes use of a `buffering` attribute in its configuration (enabled by default) qualifies as a buffered network logging sink. If this buffer becomes full, and an additional log message is sent to the buffered log sink, the buffer would exceed this `max-buffer-size`. Therefore, the buffered log sink drops older messages in the buffer to handle, in order to make room for the new. `log.buffered.messages.dropped` counts the number of messages dropped from the buffer. Note that the count is shared across all buffered logging sinks.
* Added the <InternalLink version="v23.2" path="metrics">metric</InternalLink> `log.messages.count`. This metric measures the count of messages logged on the node since startup. Note that this does not measure the fan-out of single log messages to the various configured <InternalLink version="v23.2" path="configure-logs#set-logging-levels">logging sinks</InternalLink>. This metric can be helpful in understanding log rates and volumes.
* Added the `file-based-headers` field found in the `http-defaults` section of the log config, which accepts 'key-filepath' pairs. This allows values found at filepaths to be updated without restarting the cluster by sending `SIGHUP` to notify that values need to be refreshed.
* Added the <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink> `kv.snapshot.ingest_as_write_threshold`, which controls the size threshold below which snapshots are converted to regular writes. It defaults to `100KiB`.

### Cluster virtualization

* The name of the virtual cluster that the SQL client is connected to can now be inspected via the SQL <InternalLink version="v23.2" path="set-vars">session variable</InternalLink> `virtual_cluster_name`.

### Command-line changes

* The following <InternalLink version="v23.2" path="cluster-settings">cluster settings</InternalLink> have been renamed; the previous names remain available for backward-compatibility.

  <table><thead><tr><th>Previous name</th><th>New Name</th></tr></thead><tbody><tr><td><code>server.shutdown.drain\_wait</code></td><td><code>server.shutdown.initial\_wait</code></td></tr><tr><td><code>server.shutdown.lease\_transfer\_wait</code></td><td><code>server.shutdown.lease\_transfer\_iteration.timeout</code></td></tr><tr><td><code>server.shutdown.query\_wait</code></td><td><code>server.shutdown.transactions.timeout</code></td></tr><tr><td><code>server.shutdown.connection\_wait</code></td><td><code>server.shutdown.connections.timeout</code></td></tr><tr><td><code>server.shutdown.jobs\_wait</code></td><td><code>server.shutdown.jobs.timeout</code></td></tr></tbody></table>

### DB Console changes

* Fixed an error on the <InternalLink version="v23.2" path="ui-overview#sql-activity">SQL Activity page</InternalLink> when there was a workload, and then the workload stopped so that no queries ran against the database in the last hour.
* On the <InternalLink version="v23.2" path="ui-overview#metrics">Metrics page</InternalLink>, now the information about which metric is used to create each chart is available on the chart's tooltip.

### Bug fixes

* Fixed the error message that is returned when the user attempts to drop an <InternalLink version="v23.2" path="enum">`ENUM`</InternalLink> value that is used at least twice in an <InternalLink version="v23.2" path="array">`ARRAY`</InternalLink> column.
* Added a check for values before using `mean` on the <InternalLink version="v23.2" path="ui-statements-page">Plan Details page</InternalLink>, fixing a crash.
* Fixed the metric name for `Schema Registry Registrations` on the <InternalLink version="v23.2" path="ui-overview#metrics">Metrics page</InternalLink>.
* Fixed a panic that could occur if a query used a <InternalLink version="v23.2" path="string">string</InternalLink> larger than 2^31-1 bytes. This was triggered by attempting to <InternalLink version="v23.2" path="import">import</InternalLink> a 2.7 GiB CSV file.
* Fixed a bug where `atttypmod` in `pg_attribute` was not populated for <InternalLink version="v23.2" path="timestamp">`TIMESTAMP`</InternalLink> / <InternalLink version="v23.2" path="interval">`INTERVAL`</InternalLink> types, which meant that ORMs could not know the precision of these types properly.

### Contributors

This release includes 130 merged PRs by 43 authors.

## v23.2.0-alpha.2

Release Date: October 2, 2023

### Downloads

<Danger>
  CockroachDB v23.2.0-alpha.2 is a testing release. Testing releases are intended for testing and experimentation only, and are not qualified for production environments and not eligible for support or uptime SLA commitments.
</Danger>

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

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

### Docker image

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

Within the multi-platform image:

* The ARM image is **Experimental** and not yet qualified for production use and not eligible for support or uptime SLA commitments.
* The Intel image is **Generally Available** for production use.

To download the Docker image:

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

### Security updates

* The `SIGHUP` signal now clears the cached expiration times for <InternalLink version="v23.2" path="cockroach-cert#how-security-certificates-work">client certificates</InternalLink> that are reported by the `security.certificate.expiration.client` metric.

### General changes

* Increased the maximum permitted value of the `COCKROACH_RPC_INITIAL_WINDOW_SIZE` environment variable to 64MB. In conjunction with tuning your operating system's maximum TCP window size, this can increase the throughput that Raft replication can sustain over high latency network links.

### SQL language changes

* The `discard` <InternalLink version="v23.2" path="logging-overview">log message</InternalLink> is now limited to once per minute by default. The message now includes both the number of transactions and the number of statements that were discarded.
* The <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink> `kv.rangefeed.enabled` no longer controls access to `RANGEFEED SQL` commands. Instead, use `feature.changefeed.enabled`.
* SQL commands that were previously limited to the `admin` <InternalLink version="v23.2" path="security-reference/authorization#supported-privileges">system privilege</InternalLink> can now be used by users with the `VIEWCLUSTERMETADATA` or `REPAIRCLUSTERMETADATA` system privilege, depending on whether the operation is read-only or modifies state.
* Added a `last_error` column to the `cluster_execution_insights`, `node_execution_insights`, `cluster_txn_execution_insights`, and `node_txn_execution_insights` tables. These columns contain error messages for failed executions.
* The new backup option `updates_cluster_monitoring_metrics` tracks the timestamp of the last backup failure due to a KMS error. This option is disabled by default.
* The new restore option `strip_localities` optionally strips the locality information from a backup when restoring to a cluster with different regions than the source cluster.

Restoring a cluster or database that contains regional-by-row tables, or restoring a regional-by-row table, requires you to modify the database:

* To restore a cluster with regional-by-row tables, you must drop the zone config of the database, then drop the type `d.public.crdb_internal_region`.
* To restore a database that contains regional-by-row tables, or to restore a regional-by-row table, you must drop the type `d.public.crdb_internal_region`.
* You must alter the `crdb_region` column to set the default region for newly-written rows.
* You must discard the previous zone config, which contains outdated information, such as that related to the partitions and constraints after the restore. This column specifies each row's home region and is a prefix to the table's primary key. Stripping localities does not modify this column, because it would require the entire table to be written.

This change is part of a larger effort, and this feature is subject to change.

\#110606

* Added a check to disallow queries that use predicate locking, since explicit uniqueness checks are not yet supported under Read Committed isolation. `INSERT`, `UPDATE`, and `UPSERT` statements against some `REGIONAL BY ROW` tables will fail under Read Committed isolation with the following error:

```shell theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
  unimplemented: explicit unique checks are not yet supported under read committed isolation SQLSTATE: 0A000
```

For more details about which `REGIONAL BY ROW` tables are affected, refer to Issue #110873.

\#110879 - The `created` field produced by `SHOW STATISTICS` has been updated from `TIMESTAMP` to `TIMESTAMPTZ`. Statistic creation times are now displayed in the session time zone if it is set.

### Operational changes

* Removed the node-level `engine.stalls` timeseries metric. This metric has not been updated for several releases.

### DB Console changes

* The legend is now always displayed on charts in DB Console Metrics pages. In addition, when you select an item from the legend that represents a single line in the chart, that line is selected in the chart.
* When collecting a <InternalLink version="v23.2" path="cockroach-statement-diag">statement bundle</InternalLink>, you can now filter by a specific <InternalLink version="v23.2" path="ui-statements-page#explain-plans">plan gist</InternalLink> or collect diagnostics for all plan gists.
* <InternalLink version="v23.2" path="ui-statements-page">Statement</InternalLink> and <InternalLink version="v23.2" path="ui-transactions-page">Transaction</InternalLink> detail pages now include an **Error Message** row. Users with the `VIEWACTIVITY` <InternalLink version="v23.2" path="security-reference/authorization#supported-privileges">system privilege</InternalLink> can view the full error message, and users with the `VIEWACTIVTYREDACTED` system privilege can view the redacted error message. If a user has both privileges, `VIEWACTIVITYTREDACTED` \` takes precedence.
* A new dashboard in the <InternalLink version="v23.2" path="ui-sql-dashboard">SQL Dashboard page</InternalLink> tracks how often distributed queries with errors were rerun using the "rerun as local" mechanism, as well as how often those reruns failed. the number of times distributed queries that resulted in errors were rerun as local as well as when those reruns failed. The "rerun as local" mechanism is new in v23.2 and is enabled by default. For more information, contact your Cockroach Labs account representative.
* The DB Console [Insights page](https://cockroachlabs.com/docs/v23.2/ui-insights-page) now shows the error message when a transaction fails at the `COMMIT` stage.
* The <InternalLink version="v23.2" path="ui-overload-dashboard">Overload Dashboard page</InternalLink> now includes the following graphs to monitor <InternalLink version="v23.2" path="admission-control">admission control</InternalLink>:
  * **IO Overload** - Charts normalized metric based on admission control target thresholds. Replaces **LSM L0 Health** graph which used raw metrics.
  * **KV Admission Slots Exhausted** - Replaces **KV Admission Slots** graph.
  * **Flow Tokens Wait Time: 75th percentile** - Use to monitor the new replication admission control feature.
  * **Requests Waiting For Flow Tokens** - Use to monitor the new replication admission control feature.
  * **Blocked Replication Streams** - Use to monitor the new replication admission control feature.

### Bug fixes

* Fixed a race condition in the <InternalLink version="v23.2" path="architecture/replication-layer">Replica lifecycle</InternalLink> that could result in a failed SQL request when the request could have been successfully retried.
* Fixed a bug where a <InternalLink version="v23.2" path="create-table">`CREATE TABLE`</InternalLink> command with an `IDENTITY` column did not properly propagate the type of the column into the sequence.
* Fixed a panic when decoding a gist in a foreign database that does not contain a table referred to by the gist.
* A synthetic `dropped` column have been added to the `pg_attribute` table. This column tracks the attribution numbers for dropped attributions, to work around issues with ORMs that are not designed to handle gaps in attribution numbering in the `pg_attribute` table.
* Fixed a rare internal error in the `unnest` and `information_schema._pg_expandarray` <InternalLink version="v23.2" path="functions-and-operators">built-in functions</InternalLink> where passed string arguments could be cast to an array.
* External connection URLs now accept the scheme `azure-blob` for connections to Azure Blob Storage and the scheme `azure-kms` for connections to Azure KMS. For backward compatibility, schemes `azure` and `azure-storage` schemes continue to work for connections to Azure Blob Storage.
* Fixed a bug where vectorized `COPY FROM` could produce a plan with more than one RenderNodes, when only zero or one should be allowed. This could result in multiple render nodes in a table with a hash sharded primary key.
* Fixed a bug in DB Console's Statement Diagnostic page that could cause the page to crash if the response was larger than 50 KB. The page now keeps pulling results until no maximum size errors are encountered.
* Fixed a bug where DB Console instances proxied at different subpaths that use OIDC pointed to an incorrect relative OIDC login path.
* Fixed a bug where changing the setting `server.telemetry.hot_ranges_stats.interval` had no effect.

### Performance improvements

* Fixed a performance bug that could result in rewriting a 128-MB file each time a store file is created, renamed, or removed when <InternalLink version="v23.2" path="security-reference/encryption#encryption-at-rest">Encryption At Rest</InternalLink> is enabled on a large store with many small files.
* Improved compaction heuristics to mitigate read amplification growth and admission control throttling when processing large deletes, such as during node decommissioning, replica rebalancing, or when dropping tables.

### Contributors

This release includes 157 merged PRs by 54 authors.

## v23.2.0-alpha.1

Release Date: September 26, 2023

### Downloads

<Danger>
  CockroachDB v23.2.0-alpha.1 is a testing release. Testing releases are intended for testing and experimentation only, and are not qualified for production environments and not eligible for support or uptime SLA commitments.
</Danger>

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

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

### Docker image

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

Within the multi-platform image:

* The ARM image is **Experimental** and not yet qualified for production use and not eligible for support or uptime SLA commitments.
* The Intel image is **Generally Available** for production use.

To download the Docker image:

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

### Backward-incompatible changes

* The pre-v23.1 output produced by `SHOW RANGES`, `crdb_internal.ranges`, and `crdb_internal.ranges_no_leases` was deprecated in 23.1 and is now replaced by default with output that's compatible with coalesced ranges (i.e., ranges that pack multiple tables/indexes/partitions into individual ranges). See the <InternalLink version="v23.2" path="releases/v23.1">v23.1 release notes</InternalLink> for `SHOW RANGES` for more details.
* When a deployment is configured to use a time zone (new feature) for log file output using formats `crdb-v1` or `crdb-v2`, it becomes impossible to process the new output log files using the <InternalLink version="v23.2" path="cockroach-debug-merge-logs">`cockroach debug merge-logs` command</InternalLink> from a previous version. The newest `cockroach debug merge-logs` code must be used instead.
* When customizing the <InternalLink version="v23.2" path="cockroach-sql">SQL shell's interactive prompt</InternalLink>, the special sequence `%M` now expands to the full host name instead of the combination of host name and port number. To include the port number explicitly, use `%>`. The special sequence `%m` now expands to the host name up to the first period.
* The <InternalLink version="v23.2" path="cockroach-debug-zip">`cockroach debug zip`</InternalLink> command stores data retrieved from SQL tables in the remote cluster using the TSV format by default.
* The <InternalLink version="v23.2" path="protect-changefeed-data">`changefeed.protect_timestamp.max_age` cluster setting</InternalLink> will only apply to newly created changefeeds in v23.2. For existing changefeeds, you can set the <InternalLink version="v23.2" path="create-changefeed">`protect_data_from_gc_on_pause`</InternalLink> option so that changefeeds do not experience infinite retries and accumulate protected change data. You can use the <InternalLink version="v23.2" path="alter-changefeed">`ALTER CHANGEFEED`</InternalLink> statement to add `protect_data_from_gc_on_pause` to existing changefeeds.
* The `changefeed.new_pubsub_sink_enabled` cluster setting is now enabled by default, which improves changefeed throughput. With this setting enabled, the top-level fields in JSON-encoded messages are capitalized: `{Key:..., Value:..., Topic:...}`. After upgrading to CockroachDB v23.2, you may need to reconfigure downstream systems to parse the new message format. If you disable this setting, changefeeds emitting to Pub/Sub sinks with JSON-encoded events have the top-level message fields all lowercase: `{key:..., value:..., topic:...}`.

### Security updates

* Users who have the <InternalLink version="v23.2" path="grant">`CREATEROLE` role option</InternalLink> can now grant and revoke role membership in any non-admin role. This change also removes the <InternalLink version="v23.2" path="cluster-settings">`sql.auth.createrole_allows_grant_role_membership.enabled` cluster setting</InternalLink>, which was added in v23.1. In v23.2, the cluster setting is effectively always true.

### General changes

* You can now set <InternalLink version="v23.2" path="start-a-local-cluster-in-docker">Docker</InternalLink> command arguments using the `COCKROACH_ARGS` environment variable.
* Extended the <InternalLink path="cluster/v2">`/api/v2/nodes` API endpoint</InternalLink> with a `storeMetrics` field.
* CockroachDB would previously use separate <InternalLink version="v23.2" path="architecture/distribution-layer">ranges</InternalLink> for each table, index, or partition. This is no longer true. It is possible now to have multiple tables, indexes, and partitions get packed into the same range. For users with many of these schema objects, this will reduce the total range count in their clusters. This is especially true if individual tables, indexes, or partitions are smaller than the default configured maximum range size (controlled using <InternalLink version="v23.2" path="zone-config-extensions">zone configs</InternalLink>, specifically the `range_max_bytes` parameter). We made this change to improve scalability with respect to the number of schema objects, since the underlying range count is now no longer a bottleneck. Users upgrading from v22.2, when finalizing their upgrade, may observe a round of range merges and snapshot transfers (to power said range merges) as a result of this change. If users want to opt-out of this optimization, they can configure the following cluster setting: `SET CLUSTER SETTING spanconfig.storage_coalesce_adjacent.enabled = false;`
* <InternalLink version="v23.2" path="export">`EXPORT INTO PARQUET`</InternalLink> will now use a new internal implementation for writing Parquet files using the Parquet spec version 2.6. There should be no significant impact to the structure of files being written. There is one minor change: all columns written to Parquet files will be nullable (i.e., the Parquet repetition type is `OPTIONAL` ).
* <InternalLink version="v23.2" path="spatial-data-overview">Spatial libraries</InternalLink> for CockroachDB now rely on GEOS 3.11 instead of GEOS 3.8.
* CockroachDB no longer distributes `libgeos` for the experimental <InternalLink version="v23.2" path="install-cockroachdb">Windows build</InternalLink>. Users can instead install GEOS directly from the source: [https://libgeos.org/usage/download/](https://libgeos.org/usage/download).
* The Formatting of byte figures in Pebble logs has been improved. Tools that parse these logs might need updating.
* CockroachDB now has a new <InternalLink version="v23.2" path="cockroach-commands">CLI option</InternalLink>, `--experimental-shared-storage` to rebalance data faster from node to node.
* Fixed a bug where, internally, if we print a 0 decimal with a very low exponent we use excessive memory. This is not possible when using the <InternalLink version="v23.2" path="decimal">DECIMAL</InternalLink> type, but may be possible when using `crdb_internal` functions.

### Enterprise edition changes

* The <InternalLink version="v23.2" path="advanced-changefeed-configuration">`kafka_sink_config`</InternalLink> `Compression` and `RequiredAcks` options are now case-insensitive.
* <InternalLink version="v23.2" path="change-data-capture-overview">Changefeeds</InternalLink> emit significantly fewer duplicate messages during node and cluster restarts.
* CockroachDB has a new `changefeed.protect_timestamp.max_age` setting (by default 4 days), which will cancel running changefeed jobs if they fail to make forward progress for a period of time. This setting is used if the explicit `gc_protect_expires_after` option is not set. In addition, the `protect_data_from_gc_on_pause` option has been deprecated. This option is no longer needed since changefeed jobs always protect data.
* Changefeeds now officially support the Parquet format using specification version 2.6. It is only usable with the <InternalLink version="v23.2" path="changefeed-sinks#cloud-storage-sink">cloud storage sink</InternalLink>. The syntax to use Parquet is: `CREATE CHANGEFEED FOR foo INTO... WITH format=parquet`. It supports all standard changefeed options and features including CDC transformations, except it does not support the `topic_in_value` option.
* Changefeeds that create files over an HTTP connection may now be specified using `INTO 'file-https://'` to disambiguate with `webhook-https`.
* The `pgcrypto` <InternalLink version="v23.2" path="functions-and-operators">functions</InternalLink> `encrypt`, `encrypt_iv`, `decrypt`, and `decrypt_iv` are now implemented. These functions require an enterprise license on a CCL distribution.
* CockroachDB now paces the rangefeed goroutine creation rate to improve scheduler latency. This improves observability by adding an additional column in the `crdb_internal.active_rangefeed` table to indicate if the range is currently in catchup scan mode.

### SQL language changes

* Fixed the helper message on <InternalLink version="v23.2" path="update">UPDATE</InternalLink> SQL statements to include the optional FROM cause.

* CockroachDB now supports enabling forward <InternalLink version="v23.2" path="indexes">indexes</InternalLink> and ordering on <InternalLink version="v23.2" path="jsonb">JSON</InternalLink> values.

* Added a new column `visibility` to `crdb_internal.table_indexes` and `information_schema.statistics`. Also added a new column `visibility` to the output of following SQL statements:

  ```sql theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
  SHOW INDEX FROM (table_name);
  ```

  ```sql theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
  SHOW INDEXES FROM (table_name);
  ```

  ```sql theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
  SHOW KEYS FROM (table_name);
  ```

  ```sql theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
  SHOW INDEX FROM DATABASE (database_name);
  ```

  ```sql theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
  SHOW INDEXES FROM DATABASE (database_name);
  ```

  ```sql theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
  SHOW KEYS FROM DATABASE (database_name);
  ```

  This new column contains a floating point number specifying the level of visibility of the index, from 0 (not visible) to 1 (fully visible). If the value is between 0 and 1, the index will be visible to the corresponding fraction of queries.

* `ALTER INDEX... VISIBILITY...` is now supported. It can change an index visibility to any visibility between 0.0 and 1.0. Visibility 0.0 means the index is not visible to the <InternalLink version="v23.2" path="cost-based-optimizer">optimizer</InternalLink>, while visibility 1.0 means the index is fully visible. A value in the range between 0.0 and 1.0 means the index will be visible to the corresponding fraction of queries.

* CockroachDB now has support for non-aggregate expressions involving columns outside of the grouping columns when the grouping columns include all key columns of a unique index and those key columns are not nullable.

* CockroachDB now supports <InternalLink version="v23.2" path="create-index">`CREATE INDEX... VISIBILITY...`</InternalLink> and <InternalLink version="v23.2" path="create-table">`CREATE TABLE... (... INDEX (...) VISIBILITY...)`</InternalLink>. This allows users to set the index visibility to any visibility between 0.0 and 1.0. Visibility 0.0 means the index is not visible to the optimizer, while visibility 1.0 means the index is fully visible. A value in the range between 0.0 and 1.0 means the index will be visible to the corresponding fraction of queries.

* <InternalLink version="v23.2" path="row-level-ttl">Row level TTL</InternalLink> now supports `DESC` order primary key columns.

* Added the `ST_BdPolyFromText` <InternalLink version="v23.2" path="functions-and-operators#spatial-functions">built-in</InternalLink> which copies the behavior of the PostGIS function. Takes in only a multilinestring geometry and returns a polygon. It will return an error if anything other than a multilinestring is input, and will return an error if internally a multipolygon is created for some reason. `NULL` inputs also return `NULL`.

* <InternalLink version="v23.2" path="show-schedules">`SHOW SCHEDULES`</InternalLink> now shows the schedule options with which the schedules were created. `SHOW SCHEDULES FOR BACKUP` additionally shows if the schedule is a full or incremental backup schedule.

* You can no longer use `PREPARE` with <InternalLink version="v23.2" path="explain-analyze">`EXPLAIN ANALYZE`</InternalLink> statements. Previously, this was allowed, but attempts to `EXECUTE` the prepared `EXPLAIN ANALYZE` statements would result in an error.

* `ttl_expiration_expression` now allows stable operators and functions. This allows intervals to be directly added to `TIMESTAMPTZ` expressions. See [https://www.postgresql.org/docs/15/xfunc-volatility.html](https://www.postgresql.org/docs/15/xfunc-volatility).

* CockroachDB now allows `INSERT` commands in <InternalLink version="v23.2" path="user-defined-functions">UDF</InternalLink> statement bodies.

* CockroachDB now allows `UPDATE` and `UPSERT` commands in UDF statement bodies.

* The `READ COMMITTED` <InternalLink version="v23.2" path="transactions#isolation-levels">isolation level</InternalLink> is now supported. It can be used in the following ways:
  * When starting a transaction, use `BEGIN ISOLATION LEVEL READ COMMITTED`.
  * After starting a transaction, but before performing reads or writes, use `SET TRANSACTION ISOLATION READ COMMITTED`.
  * Configure it as the default isolation level using the `default_transaction_isolation` session variable. To see the isolation level of the currently running transaction, use either `SHOW TRANSACTION ISOLATION LEVEL` or `SHOW transaction_isolation`.

* Added version gates which require all nodes in a given cluster to have a minimum binary version number, which in turn is required for creating forward indexes on JSON columns and for ordering JSON columns.

* CockroachDB now allows `DELETE` commands in UDF statement bodies.

* Added a new cluster setting `sql.auth.public_schema_create_privilege.enabled` which controls whether users receive <InternalLink version="v23.2" path="grant">`CREATE` privileges</InternalLink> on the public schema or not. The setting applies at the time that the public schema is created, which happens whenever a database is created. The setting is `true` by default.

* <InternalLink version="v23.2" path="explain">`EXPLAIN (DDL)`</InternalLink> statements now have descriptor, index, column, constraint, and other ID values decorated with names when available. There is now also a new `EXPLAIN (DDL, SHAPE)` statement that provides information on costly operations planned by the declarative schema changer, like which index backfills and validations will get performed.

* A new statistic `KV pairs read` is now exposed on <InternalLink version="v23.2" path="explain-analyze">`EXPLAIN ANALYZE`</InternalLink> output in some cases (when this number is different from the `KV rows read` statistic or when the `VERBOSE` option is requested). This new statistic is also added to the telemetry sampled query events.

* The `KV rows read` statistic in `EXPLAIN ANALYZE` output has been renamed to `KV rows decoded` to better reflect its meaning.

* Table names are now allowed in `SELECT` lists inside <InternalLink version="v23.2" path="views">view</InternalLink> and UDF definitions.

* <InternalLink version="v23.2" path="show-jobs">`SHOW JOB WITH EXECUTION DETAILS`</InternalLink> for a backup job will regenerate the DistSQL plan diagram with per-node and per-processor progress information. This will help users better understand the state of a running backup job.

* The `crdb_internal.node_transactions` and `crdb_internal.cluster_transactions` tables now have columns for `isolation_level`, `priority`, and `quality_of_service`.

* The <InternalLink version="v23.2" path="show-ranges">`SHOW RANGES`</InternalLink> command will now emit span statistics when the `DETAILS` option is specified. The statistics are included in a new column named `span_stats`, as a `JSON` object. The statistics are calculated for the identifier of each row. `SHOW RANGES WITH DETAILS` will compute span statistics for each range. `SHOW RANGES WITH TABLES, DETAILS` will compute span statistics for each table, and so on. The `span_stats` `JSON` object has the following keys:
  * `approximate_disk_bytes`
  * `[key|val|sys|live|intent]_count`
  * `[key|val|sys|live|intent]_bytes`

    `approximate_disk_bytes` is an approximation of the total on-disk size of the given object.

    `key_count` is the number of meta keys tracked under `key_bytes`. `key_bytes` is the number of bytes stored in all non-system point keys, including live, meta, old, and deleted keys. Only meta keys really account for the "full" key; value keys only for the timestamp suffix.

    `val_count` is the number of meta values tracked under `val_bytes`. `val_bytes` is the number of bytes in all non-system version values, including meta values.

    `sys_count` is the number of meta keys tracked under `sys_bytes`. `sys_bytes` is the number of bytes stored in system-local key-value pairs. This tracks the same quantity as (`key_bytes` + `val_bytes`), but for system-local metadata keys (which aren't counted in either `key_bytes` or `val_bytes`).

    `live_count` is the number of meta keys tracked under `live_bytes`. `live_bytes` is the number of bytes stored in keys and values which can in principle be read by means of a Scan or Get in the far future, including intents but not deletion tombstones (or their intents). Note that the size of the meta key-value pair (which could be explicit or implicit) is included in this. Only the meta key-value pair counts for the actual length of the encoded key (regular pairs only count the timestamp suffix).

    `intent_count` is the number of keys tracked under `intent_bytes`. It is equal to the number of meta keys in the system with a non-empty Transaction proto. `intent_bytes` is the number of bytes in intent key-value pairs (without their meta keys).

* Introduced the `pg_lsn` data type, which is used to store the `lsn` associated with replication.

* Users now can issue one <InternalLink version="v23.2" path="alter-table">`ALTER TABLE` statement</InternalLink> with a combination of any number of `ADD COLUMN`, any number of `DROP COLUMN`, one `ALTER PRIMARY KEY`, and any number of `ADD CONSTRAINT` clauses. For example, with this PR, we now support statements like:

  ```sql theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
  CREATE TABLE t (i INT PRIMARY KEY, j INT NOT NULL, k INT NOT NULL);  ALTER TABLE t ADD COLUMN p INT DEFAULT 30, ALTER PRIMARY KEY USING COLUMNS (j), DROP COLUMN k, ADD CHECK (i > 0);
  ```

* Added the ability to add numeric values to LSNs, or sub a decimal value from a LSN.

* Implemented the `pg_lsn - pg_lsn = decimal` built-in function, which subtracts 2 LSNs to return a decimal.

* Added limited support for scalar PL/pgSQL functions. Supported statements are variable declarations, variable assignments, `IF` statements, simple `LOOP` statements (with no conditions), `EXIT` and `CONTINUE` statements, and `RETURN` statements.

* Implemented the spatial built-in `ST_AsMVTGeom`.

* `Pg_class`'s `relreplident` field was previously unpopulated. It is now populated with `d` for all tables (as each table has a primary key) and `n` otherwise.

* Added the `pg_sequence_last_value` built-in function, which returns the last value generated by the sequence.

* <InternalLink version="v23.2" path="restore">`RESTORE`</InternalLink> can now be passed a `WITH EXECUTION LOCALITY` option similar to <InternalLink version="v23.2" path="backup">`BACKUP`</InternalLink>, to restrict execution of the job to nodes with matching localities.

* Added the `REPLICATION` user role option, which allows a user to use the streaming replication protocol. There is a corresponding <InternalLink version="v23.2" path="grant">`REPLICATION` system privilege</InternalLink>.

* A new view-only <InternalLink version="v23.2" path="session-variables">session variable</InternalLink>, `max_connections` was added. This can be used with `SHOW` to view the maximum amount of non-superuser SQL connections allowed at a given time.

* Added the `nameconcatoid` built-in function, which concatenates a name with an OID.

* The `pg_catalog.pg_language` table is now populated with data about the languages used to define functions.

* The `information_schema.routines` view is now populated with information about functions.

* The `information_schema.parameters` table is now populated with information about function parameters.

* Added support for the PLpgSQL `RAISE` statement, which allows sending notices to the client and raising errors. Currently the notice is only sent to the client. Support for logging notices will be added in a future release.

* The `public` pseudo-role now receives the `EXECUTE` privilege by default for all user-defined functions that are created. This can be adjusted by using `ALTER DEFAULT PRIVILEGES`.

* The `crdb_interanal.node_statement_statistics` table redacts the error message if the user has the `VIEWACTIVITYREDACTED` privilege, and does not redact the error message if the user has `VIEWACTIVITY`. If the user has both, `VIEWACTIVITYREDACTED` takes precedence and the last error is redacted.

* The `crdb_internal.cluster_locks` table now has a `isolation_level` column indicating the isolation level.

* In `CommonSQLExecDetails`, which is emitted as part of the SQL audit logs, SQL exec logs, and telemetry events, there is a new field: `StmtPosInTxn`. It represents the statement's index in the transaction, starting at 1.

* `cluster_logical_timestamp` now returns an error when called at isolation levels lower than `SERIALIZABLE`.

* `EXPLAIN ANALYZE` output now includes:
  * The isolation level of the statement's transaction.
  * The priority of the statement's transaction.
  * The quality of service level of the statement's transaction.

* Added a new session variable, `enable_implicit_fk_locking_for_serializable`, which controls locking during foreign key checks under `SERIALIZABLE` isolation. With this set to `true`, foreign key checks of the referenced (parent) table, such as those performed during an `INSERT` or `UPDATE` of the referencing (child) table, will lock the referenced row using `SELECT FOR SHARE` locking. This is somewhat analogous to the existing `enable_implicit_select_for_update` variable but applies to the foreign key checks of a mutation statement instead of the initial row fetch. Under weaker isolation levels such as read committed, `SELECT FOR SHARE` locking will always be used to ensure the database maintains the foreign key constraint, regardless of the current setting of `enable_implicit_fk_locking_for_serializable`.

* Add a new session variable, `enable_durable_locking_for_serializable`, which controls locking durability under `SERIALIZABLE` isolation. With this set to true, `SELECT FOR UPDATE` locks, `SELECT FOR SHARED` locks, and constraint check locks (e.g., locks acquired during foreign key checks if `enable_implicit_fk_locking_for_serializable` is set to `true`) will be guaranteed-durable under serializable isolation, meaning they will always be held to transaction commit. These locks are always guaranteed-durable under weaker isolation levels. By default, under serializable isolation these locks are best-effort rather than guaranteed-durable, meaning in some cases (e.g., leaseholder transfer, node loss, etc.) they could be released before the transaction commits. Serializable isolation does not rely on locking for correctness, only using it to improve performance under contention, so this default is a deliberate choice to avoid the performance overhead of lock replication.

* The cluster setting `server.cpu_profile.enabled` has been removed. `server.cpu_profile.cpu_usage_combined_threshold` can enable and disable CPU profiling.

* Added support for `CONSTANT` variable declarations in PLpgSQL routines. Any assignment to a variable declared with the `CONSTANT` keyword will raise a compile-time error.

* Added a new syntax to `SHOW DEFAULT PRIVILEGES`, `SHOW DEFAULT PRIVILEGES FOR GRANTEE <grantee>`, that shows the default privileges that a grantee received.

* The Statement diagnostics feature has been extended to support collecting a bundle for a particular plan. Namely, the existing fingerprint-based matching has been extended to also include plan-gist-based matching. Such bundles will miss a couple of things: `plan.txt` file as well as the tracing of the optimizer. At the moment, the feature is only exposed via an overload to the `crdb_internal.request_statement_bundle` built-in function. We now also support "anti-match": collecting a bundle for any plan other than the provided plan gist.

* <InternalLink version="v23.2" path="show-backup">`SHOW BACKUP`</InternalLink>'s timestamp columns are now `TIMESTAMPTZ`, meaning they render in the session offset.

* Attempting to <InternalLink version="v23.2" path="alter-table#drop-column">drop a column</InternalLink> when safe updates are enabled (`sql_safe_updates = on`) now additionally warns users that indexes referencing that column will be automatically dropped.

* `NOTICE`s are now emitted for each index dropped by an `ALTER TABLE... DROP COLUMN...` statement.

* `SHOW JOBS` now returns times (`created`, `last_run`, and so on) using the `TIMESTAMPTZ` column type instead of the `TIMESTAMP` type, meaning they are now rendered using the session offset.

* Added a cluster setting `sql.schema.force_declarative_statements` to enable/disable DDL in the <InternalLink version="v23.2" path="online-schema-changes">declarative schema changer</InternalLink>.

* Added the new built-in functions `workload_index_recs()` and `workload_index_recs(TIMESTAMPTZ)`, which return workload level index recommendations (columns of string, each string represent an index recommendation) from statement level index recommendations (as candidates) in `system.statement_statistics`. If the `TIMESTAMPTZ` is given, it will only consider those candidates generated after that `TIMESTAMPTZ` value.

* Added support for specifying PLpgSQL `IF` statements with `ELSIF` branches.

* The admin API database details endpoint now returns authoritative range statistics.

* Added the `max_retries_for_read_committed` session variable. It defaults to 10, and determines the number of times an individual statement in an explicit `READ COMMITTED` transaction will be retried if it encounters a retryable transaction error.

* Added support for the execution of PLpgSQL functions with exception blocks. This allows a PLpgSQL function to catch and handle arbitrary errors it encounters during its execution.

* Added the built-in functions `bitmask_or`, `bitmask_and` and `bitmask_xor` for variable-length input bitwise `OR`, `AND`, and `XOR` operations, respectively.

* The `oidvectortypes` built-in has been implemented, which can format `oidvector`.

* Added support for executing SQL statements directly within PLpgSQL routines. Note that this currently only applies to the subset of statements that can be executed within SQL UDFs, so `CREATE TABLE` is not supported, for example. `INTO` syntax is also supported. For example, `SELECT * INTO a, b FROM xy;`.

* A SQL client can now request strict atomicity for mixed DDL/DML transactions with the new session variable `strict_ddl_atomicity`, which defaults to `false`. When this variable is set to `true`, CockroachDB will refuse to accept processing those specific DDL statements inside `BEGIN...COMMIT` for which it cannot guarantee atomic processing (other DDL statements are still allowed). Note that schema changes implicit in certain operations (e.g., `IMPORT`) are not protected via the new mechanism and can still fail with `XXA00` errors.

* Fixed an issue where the UI was missing query text and details on the SQL Activity <InternalLink version="v23.2" path="ui-transactions-page">Transactions page</InternalLink> if there were more than 500 transactions or statements. The `statement_activity` table now includes all statements for a transaction that are in the `transaction_activity` table.

* Added the <InternalLink version="v23.2" path="grant">`VIEWSYSTEMTABLE` system privilege</InternalLink>. Users with this privilege have `SELECT` privileges for all tables in the system database.

* The `statement_activity` and `transaction_activity` tables column `execution_total_cluster_seconds` is now accurate. The `combinedstmts` endpoint returns the correct value for the `StmtsTotalRuntimeSecs` and `TxnsTotalRuntimeSecs` properties.

* The `persistedsqlstats` table maximum size check is now done once an hour instead of every 10 minutes. This reduces the risk of serialization errors on the statistics tables.

* The deprecated session variable `idle_in_session_timeout` is now hidden from introspection. It was previously changed to `idle_session_timeout`.

* The session variable `ssl` is now visible through introspection for better compatibility with PostgreSQL.

* The session variable `session_user` is now invisible through introspection, in a way consistent with `session_authorization` and PostgreSQL.

* There is now a `CREATEROLE` system privilege, which is analogous to the existing `CREATEROLE` role option, but can also be inherited by role membership.

* Added the `gen_random_bytes` built-in function, which generates cryptographically secure random bytes.

* The hash function used by <InternalLink version="v23.2" path="hash-sharded-indexes">hash-sharded indexes</InternalLink> was changed to `mod(fnv32(md5(crdb_internal.datums_to_bytes(columns))), bucket_count)`. Previously, it did not use `md5`. This change was made to enhance the uniformity of bucket distribution in cases when the bucket count is a power of 2, and the columns being sharded have numerical properties that make the `fnv32` function return values with a non-uniformly distributed modulus.

* New datetime built-ins (`make_date`, `make_timestamp`, and `make_timestamptz`) have been added, allowing for the creation of timestamps, timestamps with time zones, and dates. In addition, `date_trunc` now allows for a timestamp to be truncated in a specified timezone (to a specified precision).

* There is now a `CREATELOGIN` system privilege, which is analogous to the existing `CREATELOGIN` role option, but can also be inherited by role membership.

* There is now a `CREATEDB` system privilege, which is analogous to the existing `CREATEDB` role option, but can also be inherited by role membership.

* There is now a `CONTROLJOB` system privilege, which is analogous to the existing `CONTROLJOB` role option, but can also be inherited by role membership.

* The `persistedsqlstats` table maximum size check is now done once an hour instead of every 10 minutes. This reduces the risk of serialization errors on the statistics tables.

* The new <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink> `sql.txn.read_committed_syntax.enabled`, controls whether transactions run under `READ COMMITTED` or `SERIALIZABLE` isolation. It defaults to `false`. When set to `true`, the following statements will configure transactions to run under `READ COMMITTED` isolation:
  * `BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED`
  * `SET TRANSACTION ISOLATION LEVEL READ COMMITTED`
  * `SET default_transaction_isolation = 'read committed'`
  * `SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL READ COMMITTED`

* The <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink> `sql.metrics.statement_details.gateway_node.enabled` now defaults to false, to reduce the number of rows generated in SQL Statistics pages.

* The default value for the [`ttl_job_cron`](https://cockroachlabs.com/docs/v23.2/row-level-ttl) table storage parameter is now `@daily` rather than `@hourly`. This parameter controls the default recurrence of the row-level TTL job. As part of this change, the output of the `SHOW CREATE TABLE` statements now include the `ttl_cron_job` parameter only if it is explicitly set.

### Operational changes

* Removed a timeseries metric that has not been reported for several versions.

* Added two new metrics, `range.snapshots.(send|recv)-queue-bytes`, to track the total size of all snapshots waiting in the snapshot queue.

* Exposed a new metric `storage.compactions.duration`, computed by the storage engine, that provides the cumulative time the storage engine has spent in compactions. This duration may exceed time elapsed, because of concurrent compactions, and may be useful in monitoring compaction concurrency.

* Two new store metrics, `range.snapshots.cross-region.sent-bytes` and `range.snapshots.cross-region.rcvd-bytes`, were added to track the aggregate of snapshot bytes sent from and received at a store across different regions. Note that these metrics require the nodes' localities to include a “region” tier key. If a node lacks this key but is involved in cross-region batch activities, an error message will be logged.

* Added new store metrics to track the aggregate of snapshot bytes sent from and received at a store across different zones.
  * `range.snapshots.cross-zone.sent-bytes`
  * `range.snapshots.cross-zone.rcvd-bytes`

    For accurate metrics, follow these recommendations: - Configure region and zone tier keys consistently across nodes. - Within a node locality, ensure unique region and zone tier keys. - Maintain consistent configuration of region and zone tiers across nodes.

* Added new store metrics:
  * `raft.rcvd.bytes`
  * `raft.sent.bytes`
  * `raft.rcvd.cross_region.bytes`
  * `raft.sent.cross_region.bytes`
  * `raft.rcvd.cross_zone.bytes`
  * `raft.sent.cross_zone.bytes`

* Added new DistSender metrics:
  * `distsender.batch_requests.replica_addressed.bytes`
  * `distsender.batch_responses.replica_addressed.bytes`
  * `distsender.batch_requests.cross_region.bytes`
  * `distsender.batch_responses.cross_region.bytes`
  * `distsender.batch_requests.cross_zone.bytes`
  * `distsender.batch_responses.cross_zone.bytes`.

* Added new Node metrics:
  * `batch_requests.bytes`
  * `batch_responses.bytes`
  * `batch_requests.cross_region.bytes`
  * `batch_responses.cross_region.bytes`
  * `batch_requests.cross_zone.bytes`
  * `batch_responses.cross_zone.bytes`

* Added new RPC metrics to help you to diagnose RPC connection issues:
  * `grpc.connection.avg_round_trip_latency`
  * `rpc.connection.failures`
  * `rpc.connection.healthy`
  * `rpc.connection.healthy_nanos`
  * `rpc.connection.heartbeats`
  * `rpc.connection.unhealthy`
  * `rpc.connection.unhealthy_nanos`

* Added a new metric `changefeed.lagging_ranges` that shows the number of ranges which are behind in changefeeds. This metric can be used with the `metrics_label` changefeed option. Added a new [changefeed option](https://cockroachlabs.com/docs/v23.2/create-changefeed) `lagging_ranges_threshold`, which is the amount of time a range needs to be behind to be considered lagging. By default this is 3 minutes. Added a new option `lagging_ranges_polling_interval`, which controls how often the lagging ranges calculation is done. This setting defaults to polling every 1 minute. Note that polling adds latency to the metric being updated. For example, if a range falls behind by 3 minutes, the metric may not update for an additional minute afterwards. Also note that ranges undergoing an initial scan for longer than the threshold are considered to be lagging. Starting a changefeed with an initial scan on a large table will likely increment the metric for each range in the table. However, as ranges complete the initial scan, the number of ranges will decrease.

* A histogram metric `raft.replication.latency` was added. It tracks the time between evaluation and application of the command. This includes time spent in the quota pool, in replication (including re-proposals) as well as log application, but notably *not* sequencing latency (i.e., contention and latch acquisition).

* The default Raft scheduler concurrency cap has been increased from 96 to 128 workers, scaling with 8 workers per CPU up to the cap. The scheduler concurrency can be controlled using the `COCKROACH_SCHEDULER_CONCURRENCY` environment variable.

* The new cluster setting `server.hot_ranges_request.node.timeout` controls the maximum amount of time that a hot ranges request will spend waiting for a node to provide a response. It defaults to 5 minutes. To disable timeouts, set it to `0`.

* Two new cluster settings control whether intent resolution is subject to admission control: `kv.intent_resolver.send_immediately.bypass_admission_control.enabled` and `kv.intent_resolver.batch.bypass_admission_control.enabled`.

* The new cluster setting `admission.l0_min_size_per_sub_level` reduces the probability of <InternalLink version="v23.2" path="admission-control">admission control</InternalLink> throttling when there is a sequence of small `memtable` flushes or small files ingested into L0.

* The new cluster setting `kv.intent_resolver.batcher.in_flight_backpressure_limit.enabled` controls whether an in-flight RPC limit is enforced on intent resolution RPCs. It defaults to `false`.

* <InternalLink version="v23.2" path="backup">`BACKUP`</InternalLink> now skips contacting the ranges for tables on which `exclude_data_from_backup` is set, and can thus succeed even if an excluded table is unavailable.

* Span stats requests will return a partial result if the request encounters any errors. Errors that would have previously terminated the request are now included in the response.

* The rangefeed closed timestamp interval controlled by `kv.rangefeed.closed_timestamp_refresh_interval` now defaults to 3 seconds. This affects how often rangefeeds emit resolved timestamps, and thus how often changefeeds can emit checkpoints. Previously, its default value of 0 would fall back to `kv.closed_timestamp.side_transport_interval`, which defaults to 200 milliseconds. Users who rely on the setting `kv.closed_timestamp.side_transport_interval` to control the rangefeed closed timestamp interval should make sure they either set `kv.rangefeed.closed_timestamp_refresh_interval` to 0 to retain the old behavior (preferably before upgrading), or to an appropriate value.

* The default value of `timeout` for `http-servers` <InternalLink version="v23.2" path="configure-logs#configure-log-sinks">logging sinks</InternalLink> has been changed from `0` (i.e., "no timeout") to `2s`. This is reflected in the `http-defaults` section of the log configuration. Users still maintain the ability to override the timeout, or disable it by explicitly setting it to `0` (e.g. `timeout: 0`).

* <InternalLink version="v23.2" path="change-data-capture-overview">Changefeed</InternalLink> metrics now include a `changefeed.checkpoint_progress` metric which is similar to `changefeed.max_behind_nanos` but supports metrics labels, as well as a `changefeed.aggregator_progress` metric which can track the progress of individual aggregators (the lowest timestamp for which all aggregators with the label have emitted all values they're responsible for).

* Added support for Prometheus native histograms behind an environment variable flag.

* Requests for database details or table details from the UI, or usages of \[`SHOW RANGES WITH DETAILS`]/docs/v23.2/show-ranges.html are no longer subject to errors if the number of requested spans is too large.

* The <InternalLink version="v23.2" path="cockroach-debug-zip">`cockroach debug zip`</InternalLink> command now has an option to omit goroutine stack dumps. This impacts the creation of `nodes/*/stacks.txt` and `nodes/*/stacks_with_labels.txt` within debug ZIP bundles. Users can opt to exclude these goroutine stacks by using the `--include-goroutine-stacks=false` flag. Note that fetching stack traces for all goroutines is a "stop-the-world" operation, which can momentarily have negative impacts on SQL service latency. Note also that any periodic goroutine dumps previously taken on the node will still be included in `nodes/*/goroutines/*.txt.gz`, as these would have already been generated and don't require any stop-the-world operations.

* New rangefeed metrics help to troubleshoot rangefeed restarts. The metric names have the format `distsender.rangefeed.retry.{reason}`.

* Rangefeeds regularly attempt to push long-running transactions to a future timestamp in order to emit checkpoints. The interval at which this is attempted has been increased from 250 milliseconds to 1 seconds. This is now configurable via the environment variable `COCKROACH_RANGEFEED_PUSH_TXNS_INTERVAL`.

### Cluster virtualization

When cluster virtualization is enabled:

* A selection box displays in DB Console Metrics pages when you are connected to the system virtual cluster, and allows you to view metrics for a specific virtual cluster.
* A "no data" empty graph state has been added when switching to a virtual cluster with no data.
* A selection box displays on custom charts in the DB Console and allows you to select a specific virtual cluster.
* The name of the virtual cluster, when known, is now reported in logging events.
* When `cockroach debug zip` is run for a cluster with virtualization enabled, data about virtual clusters is now stored in a `virtual` subdirectory rather than a `tenants` subdirectory.
* When cluster virtualization is enabled, the following closed timestamp side-transport settings can be set only from the system virtual cluster: `kv.closed_timestamp.target_duration`, `kv.closed_timestamp.side_transport_interval`, and `kv.closed_timestamp.lead_for_global_reads_override`.

### Command-line changes

* The CLI commands that output SQL data now support the JSON output format ( `--format=json` ), in addition to newline-delimited JSON (ND-JSON, `--format=ndjson` ) that had been supported since v22.2.

* <InternalLink version="v23.2" path="cockroach-debug-zip">`cockroach debug zip`</InternalLink> now supports the command-line flag `--format` to select the format used to store SQL table data, in the same way as <InternalLink version="v23.2" path="cockroach-sql">`cockroach sql`</InternalLink>. In contrast to `cockroach sql` however, its default value is `json` (resulting in files named `.json` ) and the default is not dependent on whether the terminal is interactive.

* The SQL shell now supports argument quoting for client-side commands in a similar way to `psql`: inside single quotes, `\` can escape characters and recognize octal/hexadecimal sequences; and inside double quotes characters are passed through. The quote characters themselves, when doubled, result in themselves as part of the string.

  For example, the following commands both result in a SQL prompt that says `go "world"`:

  ```shell theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
  \set prompt1 'go "world"'
  \set prompt1 go' '"world"
  ```

  To add color to the prompt:

  ```shell theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
  \set prompt1 '\033[34mmydb>\033[m'
  ```

  These quoting rules are similar to PostgreSQL, but are different from the rules used by POSIX shells and of other programming languages like Python or Go. For example, octal and hex escape sequences support a variable number of digits, and double quoted strings preserve the surrounding quotes. When in doubt, refer to the PostgreSQL documentation.

* The configuration for log output sinks now accepts a new `format-options` field. This can be used to customize the output of a given format. Each format accepts different options. One available option for the `json` output format is `datetime-format`.

  For example:

  ```yaml theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
  sinks:
    fluent-groups:
      custom-json:
        format: json
        format-options: {datetime-format: rfc3339}
  ```

  This introduces a (new) field `datetime` in each output JSON event, with the format specified by the option. As of this writing, the following values are documented:

  * `none`: disable the creation of the `datetime` field. This is the default value.
  * `iso8601` / `rfc3339`: format the time stamp like "2006-01-02T15:04:05.999999999Z".
  * `rfc1123`: format the time stamp like "Mon, 02 Jan 2006 15:04:05 +0000".

    Enabling the `datetime` field introduces CPU overhead and is not recommended. When using output to a log collector such as Fluent or Datadog, the log collector can be configured to transform the timestamp provided by CockroachDB without requiring participation from CockroachDB itself. When inspecting a log file containing JSON output produced by CockroachDB, the command `cockroach debug merge-log` can consume the JSON data and reformat it using the `crdb-v2` format which also includes the date and time using the RFC3339 format.

* The `json` log output format now recognizes the extra format option `datetime-timezone` which selects which timezone to use when formatting the `datetime` field. `datetime-timezone` must be combined with `datetime-format` because the default value for the latter option is `none` (i.e., `datetime` is not produced by default). For example:

  ```yaml theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
  sinks:
    fluent-groups:
      custom-json:
        format: json
        format-options: {datetime-format: rfc3339, datetime-timezone: America/New_York}
  ```

* The `json` log format now recognizes the format options `tag-style` and `fluent-tag`. The existing formats `json-compact`, `json-fluent`, `json-fluent-compact` have been redefined to become aliases for `json` with different defaults for the two new options.

* The `crdb-v1` log format now recognizes the format options `show-counter` and `colors`. The existing formats `crdb-v1-tty`, `crdb-v1-count`, `crdb-v1-tty-count` have been redefined to become aliases for `crdb-v1` with different defaults for the two new options.

* The `crdb-v2` log format now recognizes the format option `colors`. The existing formats `crdb-v2-tty` has been redefined to become aliases for `crdb-v2` with a different default for the new option.

* The log output formats `crdb-v1` and `crdb-v2` now support the format option `timezone`. When specified, the corresponding time zone is used to produce the timestamp column. For example:

  ```yaml theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
  file-defaults:
      format: crdb-v2
      format-options: {timezone: america/new_york}
  ```

  Example logging output:

  ```text theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
  I230606 12:43:01.553407-040000 1 1@cli/start.go:575 ⋮ [n?] 4  soft memory limit of Go runtime is set to 35 GiB                        ^^^^^^^ indicates GMT-4 was used
  ```

  The timezone offset is also always included in the format if it is not zero (e.g., for non-UTC time zones). This is necessary to ensure that the times can be read back precisely.

* The command `cockroach debug merge-log` was adapted to understand time zones in input files read with format `crdb-v1` or `crdb-v2`.

* When customizing the SQL interactive prompt, `%M` and `%m` now behave more like `psql` when connecting over a Unix datagram socket.

* The default value of the `--format` parameter to `cockroach debug zip` is `tsv`, like other CLI commands that can extract SQL data.

* The `debug.zip` now includes the `crdb_internal.probe_range` table with a limit of 100 rows to prevent the query from taking too long.

* The default value for the `--max-sql-memory` parameter of the <InternalLink version="v23.2" path="cockroach-demo">`cockroach demo` command</InternalLink> has been increased from 128 MiB to 256 MiB.

* The command `\demo recommission` has been removed from <InternalLink version="v23.2" path="cockroach-demo">`cockroach demo`</InternalLink>. It had been obsolete and non-functional ever since v20.2.

* Added limited `statement_statistics` to the debug ZIP file.

* The following user-visible cluster settings have been renamed. The previous name is still available for backward compatibility.

  <table><thead><tr><th>Previous name</th><th>New name</th></tr></thead><tbody><tr><td><code>server.web\_session\_timeout</code></td><td><code>server.web\_session.timeout</code></td></tr><tr><td><code>kv.closed\_timestamp.follower\_reads\_enabled</code></td><td><code>kv.closed\_timestamp.follower\_reads.enabled</code></td></tr><tr><td><code>kv.range\_split.by\_load\_enabled</code></td><td><code>kv.range\_split.by\_load.enabled</code></td></tr><tr><td><code>changefeed.balance\_range\_distribution.enable</code></td><td><code>changefeed.balance\_range\_distribution.enabled</code></td></tr><tr><td><code>changefeed.batch\_reduction\_retry\_enabled</code></td><td><code>changefeed.batch\_reduction\_retry.enabled</code></td></tr><tr><td><code>server.clock.forward\_jump\_check\_enabled</code></td><td><code>server.clock.forward\_jump\_check.enabled</code></td></tr><tr><td><code>server.oidc\_authentication.autologin</code></td><td><code>server.oidc\_authentication.autologin.enabled</code></td></tr><tr><td><code>sql.metrics.statement\_details.dump\_to\_logs</code></td><td><code>sql.metrics.statement\_details.dump\_to\_logs.enabled</code></td></tr><tr><td><code>sql.trace.log\_statement\_execute</code></td><td><code>sql.log.all\_statements.enabled</code></td></tr><tr><td><code>trace.debug.enable</code></td><td><code>trace.http\_debug\_endpoint.enabled</code></td></tr></tbody></table>

* The following cluster settings have been renamed. The previous names are available for backward-compatibility.

  <table><thead><tr><th>Previous name</th><th>New name</th></tr></thead><tbody><tr><td><code>spanconfig.tenant\_coalesce\_adjacent.enabled</code></td><td><code>spanconfig.range\_coalescing.application.enabled</code></td></tr><tr><td><code>spanconfig.storage\_coalesce\_adjacent.enabled</code></td><td><code>spanconfig.range\_coalescing.system.enabled</code></td></tr></tbody></table>

* The new `cockroach gen metric-list` command generates metadata that describes the various metrics collected by an idle server. The list does not include dynamic metric names whose names are generated based on the workload.

### DB Console changes

* The time window selection for metrics charts is now encoded in the URL via query params.
* The <InternalLink version="v23.2" path="ui-jobs-page#job-details">Job Details page</InternalLink> now has a tabbed UI that will allow users to toggle between the Overview and other future views for advanced debugging and observability.
* Renamed "recent executions" to "active executions" in the UI.
* The <InternalLink version="v23.2" path="ui-cdc-dashboard">Changefeed Dashboard</InternalLink> has been updated with new graphs to track backfill progress, protected timestamps age, and the number of schema registry registrations. The updates include renaming the **Sink Byte Traffic** graph to **Emitted Bytes** and the **Max Changefeed Latency** graph to **Max Checkpoint Latency**.
* A new **Networking** tab has been added to the DB Console metrics dashboard. Metrics for network bytes sent and received are now displayed in the **Networking** tab rather than the **Hardware** tab. In addition, the following metrics have been added:
  * `cr.node.round-trip-latency-p50`
  * `cr.node.round-trip-latency-p99`
  * `cr.node.rpc.connection.unhealthy`

\#104394

* The Job Details page now has a profiler tab for more advanced observability into a job's execution. Currently, we support collecting a cluster-wide CPU profile of the job.
* The active executions views in the SQL Activity pages now support toggling between automatic and manual refresh. A manual refresh button was also added along with a timestamp indicating when the last refresh was performed.
* The visibility of the cluster setting `ui.display_timezone` has been set to public. Documentation of the cluster setting has been added. No functionality has been changed.
* Added a table in the Profiler job details page that lists all the available files describing a job's execution details
* Add columns for p50, p90, p99 percentiles and latency min and max on Explain Plan tab on the <InternalLink version="v23.2" path="ui-statements-page#statement-execution-details-page">Statement Execution Details page</InternalLink>.
* Fixed a broken query for the database details page that was causing an infinite loading state.
* Added summary cards with total/average values for statistics on the Statement Execution Details page.
* The DB Console now Shows a warning when the time period selected on SQL Activity pages is older than the oldest data available.
* Users without the `VIEWCLUSTERSETTINGS` permission but with `VIEWACTIVITY` or `VIEWACTIVITYREDACTED` can now see index recommendations.
* The DB Console now allows non-admin users to view the <InternalLink version="v23.2" path="ui-databases-page">Databases page</InternalLink>.
* Non-admin users are able to use the Database Details page.
* Non-admin users are able to use the Database Table page.
* The "SQL Connection Rate" metric on the <InternalLink version="v23.2" path="ui-sql-dashboard">SQL Dashboard</InternalLink> is downsampled using the MAX function instead of SUM. This improves situations where zooming out would cause the connection rate to increase for downsampled data.

### Bug fixes

* Fixed an internal error that can occur when <InternalLink version="v23.2" path="create-view">`CREATE OR REPLACE VIEW`</InternalLink> replaces a view with fewer columns and another entity depended on the view.

* If views are created with circular dependencies, CockroachDB now returns an error ( `cyclic view dependency for relation` ) instead of crashing the node. This bug was present since at least 21.1.

* Fixed a potential bug whereby a failed or cancelled <InternalLink version="v23.2" path="import">IMPORT</InternalLink> could in some cases leave some of the imported rows behind after it was cancelled, in the rare event that the writing processes were slow enough to continue writing after the cleanup process started.

* Fixed a very rare bug that could cause keys to get unexpectedly deleted when rebalances occurred in a write-heavy workload.

* It is now possible to properly redirect the output of SQL queries using the `ndjson` output table format in <InternalLink version="v23.2" path="cockroach-sql">`cockroach sql`</InternalLink>. This bug had been introduced in v22.2.

* The `unaccent` built-in <InternalLink version="v23.2" path="functions-and-operators">function</InternalLink> no longer removes spaces.

* The details of errors pertaining to invalid descriptors are not included any more in redacted debug ZIP files.

* Fixed a bug where join expressions were processed incorrectly.

* Fixed a bug that could cause a <InternalLink version="v23.2" path="user-defined-functions">UDF</InternalLink> to return a value that does not conform to the return type of the UDF. This bug was only present for UDFs that return user-defined types. The bug was present since v23.1.

* Fixed a bug where if a user was logged in while a different session dropped that user, the dropped user would still inherit privileges from the `public` role. Now, CockroachDB checks that the user exists before allowing it to inherit privileges from the `public` role. In addition, any active web sessions are now revoked when a user is dropped.

* Fixed a bug in upstream `etcd-io/raft` which could result in pulling unlimited amount of logs into memory, and lead to out-of-memory errors. Now the log scan has a limited memory footprint.

* Fixed a bug where, in rare circumstances, a [replication](https://cockroachlabs.com/docs/v23.2/architecture/replication-layer) could get stuck when proposed near lease or leadership changes, especially under overload, and the \[replica circuit breakers]\( [../v23.2](https://cockroachlabs.com/docs/v23.2/architecture/replication-layer#per-replica-circuit-breakers) could trip. A previous attempt to fix this issue has been reverted in favor of this fix.

* CockroachDB now automatically deletes statistics for dropped tables from the `system.table_statistics` table.

* Fixed a rare internal error which occurs when a query uses a "project set" operation involving simple column expressions.

* The <InternalLink version="v23.2" path="architecture/replication-layer#raft">Raft</InternalLink> `PreVote` and `CheckQuorum` mechanisms are now fully enabled. These prevent spurious elections when followers already have an active leader, and cause leaders to step down if they don't hear back from a quorum of followers. This improves reliability under partial and asymmetric network partitions, by avoiding spurious elections and preventing unavailability where a partially partitioned node could steal leadership away from an established leaseholder who would then no longer be able to reach the leader and submit writes.

* Fixed a bug that could produce incorrect values for <InternalLink version="v23.2" path="computed-columns">virtual computed columns</InternalLink> in rare cases. The bug only occurred when the virtual column expression's type did not match the type of the virtual column.

* Fixed a rounding error that could cause distributed execution for some decimal aggregate functions to return slightly inaccurate results in rare cases.

* Fixed the `StatementStatistics.Nodes` to contain all of the nodes involved in the query. Fixed the region info in <InternalLink version="v23.2" path="explain-analyze">`EXPLAIN ANALYZE (DISTSQL)`</InternalLink> for virtual clusters.

* Fixed a bug that caused <InternalLink version="v23.2" path="take-full-and-incremental-backups">backups</InternalLink> to fail if there are tables and functions of the same name.

* Fixed edge cases in decimal and float evaluation for division operators. `'NaN'::DECIMAL / 0` will now return `NaN` instead of a division-by-zero error, and `0 / 'inf'::DECIMAL` will return `0` instead of `0E-2019`.

* Fixed a bug present since before v22.2 that could cause a query with `LIMIT` and `ORDER BY` to return results in the wrong order. This bug could cause incorrect results as well if the `LIMIT` was nested within an outer query (e.g., under another `LIMIT` ).

* Added missing `SQLInstanceIDs` used to execute the statement to the telemetry `SampledQuery` event.

* Fixed a bug where inserting geometries into a table with an inverted index involving a NaN coordinate could result in a panic. This now produces errors instead.

* Avoid displaying `undefined` regions on the <InternalLink version="v23.2" path="ui-databases-page">Databases page</InternalLink>.

* The <InternalLink version="v23.2" path="cockroach-userfile-upload">`cockroach userfile upload` command</InternalLink> uses less memory when uploading a file.

* `CASE`, `IF`, `COALESCE`, and `IFNULL` expressions now return an error when passed a generator function as an argument. This mirrors the behavior of PostgreSQL.

* Fixed a bug that allowed views created with `CREATE OR REPLACE VIEW` to reference user-defined types in other databases, even with `sql.cross_db_views.enabled` set to `false`. This bug was present since user-defined types were introduced in v20.1.

* Removed a source of unnecessary Raft snapshots during replica movement.

* Fixed a bug where in rare situations nodes would get stuck during start-up. It would manifest itself through a stack frame sitting on a select in `waitForAdditionalStoreInit` for extended periods of time (i.e., minutes).

* Fixed a bug that caused internal errors when using an aggregate function in an `ORDER BY` clause of a <InternalLink version="v23.2" path="delete">`DELETE`</InternalLink> or <InternalLink version="v23.2" path="update">`UPDATE`</InternalLink> statement. Aggregate functions are no longer allowed in these contexts. The bug has been present since at least v20.2.

* The filter on the <InternalLink version="v23.2" path="ui-statements-page">Statements page</InternalLink> works when application name is an empty string.

* The <InternalLink version="v23.2" path="ui-transactions-page#transaction-details-page">Transaction Details page</InternalLink> now loads with the fingerprint details even if no application is specified in the URL.

* The <InternalLink version="v23.2" path="ui-insights-page#schema-insights-tab">Schema Insights page</InternalLink> no longer times out.

* The last SQL statement in a user-defined function with a `VOID` return type can now produce any number of columns of any type. This bug was present since UDFs were introduced in v22.2.

* Fixed a bug that caused nodes to crash when attempting to `EXECUTE` a prepared statement with an argument that referenced a user-defined function. This bug was present since user-defined functions were introduced in v22.2.

* Fixed a bug where a release <InternalLink version="v23.2" path="savepoint">save point</InternalLink> could incorrectly emit a "cannot publish new versions for descriptors" error instead of a retryable error.

* Users with the `VIEWACTIVITY` privilege now are able to see other users sessions from both the CLI and the DB Console.

* Fixed a bug in <InternalLink version="v23.2" path="cockroach-demo">`cockroach demo`</InternalLink> whereby `\demo add` could sometimes crash with an error " `index out of range [...] with length...` ". This bug had been introduced in v19.x.

* Fixed a bug introduced in v20.2 where the command `\demo decommission` in `cockroach demo` could leave the demo cluster in a broken state.

* Fixed a bug where <InternalLink version="v23.2" path="cockroach-start">`cockroach start`</InternalLink> would sometimes incorrectly hang upon shutting down a server after encountering an internal error. This bug had been introduced some time in v22.x.

* Fixed a bug in the index recommendations provided in the <InternalLink version="v23.2" path="explain">`EXPLAIN`</InternalLink> output where `ALTER INDEX... VISIBLE` index recommendations may suggest making the wrong index visible when there are multiple invisible indexes in a table.

* Users with the <InternalLink version="v23.2" path="grant">`VIEWACTIVITY` privilege</InternalLink> can now view correct values for timezones.

* Fixed a bug present since v23.1.0 that would cause queries on the `pg_catalog.pg_statistic_ext` table to fail if a table was dropped recently. This bug also caused the `\d` CLI shortcut to encounter errors.

* Fixed a bug where `pg_attribute` and `pg_attrdef` did not properly return results for generated columns.

* Fixed a bug where a `SpanStatsRequest` would return post-replicated MVCC stats. Now, a `SpanStatsRequest` returns the logical MVCC stats for the requested span.

* Fixed the column name on the selects on the tables `crdb_internal.node_txn_execution_insights` and `crdb_internal.cluster_txn_execution_insights` upon the creation of `debug.zip`.

* Fixed the type resolution logic for `CASE` statements to more closely match Postgres' logic. In particular, we now adhere to rule 5 listed in the [PostgreSQL documentation](https://www.postgresql.org/docs/current/typeconv-union-case), which requires that we select the first non-unknown input type as the candidate type, then consider each other non-unknown input type, left to right ( `CASE` treats its `ELSE` clause (if any) as the "first" input, with the `THEN` clauses(s) considered after that). If the candidate type can be implicitly converted to the other type, but not vice-versa, select the other type as the new candidate type. Then continue considering the remaining inputs. If, at any stage of this process, a preferred type is selected, stop considering additional inputs (note that CockroachDB does not yet support the concept of a "preferred type").

* Fixed an issue on the <InternalLink version="v23.2" path="ui-overview-dashboard">Metrics page</InternalLink> where no metrics would load when viewing metrics for a virtual cluster with a hyphenated name in a global context.

* Fixed a potential livelock between a high-priority transactional read and a normal-priority write. The read pushes the timestamp of the write, but if the read gets pushed as well, it may repeatedly fail to refresh because it keeps encountering the intent of the write.

* Fixed a nil dereference panic during node startup that could be caused by an incorrect initialization order.

* The `difference` built-in had its return type incorrectly set to a string instead of an integer.

* Fixed a bug that could cause a transaction performing multiple parallel foreign key checks to return a `concurrent txn use detected` error.

* Fixed a bug causing performance regression when disabling `sql.metrics.statement_details.enabled` which caused execution stats to be collected for all queries instead of the default one percent.

* Fixed a bug where certain SQL session variables meant to be hidden from introspection were showing up in `information_schema.session_variables`, which was incoherent with the handling in `pg_catalog.pg_settings`.

* CockroachDB now properly handles RPC failures on writes using the parallel commit protocol that execute in parallel to the commit operation, avoiding incorrect retryable failures and `transaction unexpectedly committed` assertions by detecting when writes cannot be retried idempotently, instead returning an `AmbiguousResultError`.

* Fixed a bug where dependencies on sequences from tables would be reported with the wrong value for the `classid` column in the `pg_catalog.pg_depend` table.

* Two `ALTER RANGE default CONFIGURE ZONE` statements on the same line no longer displays an error.

* Fixed a DB Console issue where the `DROP_UNUSED` index recommendations produced by the table details page produced an invalid `DROP INDEX` statement.

* Removed buggy <InternalLink version="v23.2" path="row-level-ttl">TTL</InternalLink> descriptor repair. Previously, upgrading from v22.2.X to v23.1.9 incorrectly removed TTL storage parameters from tables (visible by running a `SHOW CREATE TABLE <ttl-table>;` statement) while attempting to repair table descriptors. This resulted in the node that attempted to run the TTL job crashing due to a panic caused by the missing TTL storage parameters.

* `cockroach debug pebble` commands now work correctly with encrypted stores which don't use the default `cockroach-data` path without having to also pass `--store`.

* Fixed a bug where `CREATE INDEX` for <InternalLink version="v23.2" path="partial-indexes">partial indexes</InternalLink> could fail with `ERROR: duplicate key value violates unique constraint` if concurrent inserts happened simultaneously.

* Observability pages no longer crash when they encounter zeros (e.g., a session with no memory allocated).

* Removed the <InternalLink version="v23.2" path="cluster-settings">cluster setting</InternalLink> `kv.snapshot_recovery.max_rate`:
  * In v23.2, this setting is disabled; it is a no-op. If you previously set `kv.snapshot_recovery.max_rate` on a cluster running v23.1 and upgraded to v23.2, the setting is ignored, and the <InternalLink version="v23.2" path="cluster-settings">`kv.snapshot_rebalance.max_rate`</InternalLink> setting is used instead.
  * In v24.1 and later, this setting is removed entirely. If you had previously set `kv.snapshot_recovery.max_rate` prior to upgrade, it will be cleared, and any attempts to set it will fail with the error message: `ERROR: unknown cluster setting 'kv.snapshot_recovery.max_rate'`.

* Fixed a bug in which a `CREATE FUNCTION` may produce a syntax error if the UDF body wrapped in tagged dollar quotes (e.g., `$func$`), contains two consecutive dollar signs `$$`. If the UDF body is known to contain dollar signs, then the caller should use tagged dollar quotes or single quotes when defining the UDF. For example:

  ```sql theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
   CREATE FUNCTION f(a STRING) RETURNS STRING LANGUAGE SQL AS $func$ SELECT concat('$$', a); $func$
  ```

* CockroachDB now prevents setting `max_range_size` below the `COCKROACH_MIN_RANGE_MAX_BYTES` environment variable, which defaults to 64 MiB (half of the default minimum range size).

* Fixed a bug that could occasionally cause schema change jobs, such as table or index drops, to appear stuck in state "waiting for MVCC GC" for much longer than expected. The fix only applies to future schema changes. To process existing stuck jobs, manually force-enqueue the relevant ranges in the MVCC GC queue from the DB Console's [Advanced Debug](https://cockroachlabs.com/docs/v23.2/ui-debug-pages) page.

* Fixed a bug introduced when the `ChartCatalog` API endpoint was introduced, where the endpoint did not correctly report the unit of metrics.

* Fixed a bug that could occur when the "multiple active portals" execution mode (Preview) was enabled to evaluate queries such as lookup joins. The bug could result in an internal error like `unexpected 40960 leftover bytes` if the portal was not fully consumed.

* Fixed a bug where an `ALTER TABLE... ADD CONSTRAINT CHECK...` statement that utilized a user-defined function in the `CHECK` could cause a validation error.

* Fixed a bug where `RESET (ttl_expire_after)` could incorrectly remove `ttl_expiration_expression`.

* Fixed a bug where the `format_type` built-in did not honor `typemod` information for array types, leading to incorrect output.

* Fixed a bug introduced in v22.2 that incorrectly allowed users without the `EXECUTE` privilege to execute a user-defined function.

### Performance improvements

* The <InternalLink version="v23.2" path="cost-based-optimizer">optimizer</InternalLink> now plans inverted index scans for queries using `IN` or the `=` operators without the fetch val ( `->` ) operator. For example: `json_col = '{"b":"c"}' OR json_col IN ('"a"', '1')`
* Queries that have subqueries in equality expressions are now more efficiently planned by the optimizer.
* Query planning time has been reduced for some queries with multiple <InternalLink version="v23.2" path="joins">joins</InternalLink>.
* CockroachDB now enables the pacing mechanism in rangefeed closed timestamp notifications, by setting the default `kv.rangefeed.closed_timestamp_smear_interval` cluster setting to 1ms. This makes rangefeed closed timestamp delivery more uniform and less spikey, which reduces its impact on the Go scheduler and, ultimately, foreground SQL latencies.
* Some large, long-running <InternalLink version="v23.2" path="insert">`INSERT`</InternalLink> statements now perform less work during their commit phase and can run faster.
* Ranges now only quiesce after 3 seconds without proposals, to avoid frequent unquiescence which incurs an additional Raft proposal. This is configurable via the `COCKROACH_QUIESCE_AFTER_TICKS` environment variable, which defaults to 6.
* SQL statements that must clean up intents from many different previously abandoned transactions now do so moderately more efficiently.
* The optimizer can now avoid a grouping stage in more cases when de-duplicating the input to an <InternalLink version="v23.2" path="upsert">`UPSERT`</InternalLink> or `INSERT... ON CONFLICT` statement.
* The optimizer can now eliminate joins in more cases.
* CockroachDB now improves the time to disk space reclamation when deleting rows. Previously, in scenarios where rows had large variations in row size, it was possible for disk space to not be reclaimed after MVCC garbage collection deleted the rows.
* CockroachDB now has improved disk space reclamation heuristics, making disk space reclamation more timely.
* `bool_and` and `bool_or` aggregates will now scale linearly instead of quadratically when used as a window function with a non-shrinking window,
* CockroachDB now has reduced lock contention on `ssmemstorage.RecordStatement`. This is useful for workloads that execute the same statement concurrently on the same SQL instance.
* The optimizer now produces more efficient query plans in some cases for queries with subqueries and user-defined functions.
* The default Raft entry cache size has been increased from 16 MB to 1/256 of system memory with a minimum of 32 MB, divided evenly between all stores. This can be configured using the `COCKROACH_RAFT_ENTRY_CACHE_SIZE` environment variable.
* CockroachDB now automatically collects table statistics on the `system.jobs` table, which will enable the optimizer to produce better query plans for internal queries that access the `system.jobs` table. This may result in better performance of the system.
* The impact of high concurrency blind writes to the same key on goroutine scheduling latency was reduced.
* <InternalLink version="v23.2" path="change-data-capture-overview">Changefeeds</InternalLink> to Webhook or Pub/Sub endpoints now support much higher throughput
* This release improved the cost of resolving a user-defined enum type that has many values.
* Queries that compare collated strings now use less memory and may execute faster.
* Added a scheduler based rangefeed processor which improves rangefeed and changefeed performance for very large tables. The new processor is disabled by default, but can be enabled by setting `kv.rangefeed.scheduler.enabled` cluster setting to `true`.
* This release disables `sql.defaults.zigzag_join.enabled` by default.

### Build changes

* Go has been upgraded to 1.20.8.
* The top-level `Makefile` was replaced by a stub `GNUmakefile` which defers its behavior to `dev`. The common targets `make [all]`, `make test`, and `make install` remain for compatibility with most UNIX installation guides. The previous `make` rules remain available via `make -C build/GNUmakefile.obsolete`.

### Contributors

This release includes 3208 merged PRs by 124 authors.
