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í.