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