PostgreSQL: instalacija i tvoja prva baza podataka
Instalacija PostgreSQL-a na VDS-u, role i prva baza podataka, kako funkcioniše autentifikacija u pg_hba.conf i rešavanje grešaka pri konekciji.
Ažurirano 23. avgust 2026.
PostgreSQL je podrazumevani izbor za aplikacije u Python-u, Node.js-u i Go-u. Strože tretira podatke od MySQL-a i bolje se snalazi sa složenim upitima.
Instalacija
apt update && apt install -y postgresql postgresql-contrib # Debian, Ubuntu
systemctl enable --now postgresql
Na AlmaLinux-u i CentOS Stream-u klaster moraš da napraviš ručno:
dnf install -y postgresql-server postgresql-contrib
postgresql-setup --initdb
systemctl enable --now postgresql
Proveri verziju i status:
sudo -u postgres psql -c "SELECT version();"
Rola i baza
U PostgreSQL-u se korisnik zove rola. Napravi zasebnu rolu za svaki projekat:
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;
Connection string za aplikaciju:
postgresql://shop:password@127.0.0.1:5432/shop
Proveri iz sistemskog korisnika:
psql "postgresql://shop:password@127.0.0.1:5432/shop" -c "\dt"
Autentifikacija
Dva fajla određuju ko može da se prijavi i odakle.
/etc/postgresql/17/main/postgresql.conf:
listen_addresses = 'localhost'
port = 5432
/etc/postgresql/17/main/pg_hba.conf — pravila se čitaju odozgo nadole, a prvo koje se poklopi pobeđuje:
local all postgres peer
local all all scram-sha-256
host all all 127.0.0.1/32 scram-sha-256
Metod peer znači „sistemski korisnik odgovara roli” — zato sudo -u postgres psql radi bez lozinke, dok ista komanda iz drugog korisnika ne radi.
Posle izmene: systemctl reload postgresql. Nikad ne koristi metod trust — on pušta svakoga unutra bez ikakve lozinke.
Za pristup spolja pročitaj udaljeni pristup: ne smeš da otvoriš port ka spolja bez ograničavanja po adresi.
Česte greške
| Simptom | Uzrok |
|---|---|
role "..." does not exist | Povezuješ se kao sistemski korisnik koji nema rolu |
password authentication failed | Pravilo u pg_hba.conf zahteva drugi metod, ili lozinka nije postavljena |
could not connect to server: No such file or directory | Servis ne radi, ili koristi drugi port |
permission denied for schema public | U verzijama 15+ moraš eksplicitno da dodeliš prava na public: GRANT ALL ON SCHEMA public TO shop; |
FATAL: sorry, too many clients | max_connections je iscrpljen — podesi pool na strani aplikacije |
Logovi: /var/log/postgresql/ ili journalctl -u postgresql.
Sledeći koraci
- Podešavanje memorije po tieru — na VDS-1 su podrazumevane vrednosti primetno preniske.
- Bekapovi —
pg_dumpi restore. - Migracija baze sa drugog servera.
Ne daj aplikaciji rolu superusera. Obična rola vlasnika baze može sve što joj treba, ali ne može da obriše susedne baze ako migracija pođe naopako.