.. _version_6.4.6:

=============
Version 6.4.6
=============

Released on 2026-10-08.

.. NOTE::

    If you are upgrading a cluster, you must be running CrateDB 5.0.0 or higher
    before you upgrade to 6.4.6.

    We recommend that you upgrade to the latest 6.3 release before moving to
    6.4.6.

    A rolling upgrade from >= 6.3.0 to 6.4.6 is supported.
    Before upgrading, you should `back up your data`_.

.. WARNING::

    Tables that were created before CrateDB 5.x will not function with 6.x
    and must be recreated before moving to 6.x.x.

    You can recreate tables using ``COPY TO`` and ``COPY FROM`` or by
    `inserting the data into a new table`_.

.. _back up your data: https://cratedb.com/docs/crate/reference/en/latest/admin/snapshots.html
.. _inserting the data into a new table: https://cratedb.com/docs/crate/reference/en/latest/admin/system-information.html#tables-need-to-be-recreated

.. rubric:: Table of contents

.. contents::
   :local:


See the :ref:`version_6.4.0` release notes for a full list of changes in the 6.4
series.

Fixes
=====

- Fixed an issue that could cause PostgreSQL wire protocol clients to receive an
  error like ``server sent data ("D" message) without prior row description ("T"
  message)`` if executing write operations followed by a read operation using
  pipelining.

- Fixed an issue that could cause ``= ANY (...)`` or ``IN (...)`` expressions to
  fail on columns of type ``UUID`` or ``NUMERIC``.

- Fixed a rounding error if casting timestamp or long values before 1970-01-01
  to ``date``.

- Fixed an issue that caused order-sensitive aggregations
  (``string_agg``, ``array_agg``) applied on top of ``UNION ALL ... ORDER BY``
  to return incorrect results.

- Fixed an issue that could cause window functions using ``RANGE`` with
  integral ``PRECEDING``/``FOLLOWING`` bounds to compute frames incorrectly due
  to boundary overflow.

- Fixed incorrect ``RANGE`` and ``ROWS`` window frames caused by overflow when
  large frame bounds were narrowed before evaluation. Explicit ``NULL`` frame
  bounds and negative ``ROWS`` offsets now raise an error.

- Fixed an issue that caused ``CREATE SNAPSHOT`` to fail if repository had at
  least one snapshot created before and backend storage's DELETE API was
  temporarily unavailable.

- Fixed an issue that caused ``NULL`` to always be returned for
  ``numeric_scale`` of :ref:`information_schema.columns
  <information_schema_columns>` table. Now it returns the defined ``scale`` for
  ``NUMERIC``, ``0`` for integral numeric types (``BYTE``, ``SHORT``,
  ``INTEGER``, ``LONG``) and ``NULL`` for all other types.

- Fixed an issue, introduced with :ref:`version_6.3.0`, which caused
  :ref:`RESTORE SNAPSHOT <sql-restore-snapshot>` to always restore all
  :ref:`foreign tables <ref-create-foreign-table>` contained in the snapshot,
  even if they weren't requested. Foreign tables are now only restored together
  with their :ref:`servers <ref-create-server>`, e.g. by using
  ``RESTORE SNAPSHOT ... ALL`` or ``RESTORE SNAPSHOT ... METADATA``. A foreign
  table restored explicitly with ``RESTORE SNAPSHOT ... TABLE`` doesn't restore
  its server and user mappings, so it's unusable unless they already exist or
  created manually.

- Fixed a rare race condition causing the ``query`` CircuitBreaker’s state not
  to be reset after ``KILL`` or ``CircuitBreakingException``, and leading to
  consequent queries to fail with false positive ``CircuitBreakingException``.

- Fixed a race condition in ``EXPLAIN ANALYZE`` that could cause an intermittent
  ``NullPointerException``.

- Fixed an issue that could cause logical replication of new partitions to fail
  after restarting publisher nodes.

- Fixed an issue that caused :ref:`pg_catalog.pg_publication <pg_publication>`
  and :ref:`pg_catalog.pg_publication_tables <pg_publication_tables>` to only
  show the publications owned by the current user, even for superusers and
  users with the :ref:`AL <privilege_types_al>` privilege. Superusers and users
  with ``AL`` can now see all publications.

- Fixed an issue that caused a ``>`` or ``>=`` comparison on the
  :ref:`distance <scalar-distance>` function in a ``WHERE`` clause, e.g.
  ``WHERE distance(p, 'POINT (0 0)') > 100``, to also match rows where the
  :ref:`GEO_POINT <data-types-geo-point>` column ``p`` is ``NULL``.

- Fixed an issue that caused ``WHERE distance(p, ...) IS NULL`` to fail with an
  ``IndexOutOfBoundsException``, and comparisons like
  ``WHERE distance(p, NULL) > 100`` to fail with a ``NullPointerException``.

- Fixed an issue where :ref:`ORDER BY <sql-select-order-by>` using a
  :ref:`REAL <type-real>` or :ref:`DOUBLE PRECISION <type-double-precision>`
  column returned values of ``Infinity`` as ``NULL``.

- Fixed a performance regression introduced in :ref:`version_6.4.3` that
  affected all queries running over ``HTTP`` protocol with password
  authentication.

- Fixed an issue where rows with ``NaN`` were not returned when a range filter
  was used and the predicate evaluated to true
