PostgreSQL

PostgreSQL, často jednoduše Postgres, je svobodný a otevřený objektově-relační databázový systém. Na jeho vývoji se podílí globální komunita vývojářů a firem, stejně jako v případě mnoha dalších otevřených programů, jelikož PostgreSQL není vlastněn jedinou firmou.

Funkce PostgreSQL zahrnují databázové transakce s atomicitou, konzistencí, izolovaností a trvalostí (ACID), automaticky aktualizovatelné pohledy, materializované pohledy, triggery, cizí klíče a uložené procedury. Je navržen pro zpracování celé řady vytížení, od jednotlivých strojů po datové sklady nebo webové služby s mnoha souběžnými uživateli.

PostgreSQL je primárně vyvíjen pro Linux, dále je dostupný pro macOS server, FreeBSD, OpenBSD a Microsoft Windows a je vydáván pod licencí MIT.

Název produktu 
Velká a malá písmena v názvu PostgreSQL může při prvním setkání mnoho lidí mást, k čemuž může ještě přispět několik způsobů vyslovování slova „SQL“. Zkráceně se používá forma „Postgres“, tedy původní jméno. Vzhledem k všeobecné podpoře SQL standardu ve většině relačních databází, komunita uvažovala nad změnou jména zpět na Postgres. Avšak v roce 2007 PostgreSQL Core Team oznámil, že se produkt i nadále bude nazývat PostgreSQL. Název odkazuje na začátky projektu jako „post-Ingres“ (po Ingres) databáze, protože původní autoři vyvíjeli také databázi Ingres.

Historie 
PostgreSQL se vyvinul z projektu Ingres na Kalifornské univerzitě v Berkeley. V roce 1982 opustil Michael Stonebraker, vedoucí projektu, univerzitu v Berkeley, aby vytvořil proprietární verzi Ingres. V roce 1985 se do Berkeley vrátil a začal pracovat na post-Ingres projektu s cílem vyřešit problémy tehdejších databázových systémů, které se začaly projevovat na začátku osmdesátých let. Cílem nového projektu nazvaného Postgres byla implementace vlastností, potřebných pro kompletní podporu typů. Mezi tyto vlastnosti patřila schopnost definovat nové typy a plně popsat vztahy – což již bylo dříve široce používáno, ale implementace byla plně ponechána na uživateli. V Postgresu databáze „rozuměla“ vztahům a mohla přirozeným způsobem načítat informace ze souvisejících tabulek pomocí „pravidel“. Postgres stavěl na mnoha myšlenkách Ingresu, ne však na jeho kódu.

Od roku 1986 publikoval vývojářský tým mnoho článků popisujících základy systému a v roce 1988 měl připravený prototyp. V červnu 1989 uvolnil pro několik uživatelů verzi 1 a v červnu 1990 verzi 2 s přepsaným systémem pravidel. Verze 3, vydaná v roce 1991, opět obsahovala přepsaný systém rules a přidávala podporu pro více „správců úložišť“ a vylepšený dotazovací stroj (engine). Od roku 1993 začalo velké množství uživatelů zahlcovat projekt požadavky na podporu a vlastnosti. Po vydání verze 4, jejímž cílem byl zejména úklid, projekt skončil.

Vývojáři otevřeného software mohli ovšem získat kopii a dále systém vyvíjet, protože Berkeley uvolnil Postgres pod MIT licencí. V roce 1995 dva absolventi Berkeley, Andrew Yu a Jolly Chen, nahradili interpretr dotazovacího jazyka QUEL, pocházející z Ingresu, interpretrem jazyka SQL, díky čemuž vznikl Postgres95. Kód byl zveřejněn na webu.

V roce 1996 poskytl Marc Fournier z Hub.Org Networking Services první neuniverzitní vývojový server pro vývoj svobodného software. Ve spolupráci s Brucem Momjianem a Vadimem B. Mikheevem začaly práce na stabilizaci kódu získaného z Berkeley. První svobodná verze byla vydána 1. srpna 1996.

V roce 1996 byl projekt přejmenován na PostgreSQL, v reakci na podporu SQL. Prvním vydáním PostgreSQL se stala verze 6.0 v lednu 1997. Od té doby je software udržován skupinou databázových vývojářů a dobrovolníků z celého světa, koordinující se pomocí internetu.

Ačkoliv licence umožňovala proprietární řešení postavená na Postgresu, kód se zprvu v proprietární oblasti nerozvíjel – což je poněkud překvapivé, uvážíme-li výhody, které Postgres nabízel. Hlavní odnož vznikla, když Paula Hawthorn (členka původního Ingres týmu, která se přesunula z Ingresu) a Michael Stonebraker založili firmu Illustra Information Technologies s cílem vytvoření proprietárního produktu, založeného na Postgresu.

V roce 2000 založili původní investoři Red Hat společnost Great Bridge s cílem postavit nad PostgreSQL proprietární produkt a soutěžit s ostatními dodavateli proprietárních databázových řešení. Firma Great Bridge sponzorovala několik PostgreSQL vývojářů a věnovala komunitě mnoho zdrojů, ale koncem roku 2001 ukončila svou činnost kvůli tvrdé konkurenci a nepříznivým podmínkám na trhu.

V roce 2001 vydala společnost Command Prompt, Inc. proprietární produkt Mammoth PostgreSQL, založený na PostgreSQL. V roce 2008 tato firma uvolnila zdrojové kódy pod původní licencí. Command Prompt, Inc. pokračuje v aktivní podpoře PostgreSQL komunity prostřednictvím sponzoringu vývojářů a projektů, mezi které patří PL/Perl, PL/php a hosting komunitních projektů, jako je PostgreSQL Build Farm.

V lednu 2005 obdržel PostgreSQL podporu od databázového dodavatele Pervasive Software, známého svým produktem Btrieve, který byl hojně rozšířený na platformě Novell NetWare. Pervasive oznámil komerční podporu a účast v komunitě; dosáhl určitých úspěchů. V červnu 2006 Pervasive opustil trh s podporou projektu PostgreSQL.

V polovině roku 2005 zveřejnily dvě další společnosti plány na vytvoření proprietárních produktů, založených na PostgreSQL a zaměřených na různé oblasti. EnterpriseDB přidala vlastnosti které umožňují aplikacím napsaným pro databázi Oracle snadné fungování s PostgreSQL. Greenplum přispěl vylepšeními směřujícími na datový sklad a systémem pro podporu rozhodování, včetně projektu BizGres.

V říjnu 2005 John Loiacono, výkonný viceprezident pro software v Sun Microsystems, prohlásil: „We're not going to OEM Microsoft but we are looking at PostgreSQL right now“ (Nechceme jít cestou OEM produktů od Microsoftu, ale aktuálně zkoumáme PostgreSQL), ačkoliv v té době nebyly zveřejněny žádné detaily. V listopadu 2005 Sun oznámil podporu pro PostgreSQL. Od června 2006 zahrnoval operační systém Solaris 10 (vydání 6/06) PostgreSQL.

V srpnu 2007 společnost EnterpriseDB oznámila dostupnost Postgres Resource Center  a EnterpriseDB Postgres, což je plnohodnotná distribuce PostgreSQL, zahrnující mnoho contrib modulů a doplňkových komponent. EnterpriseDB Postgres se v březnu 2008 přejmenoval na Postgres Plus. Ten je dostupný ve dvou verzích: Postgres Plus Standard Server, který má všechny vlastnosti PostgreSQL, je dodatečně QA testován, obsahuje integrované komponenty, možnosti ladění a jednoduchou instalaci, a Postgres Plus Advanced Server, který kromě vlastností produktu Postgres Standard Server navíc disponuje i kompatibilitou s Oracle, vlastnostmi pro zlepšení škálovatelnosti a nástroji pro DBA a vývojáře. Obě verze jsou dostupné zdarma a jsou plně podporovány.

PostgreSQL každoročně uvolňuje „hlavní“ vydání a kromě nich také „vedlejší“ verze, jejichž cílem je primárně oprava chyb. Všechny verze jsou dostupné pod stejnou licencí a jsou založeny na příspěvcích od soukromých firem, firem poskytujících podporu a vývojářů otevřeného software.

Vlastnosti

Funkce 
Funkce umožňují spouštění bloků kódu na serveru. Tyto bloky mohou být sice implementovány v jazyce SQL, ale absence základních programovacích operací, jako jsou například větvení a smyčky, před verzí 8.4 byla důvodem podpory dalších jazyků ve funkcích. Některé jazyky lze dokonce používat v triggerech. Funkce mohou být v PostgreSQL implementovány v následujících jazycích:

 zabudovaném jazyce nazvaném PL/pgSQL a připomínajícím procedurální jazyk PL/SQL známý z Oracle.
 skriptovacích jazycích zahrnujících PL/Lua, PL/LOLCODE, PL/Perl, plPHP, PL/Python, PL/Ruby, PL/sh, PL/Tcl a PL/Scheme.
 kompilovaných jazycích C, C++, Java (via PL/Java), a Common Lisp (pomocí PostModern).
 statistickém jazyce R pomocí PL/R.

PostgreSQL podporuje funkce vracející řádky, kde výstup funkce je množina hodnot se kterou lze v dotazech pracovat jako s tabulkou. Lze definovat také vlastní agregační a window funkce.

Funkce lze definovat tak aby se spouštěly buď s právy volajícího nebo toho kdo funkci definoval. Funkce se někdy označují také jako uložené procedury, ačkoliv jsou mezi nimi určité technické rozdíly.

Indexy 
PostgreSQL obsahuje zabudovanou podporu pro B+ strom, hašovací tabulky, GiST a GiN indexy. K tomu lze navíc doplnit uživatelské typy indexů, ačkoliv to je poněkud komplikovaný proces. Indexy v PostgreSQL podporují také následující vlastnosti:

 Indexy nad výrazy označují indexy vytvořené nad výsledky výrazů a funkcí, namísto přímo nad hodnotami sloupců
 Částečné indexy označující indexy vytvořené pouze nad částí tabulky, lze vytvořit přidáním WHERE klauzule na konec příkazu CREATE INDEX. To umožňuje vytvoření menších indexů.
 Plánovač je schopen při vyhodnocování dotazů použít několik indexů najednou, a to pomocí využití dočasných bitmap index operací v paměti.

Triggery 
Triggery jsou události spouštěné akcemi ze SQL DML příkazů. Například INSERT příkaz může spustit triggery kontrolující zda hodnoty zadané v příkazů jsou platné. Většina triggerů je spouštěna příkazy INSERT nebo UPDATE.

Triggery jsou plně podporovány a mohou být definovány na tabulkách ale ne na pohledech. Na pohledech lze však definovat pravidla (rules). Pokud je na tabulce definováno několik triggerů, jsou spouštěny v abecedním pořadí. Navíc k volání funkcí psaných přímo v PL/PgSQL, triggery mohou volat také funkce psané dalších jazycích jako je například PL/Perl.

MVCC 
PostgreSQL řeší současný přístup prostřednictvím systému známého jako Multi-Version Concurrency Control (MVCC), který každému uživateli zpřístupňuje „snapshots“ databáze, a umožňuje provádět změny, aniž by je ostatní uživatelé před potvrzením transakce viděli. To do velké míry eliminuje potřebu zamykání, a zajišťuje, že databáze efektivně splňuje ACID principy.

Pravidla 
Pravidla umožňují přepisování „hledacích stromu“ zpracovávaného dotazu. Jedno z běžných použití je implementace pohledů, a to včetně aktualizovatelných. Pravidla, nebo přesněji pravidla pro přepis dotazů jsou přichyceny k tabulce/třídě a „přepisují“ příchozí DML (select, insert, update a/nebo delete) na jeden nebo více dotazů které buď nahrazují původní DML příkaz nebo se spouští společně s ním. K přepisu DML příkazů dochází po parsování, a to před plánováním.

Datové typy 
Podporována je široká škála nativních datových typů, mezi jinými:
 Pole s proměnnou délkou (včetně textů a složených typů) až do celkové velikosti 1 GiB.
 čísla s libovolnou přesností
 geometrické tvary
 IPv4 a IPv6 adresy
 CIDR bloky a MAC adresy
 XML podporující Xpath dotazy (od verze 8.3)
 UUID (od verze 8.3)

K tomu si ještě uživatelé mohou definovat vlastní datové typy které lze většinou plně indexovat pomocí PostgreSQL GiST infrastruktury. Mezi příklady takových datových typů patří datové typy z geografických informačních systémů (GIS) pro PostgreSQL.

Uživatelem definované objekty 
Vytvořit lze nové typy téměř všech objektů v databázi, mezi které patří:
 přetypování
 konverze
 datové typy
 domény
 funkce, a to včetně agregačních funkcí
 indexy
 operátory (existující mohou být přetěžovány)
 procedurální jazyky

Dědičnost 
Tabulky mohou být vytvořeny tak, že dědí vlastnosti z „rodičovské“ tabulky. Data z podřízených tabulek se budou jevit jako kdyby existovala v rodičovských tabulkách, pokud nejsou data z rodičovské tabulky načítána s využitím klíčového slova ONLY, tj. select * from ONLY PARENT_TABLE. Doplnění sloupce do rodičovské tabulky způsobí že se objeví i v podřízených tabulkách.

Dědičnost lze použít k implementaci partitioningu tabulek, a to buď pomocí triggerů nebo pravidel, nebo pomocí insertů přímo do příslušné podřízené tabulky.

Tato vlastnost není zatím plně podporována – zejména platí, že ne všechna omezení (constraints) se dědí. Od verze 8.4 platí, že všechna CHECK a NOT NULL omezení se dědí z rodičovské tabulky na tabulky podřízené. Další typy omezení (unikátnost, primární a cizí klíč) se stále nedědí.

Dědičnost poskytuje způsob jak mapovat vlastnosti ze zobecněné hierarchie zachycené v Entity Relationship Diagramech (ERD) přímo do PostgreSQL databáze.

Další vlastnosti 
 Referenční integrita zahrnující cizí klíče, omezení jednotlivých hodnot v tabulkách, a kontroly celých řádek
 Pohledy. Ačkoliv pohledy jsou standardně neaktualizovatelné, lze to zajistit pomocí insert, update a/nebo delete přepisovacích pravidel na příslušném pohledu.
 Inner, outer (full, left a right), a cross joiny
 Sub-selecty
 Korelované sub-dotazy
 Transakce
 Podporuje většinu hlavních vlastností standardu SQL:2008
 Šifrovaná spojení prostřednictvím SSL
 Ukládání velkých binárních a textových objektů
 Domény
 Tablespaces
 Savepointy
 Online backup – zálohování za plného provozu databáze
 Point-in-time recovery – obnovení databáze ze zálohy do přesně určeného okamžiku v čase
 Dvoufázový commit – schopnost korektního fungování v rámci distribuované transakce
 TOAST (The Oversized-Attribute Storage Technique) se používá pro transparentní ukládání velkých atributů v tabulce (jako jsou například MIME přílohy nebo XML dokumenty) do samostatné oblasti, a to s využitím automatické komprese.
 WAL – Write Ahead Logging, transakční log
 OID – object identification (způsob jednoznačného globálního očíslování objektů v databázi)
 Regulární výrazy
 Common Table Expressions – definice poddotazů jako dočasných tabulek, umožňující věci v obyčejném SQL nemožné
 Analytické funkce – umožňují obdobné operace jako agregační funkce, nevyžadují ale seskupení řádek do skupin pomocí klíčového slova GROUP BY
 Embedded SQL je implementováno pomocí preprocessoru. SQL kód je nejdříve zapsán do C zdrojových kódů, a tyto zdrojové kódy jsou následně zpracovány ECPG preprocessorem, který nahradí SQL dotazy voláním knihovny, a kód je poté zkompilován C překladačem. Vkládání funguje také s C++, ale nerozpoznává všechny C++ konstrukce.

Limity 
 maximální velikost tabulky: 32 TiB
 maximální velikost řádku: 400 GiB
 maximální velikost položky: 1 GiB
 maximální počet sloupců v tabulce: 250–1 600 (v závislosti na verzi a typu)
Poznámka: platí při použití techniky TOAST.

Doplňky 
 Performance wizard – zahrnuto ve všech Postgres balíčcích dostupných ke stažení z EnterpriseDB. Zdrojové kódy jsou také dostupné.
 MySQL migration wizard – zahrnuto ve všech Postgres balíčcích dostupných ke stažení z EnterpriseDB.
 Geographic objekty pomocí projektu PostGIS. GPL.
 Shortest-Path-Algorithmy pomocí pgRouting projektu PostGIS. GPL.
 Fulltextové vyhledávání pomocí projektů Tsearch2 a OpenFTS. (Od verze 8.3 je projekt Tsearch2 zahrnut v PostgreSQL)
 Existuje několik synchronních multi-master derivátů nebo rozšíření, včetně
 pgcluster (stejná licence jako PostgreSQL)
 Postgres-R (v raném stádiu vývoje)
 Několik balíčků pro asynchronní master/slave replikaci, zahrnující například
 Londiste (tolerantní licence)
 Slony-I (stejná licence jako PostgreSQL)
 Mammoth Replicator. (stejná licence jako PostgreSQL, formálně proprietární)
 Bucardo (zjednodušená BSD licence; umožňuje také „master to master“ replikaci)
 Existují proxy (middleware) nástroje umožňující replikaci, failover (zotavení z chyb) nebo správu a vyvažování zátěže pro PostgreSQL:
 PGPool-II.
 Sequoia, což je nástroj dostupný pro mnoho dalších serverů kromě PostgreSQL.

Rozhraní pro správu databáze

Otevřený formát

psql 
Primární front-end pro PostgreSQL je nástroj psql určený pro příkazovou řádku, který může být použit pro přímé zadávání SQL dotazů, nebo jejich spouštění ze souboru. Kromě toho psql poskytuje mnoho meta-příkazů a různých vlastností připomínajících shell pro zjednodušení psaní skriptů a automatizaci mnoha činností; například automatické doplňování jmen objektů a SQL syntaxe.

pgAdmin 
pgAdmin je free a open source grafické administrační rozhraní pro PostgreSQL, podporovaný na většině populárních platforem. Program je dostupný pro více než tucet jazyků. První prototyp, nazvaný pgManager, byl napsán pro PostgreSQL 6.3.2 v roce 1998, a po několika měsících přepsán a vydán pod GPL licencí jako pgAdmin. Druhá inkarnace (nazvaná pgAdmin II) byla opět kompletním přepsáním, a byla vydána 16. ledna 2002. Aktuální verze je pgAdmin III, původně vydaná pod Artistic License a nyní je vydávána pod stejnou licencí jako PostgreSQL. Na rozdíl od předchozích verzí, psaných v jazyce Visual Basic, je pgAdmin III napsán v C++ pomocí frameworku wxWidgets pro běh pod nejběžnějšími operačními systémy.

phpPgAdmin 
phpPgAdmin je web-based administrační nástroj pro PostgreSQL napsaný v PHP, založený na populárním rozhraní phpMyAdmin napsaném pro administraci MySQL.

Proprietární 
Mnoho společností nabízí proprietární nástroje pro PostgreSQL. Často se jedná o univerzální jádro adaptované pro různé databázové produkty. Tyto nástroje většinou sdílí administrační vlastnosti s open source nástroji, ale nabízí vylepšení v datovém modelování, importování, exportování a generování reportů.

Benchmarky 
Bylo provedeno mnoho neformálních analýz výkonu PostgreSQL, ale první standardní ověřený (peer-validated) byl dokončen v červnu 2007 s využitím Sun Java System Application Serveru (proprietární verze GlassFish) 9.0 Platform Edition, serveru Sun Fire postaveném na UltraSPARC T1 a Postgres 8.2. Tento výsledek 778,14 SPECjAppServer2004 JOPS@Standard velmi dobře snese srovnání s výsledkem 874 JOPS@Standard databáze Oracle 10 na HP-UX systému poháněném Itanii.

V srpnu 2007, Sun zaslal vylepšené skóre benchmarku 813,73 SPECjAppServer2004 JOPS@Standard. S testovaným systémem za sníženou cenu, se poměr cena/výkon zlepšil z $US 84,98/JOPS na $US 70,57/JOPS.

Prominentní uživatelé 

 Yahoo! pro analýzu chování uživatelů na webu, obsahuje dva petabyty a předpokládá se, že se jedná o největší datový sklad (data warehouse [ˈdeitə ˈweəˌhaus]) postavený na silně modifikované verzi PostgreSQL se zcela odlišným storage enginem založeným na sloupcích (column-based storage engine) a jiné vrstvě pro zpracování dotazů. Ačkoliv co se týká výkonu, způsobu ukládání dat a způsobu vyhodnocování dotazů toto řešení PostgreSQL podobá jen minimálně, kompatibilita z vnějšku je zachována, takže Yahoo může použít mnoho existujících nástrojů napsaných pro práci s PostgreSQL.
 MySpace, populární sociální síť, používá Aster nCluster Database pro data warehousing, který je postavený na nemodifikované verzi PostgreSQL.
 OpenStreetMap, projekt pro společné vytváření volné editovatelné mapy světa.
 Afilias, doménový registr pro .org, .info a další.
 Sony Online multiplayer online hry.
 BASF, nákupní platforma pro jejich zemědělský portál.
 hi5.com, sociální síť.
 Skype VoIP aplikace, centrální obchodní databáze.
 Sun xVM, nástroj firmy Sun pro automatizaci virtualizace a datacenter.
 Evergreen, otevřený integrovaný knihovní systém poskytující Online Public Access Catalog a katalogizaci, správu a další funkce pro stovky knihoven ve Spojených státech, Kanadě a jinde.
 MusicBrainz, otevřená online hudební encyklopedie.
 Aradiom, společnost poskytující multiplatformní (cross-platform [ˌkros ˈplætfoːm]) mobilní aplikace.

Ceny 
Do roku 2008 PostgreSQL obdržel následující ceny:
 1999 LinuxWorld Editor's Choice Award for Best Database
 2000 Linux Journal Editors' Choice Awards for Best Database
 2002 Linux New Media Editors Choice Award for Best Database
 2003 Linux Journal Editors' Choice Awards for Best Database
 2004 Linux New Media Award For Best Database
 2004 Linux Journal Editors' Choice Awards for Best Database
 2004 ArsTechnica Best Server Application Award
 2005 Linux Journal Editors' Choice Awards for Best Database
 2006 Linux Journal Editors' Choice Awards for Best Database
 2008 Developer.com Product of the Year, Database Tool

Odkazy

Reference

Literatura

Externí odkazy 
 
  české stránky PostgreSQL
  Czechoslovak PostgreSQL User Group
  Tutoriál o PostgreSQL a rozdílech s dalšími databázemi.
  jednoduchý popis instalace.
  Planet PostgreSQL společný blog vývojářů PostgreSQL
  Profesionální technická podpora pro PostgreSQL
  Průvodce instalací PostgreSQL 
  Průvodce začátky s PostgreSQL
  články o PostgreSQL v Database Journal
  Linux Productivity Magazine: celé číslo o PostgreSQL
  PostgreSQL chytáky, dokumentované ale ne zcela přirozené chování
  Test_PGC, Ukázkový program SQL/C program s „embedded SQL“ pro PostgreSQL demonstrující databázové operace a testování SQLSTATE.
  PostgreSQL Performance Tuning

Systémy řízení báze dat
Svobodný software v C