PostgreSQL este cea mai avansata baza de date "open source" care ofera multe caracteristici moderne.
PostgreSQL are o arhitectura a sistemului realizata pe modelul client/server.
Exista doua tipuri de procese (programe) care stau la baza oricarei sesiuni PostgreSQL. Acestea sunt:
. Procesul server numit postmaster, se ocupa cu administrarea fisierelor bazei de date, accepta conexiuni la baza de date de la aplicatiile client si realizeaza in numele clientului actiuni asupra bazei de date.
. Aplicatia clientului care doreste sa realizeza actiuni asupra bazei de date. Tipurile de aplicatii clinet sunt foarte diverse: de la un client care poate fi orice unealta, aplicatie grafica sau server de web care doreste sa acceseze baza pentru a afisa informatii, pana la tooluri care sunt specializate in intretinea unei baze de date.
Ca orice aplicatie client/ server, si in acest caz serverul si clientul pot sa fie pe diferite hosturi, conexiunea prin retea de tip TCP/IP.
Serverul PostgreSQL poate sa accepte mai multe conexiuni multiple de la clienti.
Pentru fiecare conexiunea se creaza un nou process ( \"fork\"), si de aici fiecare client si proces server vor comunica fara interventia procesului postmaster.
Toolurile client oferite de PostgreSQL sunt doua, unul este un tool grafic, pgAdmin, iar al doilea este un tool de tip "command-line tool" si se numeste "psql".
Dupa cum am amintit PostgreSQL ofera un set important de caracteristici moderene care il fac un server complex si actual. Una dintre aceste caracteristici este numarul mare de tipuri de date disponibile pentru utilizator, punandu-le la dispozitie si posibilitatea de a adauga alte tipuri noi folosind comanda CREATE TYPE. Unele dintre aceste tipuri de date sunt unice in PostgreSQL, cum ar fi tipurile geometrice sau tipuri cu mai multe formate decat cele standard (date and time).
O alta particularitate o regasim in modul de manipulare a tranzactiilor.In cazul PostgreSQL este posibil un control mai granulat al tranzactiilor folosindu-ne de savepoints (puncte de salvare). Acest concept permite definirea unui punct de salvare la care ne putem intoarce cu un ROLLBACK TO. Toate schimbarile facute asupra bazei de date de la savepoint la rollback to sunt inlaturate, dar modificarile facute pana la savepoint sunt pastrate. Putem sa ne intoarcem de mai multe ori la acelasi savepoint, sau in caz contrar sa il folosim o singura daca, caz in care resursele vor fi eliberate.
Ca si trasatura speciala putem aminti si notiunea de mostenire care este preluata din alte limbaje si care se aplica pe pe componentele fundamentale a unei baze de date si anume a tabelelor.
Procedurile in PostgreSQL
PostgreSQL nu respecta sablonul SQL de creare a procedurilor, postgreSQL neavand definite proceduri ci functii.
Functiile SQL executa o lista arbitrara de "statement"-uri SQL, returnand rezultatul a ultimei intrebari din lista. In cazul cel mai simplu, primul rand a ultimei interogari va fi returnat. Ca si alternativa, o functie SQL poate fi declarata ca sa returneaze si o multime, prin specificarea tipului de data care se returneaza in urmatorul mod: SETOF urmat de un tip anume.
Orice colectie de comenzi in limbaj SQL pot fi impachetate impreuna pentru a defini o functie. Cu exceptia interogarii care contine SELECT, comenzile pot sa includa orice tip de interogare ( INSERT, UPDATE sau DELETE ). Alte exceptii sunt BEGIN, COMMIT, ROLLBACK sau SAVEPOINT care nu pot fi solosite in interiorul unei functii.
Sintaxa
CREATE [ OR REPLACE ] FUNCTION
name ( [ [ argmode ] [ argname ] argtype [, ...] ] )
[ RETURNS rettype ]
{ LANGUAGE langname
| IMMUTABLE | STABLE | VOLATILE
| CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
| [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
| AS \'definition\'
| AS \'obj_file\', \'link_symbol\'
} ...
[ WITH ( attribute [, ...] ) ]
PostregSQL permite suprascrierea functiilor, adica acelasi nume poate fi folosit pentru definirea mai multor functii atat timp cat au tipuri de argumente diferite.
Triggere in PostregSQL
Triggerele sunt definite pentru a se executa inainte sau dupa operatiile de INSERT, UPDATE sau DELETE, fie la moficarea unei tuple si la executarea unui statement. Daca un eveniment trigger apare atunci functia trigger este apelata la momentul oportun.
Functia trigger trebuie definita inainte de crearea triggerului. Functia trigger trebuie sa fie declarata ca si o functie fara argumente si care returneaza tipul trigger.
Functia trigger poate sa fie scrisa in oricare limbaj procedural, cel mai folosit si mai usor de utilizat este limbajul C.