PostgreSQL upgrade

Przygotowania (jako root):

service postgresql stop
pkg create postgresql17-server
mkdir /tmp/pg-upgrade
tar xf postgresql1?-server-1*.pkg -C /tmp/pg-upgrade

Aktualizujemy PostgreSQL:

pkg install postgresql18-server

Po aktualizacji wykonujemy migrację:

service postgresql initdb
su -l postgres -c "pg_upgrade -b /tmp/pg-upgrade/usr/local/bin/ -d /var/db/postgres/data17/ \
  -B /usr/local/bin/ -D /var/db/postgres/data18/ -U postgres"

Po migracji odpalamy nowego PostgreSQL:

service postgresql start

Migracja 17 -> 18

Od PostgreSQL 18 domyślnie włączone są sumy kontrolne dla danych. Jeśli nie było ich włączonych na wersji 17, wtedy podczas migracji pojawi się błąd:

old cluster does not use data checksums but the new one does

Rozwiązanie to tymczasowe wyłączenie sum kontrolnych na czas migracji (podczas zatrzymanego daemona):

pg_checksums --disable --pgdata /var/db/postgres/data18

Po zaimportowaniu danych można zrobić:

pg_checksums --enable --pgdata /var/db/postgres/data18
Checksum operation completed
Files scanned:   1797
Blocks scanned:  25195
Files written:  389
Blocks written: 20809
pg_checksums: syncing data directory
pg_checksums: updating control file
Checksums enabled in cluster