Как обновить PostgreSQL с 13 до 14

Выпущена новая версия PostgreSQL 14 . Есть несколько способов обновить старую версию 13, и самый простой из них — использовать инструмент pg_upgrade . Вот краткое руководство для систем Ubuntu (или Debian). И, пожалуйста, не забудьте сделать резервную копию ваших данных!

Обновите пакеты и установите новый PostgreSQL 14.

sudo apt-get update
sudo apt-get install postgresql-14 postgresql-server-dev-14

Проверьте, нет ли различий в файлах конфигурации.

diff /etc/postgresql/13/main/postgresql.conf /etc/postgresql/14/main/postgresql.conf
diff /etc/postgresql/13/main/pg_hba.conf /etc/postgresql/14/main/pg_hba.conf

Остановите службу PostgreSQL.

sudo systemctl stop postgresql.service

Войдите как postgresпользователь.

sudo su - postgres

Проверьте кластеры (обратите внимание на --checkаргумент, это не изменит никаких данных).

/usr/lib/postgresql/14/bin/pg_upgrade \
  --old-datadir=/var/lib/postgresql/13/main \
  --new-datadir=/var/lib/postgresql/14/main \
  --old-bindir=/usr/lib/postgresql/13/bin \
  --new-bindir=/usr/lib/postgresql/14/bin \
  --old-options '-c config_file=/etc/postgresql/13/main/postgresql.conf' \
  --new-options '-c config_file=/etc/postgresql/14/main/postgresql.conf' \
  --check

Перенесите данные (без --checkаргумента).

/usr/lib/postgresql/14/bin/pg_upgrade \
  --old-datadir=/var/lib/postgresql/13/main \
  --new-datadir=/var/lib/postgresql/14/main \
  --old-bindir=/usr/lib/postgresql/13/bin \
  --new-bindir=/usr/lib/postgresql/14/bin \
  --old-options '-c config_file=/etc/postgresql/13/main/postgresql.conf' \
  --new-options '-c config_file=/etc/postgresql/14/main/postgresql.conf'

Вернитесь к обычному пользователю.

exit

Поменяйте местами порты для старой и новой версий PostgreSQL.

sudo vim /etc/postgresql/14/main/postgresql.conf
# ...and change "port = 5433" to "port = 5432"

sudo vim /etc/postgresql/13/main/postgresql.conf
# ...and change "port = 5432" to "port = 5433"

Запустите службу PostgreSQL.

sudo systemctl start postgresql.service

Войдите postgresснова как пользователь.

sudo su - postgres

Проверьте новую версию PostgreSQL.

psql -c "SELECT version();"

Запустите рекомендуемую vacuumdbкоманду:

/usr/lib/postgresql/14/bin/vacuumdb --all --analyze-in-stages

В настройках по умолчанию в PostgreSQL 14 есть одно важное изменение. Собственно, вы могли заметить его, проверяя различия в конфигурационных файлах: шифрование паролей. Раньше это был MD5, теперь SHA256. Таким образом, если вы использовали конфигурацию по умолчанию, ваши клиенты не смогут подключиться к новой базе данных. А так как PostgreSQL не знает исходных паролей в открытом виде, вам придется установить их снова для всех пользователей вашей базы данных.

Для этого подключитесь к новой базе данных:

psql

Вы можете перечислить всех существующих пользователей базы данных:

\du

Чтобы изменить (или установить заново) пароль пользователя, вы можете использовать следующую команду (повторить для каждого пользователя):

\password user_name

Теперь вы можете выйти из psql.

\q

И вернуться к обычному пользователю.

exit

Проверьте, какие старые пакеты PostgreSQL установлены.

apt list --installed | grep postgresql

Удалите старые пакеты PostgreSQL (из списка выше).

sudo apt-get remove postgresql-13 postgresql-server-dev-13

Удалите старую конфигурацию.

sudo rm -rf /etc/postgresql/13/

Войдите как postgresпользователь еще раз.

sudo su - postgres

Наконец, удалите старые данные кластера.

./delete_old_cluster.sh

Готово!

PS: Если вы хотите перейти на Postgres 13 или более раннюю версию, ознакомьтесь с более ранним руководством , в этом процессе есть некоторые важные изменения.

Источник: https://www.kostolansky.sk/posts/upgrading-to-postgresql-14/

Was this helpful?

0 / 0