PostgreSQL

A Wikipédiából, a szabad enciklopédiából
PostgreSQL
Postgresql elephant.svg
Postgresql elephant.svg

Fejlesztő PostgreSQL Global Development Group
Legfrissebb stabil kiadás 9.3.2 (2013. december 5.) [1] +/-
Legfrissebb fejlesztői kiadás ismeretlen +/-
Programozási nyelv C
Operációs rendszer multi-platform
Kategória RDBMS
Licenc PostgreSQL licence[2][3][4]
A PostgreSQL weboldala

A PostgreSQL, más néven Postgres egy relációs adatbázis-kezelő rendszer (angol rövidítéséből: (O)RDBMS). Licencét tekintve szabad szoftver.[5] Sok más szabad szoftverhez hasonlóan a fejlesztést önkéntesek végzik közösségi alapon. A munka elsődleges koordináló oldala a postgresql.org, saját wiki is elérhető a wiki.postgresql.org címen.

A PostgreSQL története[szerkesztés | forrásszöveg szerkesztése]

A PostgreSQL fejlesztése a Kaliforniai Berkeley Egyetem gondozásában indult Ingres néven a nyolcvanas években az azonos nevű cég szponzorálásával. Az Ingres időszak után a fejlesztők átnevezték a szoftvert, ami POST-inGRES, innen a POSTGRES név. A szoftver ezen a néven volt ismeretes 1985-től több kiadáson keresztül. 1995-ben az eredeti POSTQUEL lekérdező nyelvet SQL váltotta fel, egyúttal Postgres95 lett a szoftver neve.

1996-tól a szoftver fejlesztése elhagyta az egyetem falait és megindult a közösségi alapú fejlesztés útján. A 6.0 változatot már PostgreSQL névvel adták ki.[6]

A szoftver képességei[szerkesztés | forrásszöveg szerkesztése]

Az alábbi összegzés a 8.4 változat alapján készült. Ennek teljes és részletes dokumentációja elérhető [7].

Lokalizáció[szerkesztés | forrásszöveg szerkesztése]

A PostgreSQL a magyar nyelv szempontjából lényeges ISO 8859-2 (Latin2) és UTF-8 karakterkészleteket sok másikkal együtt támogatja. Amennyiben a szerver és a kliens karakterkészlete eltér, úgy képes a konverziót automatikusan elvégezni. A karakterkészlet az egész adatbázisra egységes kell legyen és annak létrehozásakor meg kell adni:

CREATE DATABASE <adatbázis neve> WITH ENCODING '<karakterkészlet kódja>'.

A karakterkészleten túli lokalizációs beállítás az egész adatbázisszerverre kezdetben (a telepítés után, de még az első használat előtt) beállítást igényel:

initdb --locale=<lokalizáció kódja>

A magyar lokalizációs kód hu_HU. Az initdb --locale beállítása később az összes létrehozott adatbázisra érvényes lesz.

Függvények[szerkesztés | forrásszöveg szerkesztése]

Lehetővé teszik, hogy a lekérdezések egy részét futási időben határozza meg az adatbáziskezelő. Így megvalósíthatóak olyan komplexebb megoldások, amik túlmutatnak a támogatott SQL nyelv képességein, illetve lehetőség van kódrészek kiemelésére, így redukálva azok felesleges ismétlődését. A függvényhívások visszatérhetnek egy rekordcsoporttal is, amik így a lekérdezések FROM részében egy táblát helyettesíthetnek.

A függvények megvalósítása több nyelven is lehetséges:

  • Beépített PL/pgSQL nyelven, amelyhez mindössze egy
createlang plpgsql <adatbázis neve>

futtatása szükséges az első használat előtt.

  • Szkript-nyelvek, amelyek a PL/Perl, PL/PHP, PL/Python, PL/sh, PL/Ruby, PL/TCL, PL/Lua és PL/Scheme interfészeken át támagatottak.
  • Lefordított modulként gyakorlatilag bármely erre alkalmas nyelvben elkészítve, leggyakrabban ez C vagy JAVA.
  • PL/R interfészen keresztül R nyelven.

Triggerek[szerkesztés | forrásszöveg szerkesztése]

Triggerek az adatbázis tábláit elérő írási műveletek előtt (before trigger) vagy után (after trigger) lefuttatott függvényhívásokat jelentik. Ezek közül az UPDATE, INSERT és DELETE triggerek támogatottak (tehát pl. ALTER vagy DROP nem indukál triggerfutást). A triggerek függvényeinek végrehajtása újabb triggereket indíthat, az így esetleg kialakuló hurok elkerülése a programozó feladata.

A triggerek meghatározott visszatérési értékekkel kell rendelkezzenek, ami before trigger esetén a tulajdonképpeni adatsor lesz. Néhány globális változó elérhető a triggerekből (ezek mindannyian TG_* változók), amelyből megállapítható a futás szintje és helye illetve elérhető a trigger futását indukáló rekord (NEW és OLD néven, értelemszerűen DELETE csak OLD, INSERT csak a NEW értéket tölti fel).

Tranzakciókezelés[szerkesztés | forrásszöveg szerkesztése]

A PostgreSQL rendelkezik azzal a képességgel, hogy a párhuzamosan futó lekérdezések egymást nem zavarják illetve amennyiben egyik lekérdezés változtatást eszközöl az adaton, úgy az az indítás sorrendjében kerül csak rögzítésre. A változtatás egészen a tranzakciós blokk zárásáig nem kerül bele az adatbázisba, így eredményével nem zavarja a többi lekérdezést. Ehhez szükség esetén az adatbáziskezelő zárolhat táblákat, amellyel lekérdezési várakozást illetve ebből eredő dugulást okoz, amely elkerülése a helyes adatbázis szervezés, tervezés feladata. A tranzakciókezelő függetleníti az időtől függő függvényeket (pl. now()) a tényleges futási pillanattól.

Nézetek[szerkesztés | forrásszöveg szerkesztése]

Tetszőleges lekérdezés definiálható, mint nézet (SQL: VIEW). Ilyenkor a nézet úgy viselkedik, mint egy normál tábla, kivéve az írási műveleteket, mert ehhez külön módszer (ún. RULE) definiálása szükséges. A nézet állhat több lekérdezésből is UNION összekapcsolással, amennyiben az összekapcsolni kívánt lekérdezések azonos szerkezetű adattartalmat adnak válaszul.

Komplex adattípusok[szerkesztés | forrásszöveg szerkesztése]

Széles a használható adattípusok köre és ezeken felül saját típust is készíthetünk

CREATE TYPE <típus neve> (típus1, típus2, ...);

segítségével. Az itt használható alaptípusok:

  • karakteres alaptípusok fix hosszúságra illetve 1GB határig a hosszúság megkötése nélkül használható text
  • numerikus alapttípusok 8-64 bitszélességre fixpontos és lebegőpontos ábrázolással illetve tetszőleges adatszélességre numeric(a,b) típuson kereszül
  • idővel kapcsolatos alaptípusok: dátum; idő zóna beállítással és enélkül; időintervallum
  • bináris alaptípus (ún. boolean) 3 állapottal: igaz, hamis és üres/nem definiált
  • halmaz típus (ún. enum)
  • speciális adattípusok: MAC-címek, UUID, IPv4 és IPv6 címek, CIDR címek, bitekre bontott típus (ún. bit string), deviza
  • XML adattípus
  • geometriai típusok
  • mindezen típusok tömb (array) megvalósításban, ahol az elemszámot nem szükséges előre megkötni, hanem szükség szerint növekszik.

Sémák és öröklődés[szerkesztés | forrásszöveg szerkesztése]

Az adatbázisok alatt több séma létrehozása lehetséges. Minden séma tartalmazhat saját táblákat, funkciókat, nézeteket, szekvenciákat. A sémák segítenek az adatbázis felpartícionálásában miközben a lekérdezések ezeken a határokon átnyúlhatnak.

Az öröklődéssel létrehozhatunk táblákat úgy, hogy azok deklarációját más táblából vesszük. Az öröklés nem tökéletesen követi a magas szintű programozási nyelveknél ismeretes elveket ill. nincs minden aspektusból implementálva ez a képesség, ezért a funkció kihasználása előtt érdemes tájékozódni a megoldás határait illetően[8].

Replikáció[szerkesztés | forrásszöveg szerkesztése]

A külső tükrözési- és adatbázis-elosztási módszerekkel ellentétben a 9.0 verziótól kezdve az alaprendszer is tartalmazza a replikáció (streaming replication) és az azonnali rendelkezésre állás (hot swap) lehetőségét is. Ez jelenleg egy mester és a hozzá csatlakozó, csak olvasható alárendelt szervereket jelent (single master multiple read-only slave). A replikáció nem igényli kiegészítő szoftver futtatását, a mester postgresql TCP portja kell elérhető legyen az alárendelt szerverek részére authentikáció nélkül. Ennek beállítása a mester pg_hba.conf alatt:

host    replication all         <alárendelt_szerver>/32       trust

A replikáció a tranzakciós napló (pg_xlog/*) nagysebességű másolásán alapul. Ennek megfelelően az adat tényleges frissülése egy kis késést szenved el a kapcsolat sebességének és a szerverek kapacitásának függvényében. A mester szerver nem várja be az alszerverek írási/másolási folyamatait.

Források[szerkesztés | forrásszöveg szerkesztése]

  1. [1]
  2. PostgreSQL licence approved by OSI. Crynwr, 2010. február 18. (Hozzáférés: 2010. február 18.)
  3. OSI PostgreSQL licence. Open Source Initiative, 2010. február 20. (Hozzáférés: 2010. február 20.)
  4. License. PostgreSQL Global Development Group. (Hozzáférés: 2010. szeptember 20.)
  5. http://www.postgresql.org/about/licence
  6. http://www.postgresql.org/about/history
  7. http://www.postgresql.org/docs/8.4/static/index.html
  8. http://www.postgresql.org/docs/9.1/static/index.html