Pierwszy krok to stworzenie pliku konfiguracji dla repozytorium jako użytkownik z uprawnieniami sudo albo root. W drugim przypadku pomijamy sudo na początku poleceń z instrukcji:
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
Pobranie i import klucza dla oficjalnego repozytorium Ubuntu do listy zaufanych kluczy w apt:
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
Aktualizacja listy dostępnych pakietów:
sudo apt-get update
Instalacja dostępnych aktualizacji:
sudo apt-get upgrade -y
Restart serwera po aktualizacji- niektóre paczki, szczególnie te aktualizujące jądro linuxa, nie będą “aktywne” do następnego startu serwera:
sudo reboot
Przystępujemy do instalacji binariów PostgreSQL. Łączymy się do serwera ponownie (na pewno nas rozłączyło przy restarcie) i wykonujemy:
sudo apt-get -y install postgresql-15
Po instalacji pakietów PostgreSQL Ubuntu automatycznie stworzy i wystartuje domyślny klaster. Sprawdzamy, czy działa:
systemctl status postgres*
Domyślnie PostgreSQL w Ubuntu będzie miał pliki rozmieszczone w takich lokalizacjach:
Katalog z binariami: /usr/lib/postgresql/15/bin/
Katalog domowy postgresa: /var/lib/postgresql
Część plików konfiguracyjnych znajduje się w /etc/postgresql/15/main. W tym dwa bardzo ważne i często aktualizowane: „postgresql.conf”i „pg_hba.conf”. Zajmiemy się nimi nieco później:
Dosyć często będziemy działać z poziomu użytkownika systemowego postgres (zostaje on utworzony w chwili instalacji PostgreSQL), dlatego warto, by miał w swoim PATH binarki PostgreSQL. Dzięki temu nie będziemy musieli wskazywać pełnych ścieżek do binarek, które chcemy użyć. W tym celu logujemy się na postgresa:
sudo su - postgres
Następnie już jako użytkownik systemowy postgres wykonujemy:
cat << EOF >> ~/.bash_profile
PATH=$PATH:/usr/lib/postgresql/15/bin
export PATHEOF
Zmiana ta nie będzie widoczna od razu. Istnieją dwie możliwości. Możemy się wylogować i zalogować na użytkownika postgres ponownie lub wykonać skrypt, który przeładuje nam zmienne środowiskowe. Aby przeładować zmienne środowiskowe, jako użytkownik postgres musimy wykonać:
. ~/.bash_profile
Po tej operacji nasza zmienna środowiskowa PATH powinna zostać uzupełniona o katalog z binarkami PostgreSQL:
Nie zawsze chcemy pozostawić domyślną konfigurację. Przyjmijmy, że planujemy mieć wszystkie pliki danych i konfiguracyjne PostgreSQL w innej lokalizacji, np. na innym dysku. Miejsce, w którym składowane są dane i configi, nazywamy w PostgreSQL PGDATA. Do tego usługa powinna startować automatycznie, korzystając z nowej lokalizacji plików. W tym celu musimy wykonać kilka czynności.
Jeśli planujemy zarządzanie instancjami PostgreSQL za pomocą klastra wysokiej dostępności Patroni, to nie konfigurujemy usługi serwera PostgreSQL (poniżej), ponieważ Patroni sam zajmie się uruchamianiem i wyłączaniem usług PostgreSQL.
Przede wszystkim trzeba zatrzymać aktualnie działającą usługę i wyłączyć jej automatyczne włączanie:
sudo systemctl stop postgresql@15-main.service
sudo systemctl disable postgresql@15-main.servicesudo systemctl stop postgresql.service
sudo systemctl disable postgresql.service
Sprawdzamy, czy usługa na pewno jest wyłączona:
systemctl status postgres*
Jeśli ta lista jest pusta, możemy przystąpić do kolejnej czynności, to jest do utworzenia katalogu na nową PGDATA w wybranym miejscu i spowodowanie, by jej właścicielem był użytkownik systemowy postgres (jest tworzony automatycznie przy instalacji PostgreSQL).
sudo mkdir -m 700 /data_pg
sudo chown postgres: /data_pg/
Teraz należy zainicjalizować klaster, tj. za pomocą postgresowego narzędzia initdb utworzyć niezbędne struktury i pliki. Następnie przechodzimy na użytkownika systemowego postgres i inicjalizujemy klaster:
sudo su - postgres
initdb -D /data_pg/
Jeśli otrzymamy komunikat : “command initdb not found”, to znaczy, że nie dodaliśmy binarek PostgreSQL do zmiennej PATH lub nie przeładowaliśmy zmiennych środowiskowych użytkownika systemowego postgres. Możemy wrócić do tego punktu i go wykonać albo podawać ścieżkę bezwzględną do konkretnej binarki, np:
/usr/lib/postgresql/15/bin/initdb
Włączamy klaster, by sprawdzić, czy działa:
pg_ctl -D /data_pg/ start
Jeśli widzimy takie informacje również u siebie (chodzi o końcowe “server started”), to znaczy, że nowy klaster działa.
Zatrzymamy teraz klaster, ponieważ za chwilę skonfigurujemy go jako usługę i uruchomimy.
pg_ctl -D /data_pg/ stop
Zadbamy też o to, by usługa PostgreSQL automatycznie się uruchamiała. Inaczej musielibyśmy startować klaster za pomocą “pg_ctl” przy każdym restarcie maszyny.
Przechodzimy teraz do użytkownika systemowego z prawami do sudo i wykonujemy:
sudo nano /lib/systemd/system/postgresql-15.service
Powstanie nowy plik. Wklejamy do niego:
[Unit]
Description=PostgreSQL 15 database server
Documentation=https://www.postgresql.org/docs/15/static/
After=syslog.target
After=network-online.target[Service]
Type=notify
User=postgres
Group=postgres
Environment=PGDATA=/data_pg/#Wyłączenie OOM (Out Of Memory) killera dla postgresa:
OOMScoreAdjust=-1000
Environment=PG_OOM_ADJUST_FILE=/proc/self/oom_score_adj
Environment=PG_OOM_ADJUST_VALUE=0ExecStart=/usr/lib/postgresql/15/bin/postmaster -D ${PGDATA}
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
KillSignal=SIGINT# wyłączony timeout, żeby postgres mógł w spokoju wykonać crash recovery podczas startu
# inaczej linux mógłby spróbować restartować usługę jeżeli nie wystartowała w X sekund
TimeoutSec=0
TimeoutStartSec=0
TimeoutStopSec=1h[Install]
WantedBy=multi-user.target
Należy dostosować ten element pliku do swojej ścieżki do PGDATA (jeśli jest inna niż tworzona w tej instrukcji):
Environment=PGDATA=/data_pg/
Zapisujemy plik, włączamy autostart i uruchamiamy usługę:
#włączenie autostartu:sudo systemctl enable postgresql-15.service
#uruchomienie usługi:
sudo systemctl start postgresql-15.service
Możemy ponownie sprawdzić status usługi:
systemctl status postgresql-15.service
Wykonujemy restart serwera i sprawdzamy ponownie, czy usługa wstała:
sudo reboot
sudo systemctl status postgresql-15.service
Jeżeli konfigurujemy PostgreSQL jako usługę, to należy startować i zatrzymać klaster już z poziomu systemctl, a nie pg_ctl dlatego, że proces uruchomiony przez pg_ctl i usługa nie wiedzą o sobie wzajemnie.
Komentarze (7)
0
0
Ja robię kawałek dokumentacji - bo w Debianie jest trochę inaczej: https: ** blog.jurkiewicz.tech * kurs-administracji-postgresql-zapiski-9239f6838bb4 Jakby ktoś potrzebował. Znaczki * zmień na wiadomo co, bo blog nie pozwolił mi wkleić wprost.
0
0
Jakie jest hasło usera postgres?
Użytkownik postgres nie ma żadnego hasła. Aby się na niego zalogować, zaloguj się najpierw na użytkownika z uprawnieniami do sudo i wywołaj sudo su - postgres
0
0
Uwaga: Brak info, że aby zatrzymać usługi PostgreSQL należy przejść na konto użytkownika systemowego utworzonego przy instalacji systemu. Inaczej nie zatrzymamy-usuniemy usług. Po ustawieniu zmiennej PATH.
0
0
Polecam jednak doczytać o koncepcji pakietów z Postgresem dla Debiana i potomnych z ich dokumentacji, z pakietu postgresql-common. Podejście z tego artykułu zadziała, ale nie jest koszerne. Martin Pitt zrobił przez ostatnie 20 lat kawał dobrej roboty przy paczkowaniu Postgresa i warto z tego korzystać.
Ciekawa uwaga. Możesz zapodać jakimś linkiem do docu lub artykułu który o tym szerzej mówi?
Niestety nie, tutejszy system komentarzy blokuje linki. Ale readme w repo postgres-comon na salsa.debian.org to dobry wstęp do tematu.