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

...

languagebash

...

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).

Problem w migracji dla Ubuntu 16.04
Code Block
languagebash
apt update
apt upgrade
apt install postgresql-1214
pg_dropcluster 1214 main --stop
systemctl stop postgresql
pg_upgradecluster -m upgrade 1012 main
Warning
title

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 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

for db in $(psql -c 'SELECT datname from pg_database' | grep db); do psql -c 'ALTER COLLATION pg_catalog."pl-x-icu" REFRESH VERSION;' $db; done

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

Code Block
languagebash
su - sowa
sowizor adm sowasql refresh

Uruchomienie 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