Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

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

...

12 do PostgreSQL

...

14

Warning
titleWaż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).

Code Block
languagebash
du -hs /var/lib/postgresql
df -h /var/lib/postgresql


...

Code Block
languagebash
sowizor stop all

Usunięcie rozszerzenia pg_loonicode

Jest to zbędne już rozszerzenie, którego usunięcie jest konieczne by powiodła się aktualizacja do PG14.

Do usunięcia rozszerzenia należy użyć skryptu (uruchomionego z poziomu konta root !!!):

Code Block
/home/sowa/sowang3/bin/loonicode-uninstaller


Instalacja nowej wersji PostgreSQL

...

14

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

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

Code Block
languagebash
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:

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

...

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


Dalsze kroki to kolejno:

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

Zalecamy wykonywanie tych poleceń osobno i postępowanie zgodnie z komunikatami na ekranie (warto także uruchomić wcześniej konsolę screen).

Code Block
languagebash
apt update
apt upgrade
apt install postgresql-1214
pg_dropcluster 1214 main --stop
systemctl stop postgresql
pg_upgradecluster -m upgrade 10 main
Warning
titleProblem 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
12 main


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

Code Block
pg_dropcluster 1012 main

Ostatecznie - o ile używamy pgbouncera - trzeba go uruchomićA następnie uruchomić Postgresa.

Code Block
languagebash
systemctl start postgresql
systemctl start
pgbouncer

Konserwacja bazy danych

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

Code Block
languagebash
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:

...

Code Block
languagebash
sowizor start all

Potencjalne problemy

Zbyt wysoka wersja klienta PostgreSQL

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

No Format
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ć:

Code Block
apt remove postgresql-client-13