Log in


Forgot your password?
prijatelji LUGoNSa
gnu.gif
linuxzasve.jpg
hulk.jpg
 
You are here: Home / Uputstva / Opšte / PostgreSQL HOWTO

PostgreSQL HOWTO

by Goran Mekić last modified Aug 27, 2007 09:58 AM
Kako podići, podesiti i održavati PostgreSQL

Osnovna konfiguracija

PostgreSQL je, po rečima autora ovog softvera, najbolja baza na svetu. Da budem i malo subjektivan, sve manje sumnjam u to. Naravno, prvi korak je instalacija. U nekim distribucijama će se pri instalaciji podesiti i okruženje. U slučaju da kod Vas to nije slučaj, evo kako da sredite i to:

# mkdir -p /var/lib/postgresql
# initdb -D /var/lib/postgresql/data

Naravno, moja navika je da PostgreSQL stoji u /var/lib/postgresql, ali možete koristiti bilo koji drugi direktorijum. Potom treba da startujete PostgreSQL putem init skripte ili ručno:

# pg_ctl -D /var/lib/postgresql/data start

Nakon ovoga biste trebali da budete u mogućnosti da koristite bazu u lokalu. Recimo, uz PostgreSQL dolazi i program psql. Administratorski nalog za PostgreSQL je postgres, te se sa njime i konektujete prvi put.

# psql -U postgres postgres

Gornja komanda radi sledeće. Koristi nalog postgres (-U opcija) i kači se na bazu postgres (jedina koja inicijalno ne postoji). Primetite da Vas neće pitati za lozinku. Ovo se dešava jedino ukoliko ne pristupate bazi preko mreže.



Dozvoljavanje pristupa preko mreže

Da biste mogli da pristupate bazi preko mreže, potrebno je da izmenite dva fajla, pg_hba.conf i postgresql.conf.

/var/lib/postgresql/data/postgresql.conf:

listen_addresses = '*'
port = 5432

/var/lib/postgresql/data/pg_hba.conf:

# Svima iz lokalne mreže dozvoli pristup i zahtevaj da lozinka
# bude kriptovana MD5 algoritmom
host    all         all         192.168.0.0/16          md5

Nakon toga restartujte bazu putem init skripte ili ručno:

# pg_ctl -D /var/lib/postgresql/data stop
# pg_ctl -D /var/lib/postgresql/data start

Nakon toga biste trebali da budete u mogućnosti da se konektujete na bazu iz lokalne mreže.



Uključivanje PL/PgSQL jezika

Inicijalno, PL/SQL nije uključen. Zavisi iz kog ugla gledate, ovo može biti dobro ili loše. Dobra stvar je što baza nije opterećena nepotrebnim stvarima (ako Vam PL/SQL nije potreban, zašto bi bio uključen?). Loša je što je PL/SQL standard, pa ako ste navikli da je sve što je standardno uključeno, naići ćete na neprijatno iznenađenje. U svakom slučaju, evo kako da omogućite PL/SQL za bazu postgres. Prvo, napravite funkciju koja učitava PL/SQL:

# psql -U postgres postgres
postgres=# CREATE FUNCTION plpgsql_call_handler() RETURNS OPAQUE AS '/usr/lib/postgresql/plpgsql.so' LANGUAGE 'C';
postgres=# \q

Potom, napravite jezik (PL/SQL):

# createlang -U postgres plpgsql postgres


Trigeri

Za početak, napravićemo veoma jednostavan primer 2 tabele. Zbog jednostavnosti, primer je blizu da bude beskristan, da se ne bi uplitali ključevi (primarni i strani).

# psql -U postgres postgres
postgres=# CREATE TABLE username
(
username TEXT
);
CREATE TABLE

postgres=# CREATE TABLE password
(
password TEXT
);
CREATE TABLE

postgres=# CREATE OR REPLACE FUNCTION insert_password () RETURNS TRIGGER AS
$BODY$
DECLARE
password_v TEXT;
username_v TEXT;
BEGIN
username_v := NEW.username;
SELECT INTO password_v md5(username) FROM username WHERE username = username_v;
INSERT INTO password VALUES(password_v);
RETURN NEW;
END;
$BODY$
LANGUAGE 'plpgsql';

postgres=# CREATE TRIGGER insert_password_t AFTER INSERT ON username FOR EACH ROW EXECUTE PROCEDURE insert_password();

Ono što gornji kod radi je da pravi tabelu username i tabelu password, definiše funkciju koja u tabelu password upisuje MD5 sumu username-a, koji predstavlja i lozinku, i definiše triger koji okida nakon svakog unosa u tabelu username. Zašto je ovaj primer beskoristan? Jer nikako ne znate koja lozinka pripada kom nalogu, ali je zbog jednostavnosti izostavljan sav kod koji nema veze sa trigerima.


Document Actions