PostgreSQL

Nyílt forráskódú relációsadatbázis-kezelő rendszer (RDBMS)

A PostgreSQL, más néven Postgres egy relációsadatbázis-kezelő rendszer (angol rövidítéséből: (O)RDBMS). Licencét tekintve szabad szoftver.[6] Sok más szabad szoftverhez hasonlóan a fejlesztést önkéntesek végzik közösségi alapon.

PostgreSQL

FejlesztőPostgreSQL Global Development Group
Legfrissebb stabil kiadás16.2 (stabil verzió, 2024. február 8.)[1]
Legfrissebb fejlesztői kiadás16 release candidate 1 (bétaverzió, 2023. augusztus 31.)[2]
Programozási nyelvC
Operációs rendszermulti-platform
KategóriaRDBMS
LicencPostgreSQL licence[3][4][5]
A PostgreSQL weboldala

A PostgreSQL története szerkesztés

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.[7]

A szoftver képességei szerkesztés

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ő.[8]

Lokalizáció szerkesztés

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

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ámogatottak.
  • 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

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

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

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 szabály (angolul 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

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 alaptípusok 8-64 bitszélességre fixpontos és lebegőpontos ábrázolással illetve tetszőleges adatszélességre numeric(a,b) típuson keresztü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

Az adatbázisok alatt több séma létrehozása lehetséges. Minden séma tartalmazhat saját táblákat, függvényeket, triggereket, nézeteket, szekvenciákat. A sémák segítenek az adatbázis felparticioná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.[9]

Replikáció szerkesztés

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 autentiká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

  1. PostgreSQL 16.2, 15.6, 14.11, 13.14, and 12.18 Released!, 2024. február 8.
  2. https://www.postgresql.org/about/news/postgresql-16-rc1-released-2702/, 2023. augusztus 31.
  3. PostgreSQL licence approved by OSI. Crynwr, 2010. február 18. [2016. augusztus 8-i dátummal az eredetiből archiválva]. (Hozzáférés: 2010. február 18.)
  4. OSI PostgreSQL licence. Open Source Initiative, 2010. február 20. (Hozzáférés: 2010. február 20.)
  5. License. PostgreSQL Global Development Group. (Hozzáférés: 2010. szeptember 20.)
  6. http://www.postgresql.org/about/licence
  7. Archivált másolat. [2010. augusztus 14-i dátummal az eredetiből archiválva]. (Hozzáférés: 2010. szeptember 21.)
  8. http://www.postgresql.org/docs/8.4/static/index.html
  9. http://www.postgresql.org/docs/9.1/static/index.html

További információk szerkesztés