|
Rozmiar: 5057
Komentarz: + aktualizacja do wersji 11
|
Rozmiar: 7538
Komentarz: + postgresql.conf
|
| Usunięcia zostały oznaczone w ten sposób. | Dodatki zostały oznaczone w ten sposób. |
| Linia 21: | Linia 21: |
| psql -U pgsql -lt | egrep -v '(pgsql|^$)' | awk '{print "createdb -U postgres -O", $3, "-E",$5, $1}' | tee /root/bin/psql.upgrade | psql -U postgres -lt | egrep -v '(postgres|^$)' | awk '{print "createdb -U postgres -O", $3, "-E",$5, $1}' | tee /root/bin/psql.upgrade |
| Linia 37: | Linia 37: |
| # deinstalacja klienta spowoduje deinstalacj/e wszystkich pakiet/ow zael/znych | # deinstalacja klienta spowoduje deinstalacj/e wszystkich pakiet/ow zale/znych |
| Linia 69: | Linia 69: |
| {{{#!highlight cfg numbers=off log_destination = 'syslog' # These are relevant when logging to syslog: syslog_facility = 'LOCAL3' syslog_ident = 'postgres' |
{{{#!highlight diff numbers=off --- /var/db/postgres/data16/postgresql.conf.install 2024-10-25 10:25:09.216639000 +0200 +++ /var/db/postgres/data16/postgresql.conf 2024-10-25 10:26:30.842746000 +0200 @@ -215,7 +215,7 @@ dynamic_shared_memory_type = posix # the default is us # unrecoverable data corruption) #synchronous_commit = on # synchronization level; # off, local, remote_write, remote_apply, or on -#wal_sync_method = fsync # the default is the first option +#wal_sync_method = fdatasync # the default is the first option # supported by the operating system: # open_datasync # fdatasync (default on Linux and FreeBSD) @@ -225,7 +225,7 @@ dynamic_shared_memory_type = posix # the default is us #full_page_writes = on # recover from partial page writes #wal_log_hints = off # also do full page writes of non-critical updates # (change requires restart) -#wal_compression = off # enables compression of full-page writes; +wal_compression = zstd # enables compression of full-page writes; # off, pglz, lz4, zstd, or on #wal_init_zero = on # zero-fill new WAL files #wal_recycle = on # recycle WAL files @@ -482,8 +482,8 @@ log_destination = 'syslog' # in all cases. # These are relevant when logging to syslog: -#syslog_facility = 'LOCAL0' -#syslog_ident = 'postgres' +syslog_facility = 'LOCAL3' +syslog_ident = 'postgres' #syslog_sequence_numbers = on #syslog_split_messages = on @@ -705,7 +705,7 @@ log_timezone = Poland #vacuum_multixact_freeze_table_age = 150000000 #vacuum_multixact_freeze_min_age = 5000000 #vacuum_multixact_failsafe_age = 1600000000 -#bytea_output = 'hex' # hex, escape +bytea_output = 'escape' # hex, escape #xmlbinary = 'base64' #xmloption = 'content' #gin_pending_list_limit = 4MB |
| Linia 77: | Linia 113: |
=== postmaster.opts === Może sie zdarzyć, że przy niektórych instalacjach brakuje pliku postmaster.opts. Trzeba sprawdzić ew. wykonać {{{#!highlight bash numbers=off export pgver=16 echo '/usr/local/bin/postgres "-D" "/var/db/postgres/data${pgver}"' > /var/db/postgres/data${pgver}/postmaster.opts }}} |
|
| Linia 90: | Linia 133: |
| zcat /katalog/backupu/pgglobals_data.gz | psql -U postgres template1 | zcat `find /opt/backups/pgsql/ -type f -name 'pgglobals_*' -ctime -+1h` | psql -U postgres template1 |
| Linia 100: | Linia 143: |
| Albo też ze skryptu wygenerowanego w ramach przygotowań | Albo też ze skryptu wygenerowanego w ramach przygotowań. |
Spis Treści
Upgrade PostgreSQL
Podniesienie wersji PostgreSQL (nieważne, czy main, czy minor) wymaga następujących kroków opisanych poniżej.
psql -l
Po pierwsze konieczność sprawdzenia, jak wygląda matryca użytkownicy, bazy danych, kodowanie:
psql -U pgsql -l
Skrypt pomocniczy do kreacji baz po upgrade
# dla wersji 9.x
psql -U pgsql -lt | egrep -v '(pgsql|^$)' | awk '{print "createdb -U pgsql -O", $3, "-E",$5, $1}' | tee /root/bin/psql.upgrade
# dla wersji 10+
psql -U postgres -lt | egrep -v '(postgres|^$)' | awk '{print "createdb -U postgres -O", $3, "-E",$5, $1}' | tee /root/bin/psql.upgrade
Backup bazy danych
Konieczne jest wykonanie backupu baz danych. Skrypt wykonuje oddzielnie również zapytanie SQL definiujące użytkowników: czy to samego postgres-a, jak również innych.
Proces migracji do nowej wersji
Z wykorzystaniem własnego repozytorium pakietów wykonujemy proces upgrade:
# wylistowanie pakietów, które zostaną zdeinstalowane
pkg info -r postgresql95-client | tee /root/pgsql95.deps
# zatrzymanie serwera bazy danych
service postgresql stop
# deinstalacja klienta spowoduje deinstalacj/e wszystkich pakiet/ow zale/znych
#
pkg delete -y postgresql94-client
# instalacja serwera spowoduje zainstalowanie r/ownie/z klienta
#
pkg install -y postgresql95-server
# lub nowsza wersja
pkg install -y postgresql11-server
Po zainstalowaniu nowych pakietów
PostgreSQL 9.x
Po pierwsze trzeba na nowo utworzyć katalog z bazami danych, konfiguracją etc. Konieczne jest zatem skasowanie obecnego katalogu. Przed deinstalacją warto wykonać backup plików konfiguracyjnych.
rm -rf /usr/local/pgsql/data/*
PostgreSQL 10+
W razie konieczności wykonanie nowego katalogu zfs (patrz konfiguracja PostgreSQL-a)
Inicjalizacja bazy danych
service postgresql initdb
Ustawienie bytea
Zgodnie z zapisami w konfiguracji PostgreSQL-a.
sprawdzenie ustawień syslog
PostgreSQL potrafi logować do sysloga zamiast na ekran. W tym celu trzeba sprawdzić ustawienia, aby były poprawne (zgodne z ustawieniami /etc/syslog.conf):
--- /var/db/postgres/data16/postgresql.conf.install 2024-10-25 10:25:09.216639000 +0200
+++ /var/db/postgres/data16/postgresql.conf 2024-10-25 10:26:30.842746000 +0200
@@ -215,7 +215,7 @@ dynamic_shared_memory_type = posix # the default is us
# unrecoverable data corruption)
#synchronous_commit = on # synchronization level;
# off, local, remote_write, remote_apply, or on
-#wal_sync_method = fsync # the default is the first option
+#wal_sync_method = fdatasync # the default is the first option
# supported by the operating system:
# open_datasync
# fdatasync (default on Linux and FreeBSD)
@@ -225,7 +225,7 @@ dynamic_shared_memory_type = posix # the default is us
#full_page_writes = on # recover from partial page writes
#wal_log_hints = off # also do full page writes of non-critical updates
# (change requires restart)
-#wal_compression = off # enables compression of full-page writes;
+wal_compression = zstd # enables compression of full-page writes;
# off, pglz, lz4, zstd, or on
#wal_init_zero = on # zero-fill new WAL files
#wal_recycle = on # recycle WAL files
@@ -482,8 +482,8 @@ log_destination = 'syslog'
# in all cases.
# These are relevant when logging to syslog:
-#syslog_facility = 'LOCAL0'
-#syslog_ident = 'postgres'
+syslog_facility = 'LOCAL3'
+syslog_ident = 'postgres'
#syslog_sequence_numbers = on
#syslog_split_messages = on
@@ -705,7 +705,7 @@ log_timezone = Poland
#vacuum_multixact_freeze_table_age = 150000000
#vacuum_multixact_freeze_min_age = 5000000
#vacuum_multixact_failsafe_age = 1600000000
-#bytea_output = 'hex' # hex, escape
+bytea_output = 'escape' # hex, escape
#xmlbinary = 'base64'
#xmloption = 'content'
#gin_pending_list_limit = 4MB
Po restarcie bazy danych będzie działać poprawnie.
postmaster.opts
Może sie zdarzyć, że przy niektórych instalacjach brakuje pliku postmaster.opts. Trzeba sprawdzić ew. wykonać
export pgver=16
echo '/usr/local/bin/postgres "-D" "/var/db/postgres/data${pgver}"' > /var/db/postgres/data${pgver}/postmaster.opts
pg_hba.conf
Należy sprawdzić, oraz w razie potrzeby zmodyfikować plik pg_hba.conf po aktualizacji.
Odzyskiwanie backupów
Użytkownicy
Kolejnym krokiem jest odzyskanie backupów. Po pierwsze warto wgrać wszystkich użytkowników:
# dla postgresql 9.x
zcat /katalog/backupu/pgglobals_data.gz | grep -v pgsql | psql -U pgsql template1
# dla postgresql 10+
zcat `find /opt/backups/pgsql/ -type f -name 'pgglobals_*' -ctime -+1h` | psql -U postgres template1
Utworzenie baz danych
Następnie utworzenie baz danych zgodnie z kodowaniem, jakie było:
createdb -U pgsql -O <owner> -E <kodowanie> <nazwa_bazy_danych>
createdb -U postgres -O <owner> -E <kodowanie> <nazwa_bazy_danych>
Albo też ze skryptu wygenerowanego w ramach przygotowań.
pg_restore
pg_restore -c -U pgsql -d <nazwa_bazy_danych> /katalog/backupu/pgdump_<nazwa_bazy_danych>
pg_restore -c -U postgres -d <nazwa_bazy_danych> /katalog/backupu/pgdump_<nazwa_bazy_danych>
pg_restore z utworzeniem docelowej bazy danych
Opcja -v oczywiście spowoduje głośne logowanie pg_restore na ekran:
pg_restore -C -v -U pgsql /katalog/backupu/pgdump_<nazwa_bazy_danych> | psql -U pgsql template1
pg_restore -C -v -U postgres /katalog/backupu/pgdump_<nazwa_bazy_danych> | psql -U pgsql template1
pg_restore - skrypt
Jednolinijkowiec, który automatyzuje proces odtwarzania backupów:
for f in `find /opt/backups/pgsql/ -type f -name 'pgdump*' -ctime -+1h | egrep -v '(postgres|template)'`; do db=`echo $f|awk -F"_" '{print $2}'`; echo pg_restore -U postgres -d $db $f; done
Jeżeli jest wszystko dobrze, to można na końcu dodać | sh, aby całość została wykonana
Na wszelki wypadek backup na nowo
Na wszelki wypadek warto zrobić backup na nowo. Niemniej powinno wszystko działać poprawnie i bez zarzutu.
Przekompilowanie portów zależnych
Przy wykorzystaniu własnego repozytorium pakietów krok jest zbędny - polecenie pkg zrobi wszystko za nas.
PostgreSQL, skrypty, administracja, upgrade
(c) 2004 - 2026 BSD Serwis Krzysztof Stryjek. W przypadku błędów, poprawek proszę kontaktować się z administratorem wiki.
