PostgreSQL: inštalácia a tvoja prvá databáza
Inštalácia PostgreSQL na VDS, roly a prvá databáza, ako funguje autentifikácia v pg_hba.conf a riešenie chýb pripojenia.
Aktualizované 23. augusta 2026
PostgreSQL je predvolená voľba pre aplikácie v Pythone, Node.js a Go. Správa sa k dátam prísnejšie ako MySQL a lepšie zvláda komplexné dopyty.
Inštalácia
apt update && apt install -y postgresql postgresql-contrib # Debian, Ubuntu
systemctl enable --now postgresql
Na AlmaLinux a CentOS Stream musíš cluster vytvoriť ručne:
dnf install -y postgresql-server postgresql-contrib
postgresql-setup --initdb
systemctl enable --now postgresql
Skontroluj verziu a stav:
sudo -u postgres psql -c "SELECT version();"
Rola a databáza
V PostgreSQL sa používateľ nazýva rola. Vytvor samostatnú rolu pre každý projekt:
sudo -u postgres psql
CREATE ROLE shop WITH LOGIN PASSWORD 'long-random-password';
CREATE DATABASE shop OWNER shop ENCODING 'UTF8';
REVOKE ALL ON DATABASE shop FROM PUBLIC;
Pripojovací reťazec pre aplikáciu:
postgresql://shop:password@127.0.0.1:5432/shop
Skontroluj zo systémového používateľa:
psql "postgresql://shop:password@127.0.0.1:5432/shop" -c "\dt"
Autentifikácia
O tom, kto sa môže prihlásiť a odkiaľ, rozhodujú dva súbory.
/etc/postgresql/17/main/postgresql.conf:
listen_addresses = 'localhost'
port = 5432
/etc/postgresql/17/main/pg_hba.conf — pravidlá sa čítajú zhora nadol a vyhráva prvé, ktoré sa zhoduje:
local all postgres peer
local all all scram-sha-256
host all all 127.0.0.1/32 scram-sha-256
Metóda peer znamená „systémový používateľ sa zhoduje s rolou“ — preto sudo -u postgres psql funguje bez hesla, kým ten istý príkaz z iného používateľa nie.
Po úprave: systemctl reload postgresql. Nikdy nepoužívaj metódu trust — pustí dnu kohokoľvek úplne bez hesla.
Pre prístup zvonku si prečítaj vzdialený prístup: port nesmieš otvoriť do sveta bez obmedzenia podľa adresy.
Časté chyby
| Príznak | Príčina |
|---|---|
role "..." does not exist | Pripájaš sa ako systémový používateľ, ktorý nemá rolu |
password authentication failed | Pravidlo v pg_hba.conf vyžaduje inú metódu alebo nie je nastavené heslo |
could not connect to server: No such file or directory | Služba nebeží alebo používa iný port |
permission denied for schema public | Vo verziách 15+ musíš práva na public udeliť výslovne: GRANT ALL ON SCHEMA public TO shop; |
FATAL: sorry, too many clients | max_connections je vyčerpané — nastav pool na strane aplikácie |
Logy: /var/log/postgresql/ alebo journalctl -u postgresql.
Ďalšie kroky
- Ladenie pamäte podľa triedy — na VDS-1 sú predvolené hodnoty výrazne príliš nízke.
- Zálohy —
pg_dumpa obnova. - Migrácia databázy z iného servera.
Nedávaj aplikácii rolu superpoužívateľa. Bežná rola vlastníka databázy zvládne všetko, čo potrebuje, no nemôže zhodiť susedné databázy, ak sa migrácia pokazí.