Skip to content
VDS · Databázy

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íznakPríčina
role "..." does not existPripájaš sa ako systémový používateľ, ktorý nemá rolu
password authentication failedPravidlo v pg_hba.conf vyžaduje inú metódu alebo nie je nastavené heslo
could not connect to server: No such file or directorySlužba nebeží alebo používa iný port
permission denied for schema publicVo verziách 15+ musíš práva na public udeliť výslovne: GRANT ALL ON SCHEMA public TO shop;
FATAL: sorry, too many clientsmax_connections je vyčerpané — nastav pool na strane aplikácie

Logy: /var/log/postgresql/ alebo journalctl -u postgresql.

Ďalšie kroky

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í.