﻿# Обновление контейнера PostgreSQL 12 и ниже до версии 18

> [HTML Version](upgrading-postgresql-container-10-to-15.html)

При обновлении PostgreSQL до основной версии необходимо обновить версию \[OBJECT\] запущенного пода до более поздней версии PostgreSQL. Также нужно пересоздать хранилище для обновления данных, которые хранятся в файлах данных PostgreSQL.

Обновление контейнера PostgreSQL состоит из нескольких этапов:

1. [Резервное копирование базы данных.](#database-backup)

2. [Установка PostgreSQL 18 в kubernetes-кластер.](#install-postgresql15)

3. [Пересоздание хранилища.](#re-creating-repository)

4. [Запуск PostgreSQL.](#start-postgresql)

5. [Восстановление базы данных.](#database-recovery)

## Шаг 1. Резервное копирование базы данных

Перед выполнением любых действий, связанных с обновлением, создайте резервную копию данных и конфигурации PostgreSQL. О том, как это сделать, читайте в статье [«Резервное копирование и восстановление баз данных»](database-backup-and-recovery.md).

````
начало внимание

````
Если на сервере PostgreSQL имеются сторонние базы данных, их резервные копии также необходимо создать.

````
конец внимание

````
Резервное копирование базы данных PostgreSQL без использования утилиты elma365-backupper

1. Перенаправьте порт в контейнер с PostgreSQL:

````
kubectl port-forward -n <<namespace>> pods/postgres-0 5477:5432

2. ````
С помощью утилиты \[OBJECT\] создайте резервную копию базы данных \[OBJECT\]:

````
pg\_dump -h localhost -p 5477 -U postgres -W elma365 -Fc > path/to/elma365.bak 
````

## ````
Шаг 2. Установка PostgreSQL 18 в kubernetes-кластер

1. Остановите контейнер \[OBJECT\]:

````
kubectl scale -n <<namespace>> statefulset -l app.kubernetes.io/instance=<<namespace>>,app.kubernetes.io/name=postgresql --replicas 0

2. ````
Сохраните конфигурацию \[OBJECT\] пода \[OBJECT\] в файл \[OBJECT\]:

````
kubectl get statefulsets -n <<namespace>> -lapp.kubernetes.io/instance=<<namespace>>,app.kubernetes.io/name=postgresql -o yaml > path/to/postgresql.yaml

3. ````
Откройте файл \[OBJECT\] командой:

````
sudo nano path/to/postgresql.yaml

````
В этом файле замените версию \[OBJECT\] на \[OBJECT\].

4. Примените изменения для пода \[OBJECT\]:

````
kubectl apply -f path/to/postgresql.yaml

## ````
Шаг 3. Пересоздание хранилища

Удалите хранилище \[OBJECT\]:

````
kubectl delete pvc -n <<namespace>> -l app.kubernetes.io/instance=<<namespace>>,app.kubernetes.io/name=postgresql --wait=false

## ````
Шаг 4. Запуск PostgreSQL

Запустите контейнер \[OBJECT\]:

````
kubectl scale -n <<namespace>> statefulset -l app.kubernetes.io/instance=<<namespace>>,app.kubernetes.io/name=postgresql --replicas 1

## ````
Шаг 5. Восстановление базы данных

О том, как это сделать, читайте в статье [«Резервное копирование и восстановление баз данных»](database-backup-and-recovery.md).

Восстановление базы данных PostgreSQL без использования утилиты elma365-backupper

1. Перенаправьте порт в контейнер с PostgreSQL командой:

````
kubectl port-forward -n <<namespace>> pods/postgres-0 5477:5432 

2. ````
С помощью утилиты \[OBJECT\] восстановите базу данных \[OBJECT\]:

````
pg\_restore -h localhost -p 5477 -U postgres -W -Fc -d elma365 < elma365.bak
````