|
Rozmiar: 2591
Komentarz: INIT
|
← Wersja 10 z 2024-10-25 09:13:39 ⇥
Rozmiar: 5187
Komentarz: * postgresql.conf: odniesienie się do dokumentacji instalacji
|
| Usunięcia zostały oznaczone w ten sposób. | Dodatki zostały oznaczone w ten sposób. |
| Linia 11: | Linia 11: |
| {{{#!shell numbers=off | {{{#!highlight bash numbers=off |
| Linia 13: | Linia 13: |
| }}} === Skrypt pomocniczy do kreacji baz po upgrade === {{{#!highlight bash numbers=off # 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 |
|
| Linia 18: | Linia 27: |
| == Proces upgrade-u == Należy wykonać upgrade '''-client''', a potem '''-server''' do nowszej wersji, tak jak opisano to [[TipsTricks#Reinstalacja_portu_z_jednoczesn.2BAQU_zamian.2BAQU_na_inny_r.2BAPM-wnowa.2BAXw-ny|tutaj]]. Jako dodatkowy parametr należy podać: `-m 'DISABLE_CONFLICTS=1'`. |
== Proces migracji do nowej wersji == |
| Linia 21: | Linia 29: |
| == Po upgrade == 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. {{{#!shell numbers=off rm -rf /usr/local/pgsql/data/* /usr/local/etc/rc.d/postgresql initdb |
Z wykorzystaniem [[PoudriereBinaryPkg|własnego repozytorium]] pakietów wykonujemy proces upgrade: {{{#!highlight bash numbers=off # 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 |
| Linia 28: | Linia 49: |
| === Upgrade do PostgreSQL 9 oraz bytea === Problem dotyczy głównie aplikacji [[FreshInstall/MailZu|mailzu]], niemniej mogą trafić się inne aplikacje korzystające z bytea. Nowy format (domyślny) dla bytea to '''hex'''. Aby wszystko zostało po staremu (PostgreSQL <= 8.x), to konieczna jest modyfikacja w pliku '''postgres.conf''': {{{ bytea_output = 'escape' # hex, escape |
== 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. {{{#!highlight bash numbers=off rm -rf /usr/local/pgsql/data/* |
| Linia 34: | Linia 57: |
| === PostgreSQL 10+ === W razie konieczności wykonanie nowego katalogu zfs (patrz [[SerwerBazDanychPgsql|konfiguracja PostgreSQL]]-a) === Inicjalizacja bazy danych === {{{#!highlight bash numbers=off service postgresql initdb }}} === Ustawienie bytea === Zgodnie z zapisami w [[SerwerBazDanychPgsql|konfiguracji PostgreSQL]]-a. === sprawdzenie ustawień syslog === Należy poprawić plik `postgresql.conf` zgodnie z dokumentacją [[SerwerBazDanychPgsql|instalacji]]. |
|
| Linia 35: | Linia 71: |
=== 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 }}} === pg_hba.conf === Należy sprawdzić, oraz w razie potrzeby zmodyfikować plik `pg_hba.conf` po aktualizacji. |
|
| Linia 40: | Linia 86: |
| {{{#!shell numbers=off zcat /katalog/backupu/pgglobals_data.gz | grep -v pgsql | psql -U pgsql |
{{{#!highlight bash numbers=off # 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 |
| Linia 46: | Linia 96: |
| {{{#!shell numbers=off | {{{#!highlight bash numbers=off |
| Linia 48: | Linia 98: |
createdb -U postgres -O <owner> -E <kodowanie> <nazwa_bazy_danych> }}} Albo też ze skryptu wygenerowanego w ramach przygotowań. === pg_restore === {{{#!highlight bash numbers=off 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> |
|
| Linia 50: | Linia 110: |
| === pg_restore === {{{#!shell numbers=off pg_restore -c -U pgsql -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: {{{#!highlight bash numbers=off 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 |
| Linia 54: | Linia 118: |
=== pg_restore - skrypt === Jednolinijkowiec, który automatyzuje proces odtwarzania backupów: {{{#!highlight bash numbers=off 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 |
|
| Linia 59: | Linia 131: |
| {{{#!shell numbers=off portupgrade -f databases/p5-DBD-Pg databases/php5-pgsql }}} |
Przy wykorzystaniu [[PoudriereBinaryPkg|własnego repozytorium]] pakietów krok jest zbędny - polecenie `pkg` zrobi wszystko za nas. |
| Linia 66: | Linia 136: |
| {i} ` `<<GetVal(SlownikNewBsd,adm-podpis)>> |
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
Należy poprawić plik postgresql.conf zgodnie z dokumentacją instalacji.
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.
