Как обновить 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/



2022-04-15T16:50:02
Software