Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

Исправление значений decimal в vinyl-спейсах при обновлении до 2.10.1

Это руководство по обновлению описывает исправление конкретной проблемы, которая могла возникнуть со значениями decimal в vinyl-спейсах. Оно применимо только при обновлении с Tarantool версии <= 2.10.0 до версии >= 2.10.1.

До исправления 6377 значения decimal и double в индексе типа scalar или number могли оказаться в неправильном порядке после обновления. Если такой индекс был построен для спейса, использующего движок vinyl, индекс сохраняется на диске и не перестраивается даже после обновления. В этом случае необходимо перестроить затронутые индексы вручную.

Ниже приведены критерии для определения, затронута ли ваша установка. Если все перечисленные ниже утверждения верны, необходимо вручную перестроить индексы для затронутых vinyl-спейсов.

  • Использовалась Tarantool версии 2.10.0 и ниже.
  • Имеются спейсы с движком хранения vinyl.
  • В vinyl-спейсах есть индексы типа number или scalar.
  • Кортежи в этих спейсах могут содержать как значения decimal, так и значения double типа Inf или NaN. Если это относится к вашей установке, можно выполнить следующий скрипт, который найдет все затронутые индексы:
../_includes/script_find_indices.rst

Индексы, требующие перестроения, будут сохранены в таблице require_rebuild. Если таблица пуста, ваша установка не затронута, и можно продолжать использовать Tarantool как прежде.

Если таблица require_rebuild содержит записи, можно перестроить затронутые индексы с помощью следующего скрипта.

../_includes/script_rebuild_indices.rst

Скрипт может завершиться ошибкой для некоторых индексов со следующим сообщением: "Cannot rebuild primary index index_name on space space_name. Please, recreate the space manually". В этом случае автоматическое перестроение индекса невозможно, и для обеспечения целостности данных необходимо пересоздать спейс вручную:

  1. Создайте новый спейс с тем же форматом, что и у существующего.
  2. Определите те же индексы в созданном спейсе.
  3. Выполните итерацию по первичному ключу старого спейса и вставьте все данные в новый спейс.
  4. Удалите старый спейс.