Archiwum: aktualizacja PG10 -> PG12

W systemie Ubuntu nie zarządzamy klastrami przy pomocy standardowej komendy initdb, zamiast tego używamy komend  pg_lsclusters, pg_dropcluster, and pg_createcluster, które są tak naprawdę wrapperami do initdb.

Aktualizacja klastra z PostgreSQL 10 do PostgreSQL 12

Ważna uwaga!

Zanim przystąpisz do operacji upewnij się, że na na partycji z klastrem Postgresa (jego lokalizacja to zwykle /var/lib/postgresql) jest co najmniej tyle wolnego miejsca ile zajmuje cały klaster.

Pomocne będą komendy du (sprawdzanie aktualne objętości katalogu) i df (sprawdzanie zajętego/wolnego miejsca na partycji).

du -hs /var/lib/postgresql
df -h /var/lib/postgresql

Zatrzymanie systemu Sowa

Koniecznie przed całą operacją należy zatrzymać wszystkie składniki instalacji systemu Sowa. W tym celu z poziomu użytkownika "sowa" wykonujemy polecenie:

sowizor stop all

Instalacja nowej wersji PostgreSQL 12

Wszystkie dalsze kroki wymagają dostępu do konta root.

Jeśli instalacja korzysta z pgbouncera, trzeba go oczywiście najpierw zatrzymać:

systemctl stop pgbouncer

Sprawdź, czy masz skonfigurowane oficjalne repozytorium PostgreSQL dla Ubuntu. Powinno ono być zdefiniowane w pliku: /etc/apt/sources.list.d/pgdg.list. Jeśli nie jest, ustaw je poleceniem:

echo "deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main" > /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -

Zanim ruszysz dalej, sprawdź na pewno gdzie i jakie są aktualnie zainstalowane klastry:

pg_lsclusters

Powinna ona dać takie mniej więcej rezultaty:

Ver Cluster Port Status Owner    Data directory               Log file
10  main    5432 online postgres /var/lib/postgresql/10/main /var/log/postgresql/postgresql-10-main.log


Dalsze kroki to kolejno:

  • aktualizacja stanu repozytorium (update)
  • aktualizacja wszystkich pakietów systemu (upgrade)
  • następnie instalacja PostgreSQL 12 i aktualizacja klastra z 10 do 12

Zalecamy wykonywanie tych poleceń osobno i postępowanie zgodnie z komunikatami na ekranie.

apt update
apt upgrade
apt install postgresql-12
pg_dropcluster 12 main --stop
systemctl stop postgresql
pg_upgradecluster -m upgrade 10 main

Problem w migracji dla Ubuntu 16.04

W przypadku Ubuntu 16.04 występuje problem podczas migracji, polegający na tym, że nie jest tworzony odpowiedni katalog tymczasowy do analizy klastra. Objawia się to długotrwałym zatrzymaniem procesu na komunikacie:

Analyzing all rows in the new cluster

W takiej sytuacji należy, przy pomocy np. komendy ps, sprawdzić w którym katalogu składowane są logi z migracji i w pliku pg_upgrade_server.log odczytać powód problemu. Zwykle rozwiązaniem będzie wykonanie poleceń:

mkdir /var/run/postgresql/12-main.pg_stat_tmp
chown postgres /var/run/postgresql/12-main.pg_stat_tmp


Jeśli wszystko przebiegło bez problemu, można usunąć klaster 10.

pg_dropcluster 10 main

Ostatecznie - o ile używamy pgbouncera - trzeba go uruchomić.

systemctl start postgresql
systemctl start pgbouncer

Konserwacja bazy danych

Po skutecznym upgrade klastra zalecane jest wykonanie podstawowych operacji odkurzania i reindeksacji wszystkich baz.

su - postgres
vacuumdb -a -e -f -z
reindexdb -a -e
psql
alter collation pg_catalog."pl-x-icu" refresh version;

Natomiast w bazach poszczególnych katalogów systemu Sowa:

su - sowa
sowizor adm nazwa_katalogu psql
alter collation pl_sowa refresh version; 

Uruchomienie systemu Sowa

Skoro wszystko odbyło się po naszej myśli - możemy przywracać działanie systemu. To już z poziomu konta "sowa".

sowizor start all

Potencjalne problemy

Zbyt wysoka wersja klienta PostgreSQL

Jeśli podczas próby upgrade'u klastra pojawi się błąd typu:

Error: no initdb program for version 13 found
Error: Could not create target cluster

oznacza to, że jest zainstalowana zbyt wysoka wersja klienta PostgreSQL.

W takiej sytuacji warto go odinstalować:

apt remove postgresql-client-13