Обновление версии PostgreSQL
Вы можете обновить версию PostgreSQL в кластере Managed Service for PostgreSQL до версии 18 или ниже. При этом обновление мажорной версии возможно только последовательно, по одной версии за раз.
Примечание
Обновление обычной версии до версий для «1С:Предприятие» (например, с версии 14 на версию 14-1с) недоступно.
Продолжительность обновления зависит от количества баз данных и количества объектов в каждой из них. Чем больше баз данных и объектов, тем дольше будет выполняться обновление.
Подробнее об обновлении версии см. в разделе Обновление мажорной версии PostgreSQL в Managed Service for PostgreSQL.
Об обновлениях в рамках одной версии и обслуживании хостов см. в разделе Техническое обслуживание.
Перед обновлением версии
Убедитесь, что это не нарушит работу ваших приложений:
- Посмотрите в истории изменений
PostgreSQL, как обновления могут повлиять на работу ваших приложений или установленных расширений. - Попробуйте обновить версию на тестовом кластере. Его можно развернуть из резервной копии основного кластера.
- Создайте резервную копию основного кластера непосредственно перед обновлением версии.
Обновить версию PostgreSQL
Важно
Для обновления мажорной версии должно быть свободно:
- для дисков объемом не более 100 ГБ — не менее 10% объема хранилища;
- для дисков объемом более 100 ГБ — не менее 10 ГБ.
- Перейдите в сервис Managed Service for PostgreSQL.
- Выберите нужный кластер в списке и нажмите кнопку
Редактировать. - В поле Версия выберите номер новой версии.
- Нажмите кнопку Сохранить изменения.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Чтобы обновить кластер до версии PostgreSQL 15 или ниже:
-
Получите список ваших кластеров PostgreSQL командой:
yc managed-postgresql cluster list -
Получите информацию о нужном кластере и проверьте версию PostgreSQL, указанную в свойстве
config.version:yc managed-postgresql cluster get <имя_или_идентификатор_кластера> -
Запустите обновление PostgreSQL:
yc managed-postgresql cluster update <имя_или_идентификатор_кластера> \ --postgresql-version <номер_новой_версии>
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание кластера.
Полный список доступных для изменения полей конфигурации кластера Managed Service for PostgreSQL см. в документации провайдера Terraform.
-
Добавьте в блок
cluster_configнужного кластера Managed Service for PostgreSQL полеversionили измените его значение, если оно уже существует:resource "yandex_mdb_postgresql_cluster" "<имя_кластера>" { ... cluster_config { version = "<версия_PostgreSQL>" } } -
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
Ограничения по времени
Провайдер Terraform ограничивает время на выполнение операций с кластером Managed Service for PostgreSQL:
- создание, в том числе путем восстановления из резервной копии, — 30 минут;
- изменение — 60 минут;
- удаление — 15 минут.
Операции, длящиеся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию кластера блок
timeouts, например:resource "yandex_mdb_postgresql_cluster" "<имя_кластера>" { ... timeouts { create = "1h30m" # Полтора часа update = "2h" # 2 часа delete = "30m" # 30 минут } } -
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Воспользуйтесь методом Cluster.Update и выполните запрос, например, с помощью cURL
:Важно
Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
updateMask(одной строкой через запятую).curl \ --request PATCH \ --header "Authorization: Bearer $IAM_TOKEN" \ --header "Content-Type: application/json" \ --url 'https://mdb.api.yandexcloud.kz/managed-postgresql/v1/clusters/<идентификатор_кластера>' \ --data '{ "updateMask": "configSpec.version", "configSpec": { "version": "<версия_PostgreSQL>" } }'Где:
-
updateMask— перечень изменяемых параметров в одну строку через запятую.В данном случае передается только один параметр.
-
configSpec.version— новая версия PostgreSQL.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiДалее предполагается, что содержимое репозитория находится в директории
~/cloudapi/. -
Воспользуйтесь вызовом ClusterService.Update и выполните запрос, например, с помощью gRPCurl
:Важно
Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
update_mask(в виде массива строкpaths[]).Формат перечисления настроек
"update_mask": { "paths": [ "<настройка_1>", "<настройка_2>", ... "<настройка_N>" ] }grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/mdb/postgresql/v1/cluster_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d '{ "cluster_id": "<идентификатор_кластера>", "update_mask": { "paths": [ "config_spec.version" ] }, "config_spec": { "version": "<версия_PostgreSQL>" } }' \ mdb.api.yandexcloud.kz:443 \ yandex.cloud.mdb.postgresql.v1.ClusterService.UpdateГде:
-
update_mask— перечень изменяемых параметров в виде массива строкpaths[].В данном случае передается только один параметр.
-
config_spec.version— новая версия PostgreSQL.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
После запуска обновления кластер переходит в статус UPDATING. Дождитесь окончания операции и проверьте версию кластера.
Время обновления кластера зависит от размера базы данных.
Совет
Если с переходом на версию 18 возникнут проблемы, обратитесь в техническую поддержку
Примеры
Допустим, нужно обновить кластер с версии 14 до версии 15.
-
Чтобы получить список кластеров и узнать их идентификаторы и имена, выполните команду:
yc managed-postgresql cluster list+----------------------+---------------+---------------------+--------+---------+ | ID | NAME | CREATED AT | HEALTH | STATUS | +----------------------+---------------+---------------------+--------+---------+ | c9q8p8j2gaih******** | postgre406 | 2021-10-23 12:44:17 | ALIVE | RUNNING | +----------------------+---------------+---------------------+--------+---------+ -
Чтобы получить информацию о кластере с именем
postgre406, выполните команду:yc managed-postgresql cluster get postgre406id: c9q8p8j2gaih******** ... config: version: "14" ... -
Для обновления кластера
postgre406до версии 15, выполните команду:yc managed-postgresql cluster update postgre406 --postgresql-version 15