Skip to content
VDS · Baze podataka

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

SimptomUzrok
role "..." does not existPovezuješ se kao sistemski korisnik koji nema rolu
password authentication failedPravilo u pg_hba.conf zahteva drugi metod, ili lozinka nije postavljena
could not connect to server: No such file or directoryServis ne radi, ili koristi drugi port
permission denied for schema publicU verzijama 15+ moraš eksplicitno da dodeliš prava na public: GRANT ALL ON SCHEMA public TO shop;
FATAL: sorry, too many clientsmax_connections je iscrpljen — podesi pool na strani aplikacije

Logovi: /var/log/postgresql/ ili journalctl -u postgresql.

Sledeći koraci

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.