#  Версионирование

## Политика версионирования продукта {: #product }

Picodata как программный продукт использует формат обозначения версий,
основанный на семантике [CalVer](https://calver.org/) с отдельными
элементами [SemVer](https://semver.org/lang/ru/). Номер версии имеет
следующий формат:

```plain
YY.MINOR.PATCH[-N-gHASH]
```

Пример:

```plain
25.5.1-1-g8065ebc2
```

где:

- `YY` — год выпуска версии
- `MINOR` — порядковый номер выпуска в году
- `PATCH` — порядковый номер исправления
- `N` — количество коммитов с последнего git-тега (для отладочных версий)
- `HASH` — хеш коммита (для отладочных версий)

Разработка новых функций и исправлений ведется в ветке `master` нашего
[Git-репозитория](https://git.picodata.io/core/picodata/-/tree/master).

Мы придерживаемся следующего распорядка при разработке:

- Версия из двух чисел `YY.MINOR` определяет набор функций,
  запланированных на данную серию выпусков
- Версия из трех чисел `YY.MINOR.PATCH` описывает конкретный выпуск с
  исправлениями
- Версия в полном формате `YY.MINOR.PATCH-N-gHASH` описывает отладочную
  сборку на конкретном git-коммите

Текущая политика версионирования применяется с версии 24.1.

См. также:

- [Gitlab — Changelog](https://git.picodata.io/core/picodata/-/blob/master/CHANGELOG.md)
- [Gitlab — Tags](https://git.picodata.io/core/picodata/-/tags)

## Версионирование инстансов и кластера {: #cluster }

Версии отдельных инстансов Picodata в кластере могут различаться
максимум на 1 минорное значение. Например, в кластере могут одновременно
работать инстансы с Picodata 25.4 и 25.5. Если различие больше, то такие
инстансы не смогут образовать единый кластер.

### Версия Picodata {: #picodata_version }

Для получения текущей версии исполняемого файла `picodata`, введите в
терминале команду:

```shell
picodata --version
```

Команда вернёт информацию о версиях и типах сборки для Picodata и
Tarantool. Пример вывода:

```shell
picodata 25.5.0-1906-gcb60b488d, static, debug
tarantool 2.11.5-323-g4a3879c19, RelWithDebInfo
```

См. также:

- [Аргументы командной строки](../reference/cli.md)

### Версия кластера {: #cluster_version }

Версия кластера — это версия наиболее старого инстанса в кластере.
Узнать версию кластера можно, [подключившись] к Picodata и введя
следующий SQL-запрос:

```sql
SELECT * FROM _pico_property WHERE key='cluster_version';
```

Пример вывода:

```sql
+-----------------+------------------------+
| key             | value                  |
+==========================================+
| cluster_version | 25.5.0-1906-gcb60b488d |
+-----------------+------------------------+
(1 rows)
```

Отслеживать это значение полезно при обновлении Picodata: кластер
перейдёт на новую версию только после того как все инстансы обновятся на
неё.

[подключившись]: ../tutorial/connecting.md

См. также:

- [Обновление кластера](../admin/cluster_update.md)

### Версия системного каталога {: #system_catalog_version }

Системный каталог — совокупность [системных таблиц] кластера с префиксом
`_pico`. Содержимое системного каталога определяет то, какие объекты
доступны в СУБД.

Узнать версию системного каталога можно, [подключившись] к Picodata и введя
следующий SQL-запрос:

```sql
SELECT * FROM _pico_property WHERE key='system_catalog_version';
```

Пример вывода:

```sql
+------------------------+--------+
| key                    | value  |
+=================================+
| system_catalog_version | 26.1.0 |
+------------------------+--------+
(1 rows)
```

Важно помнить:

- версия системного каталога — служебное значение, которое обычно не
  совпадает с [версией кластера](#cluster_version) или [основного
  продукта](#picodata_version)
- изменение версии системного каталога означает модификацию [системных таблиц]
  и схемы данных СУБД. Соответственно, инстансы с разной версией
  системного каталога не смогут объединиться в один кластер.

[системных таблиц]: ../architecture/system_tables.md
