Выпущена новая версия 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/