databázový systém From Wikipedia, the free encyclopedia
PostgreSQL, často jednoduše Postgres, je svobodný a otevřený objektově-relační databázový systém.[5] 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.
![]() | |
![]() | |
Vývojář | PostgreSQL Global Development Group |
---|---|
První vydání | 8. července 1996[1] |
Aktuální verze | 16.4 (8. srpna 2024) |
Operační systém | multiplatformní, GNU/Linux a další UN*Xy (macOS, rodina BSD, AIX, Solaris atd.), MS Windows |
Vyvíjeno v | C |
Typ softwaru | RDBMS, ORDBMS |
Licence | PostgreSQL licence[2][3][4] |
Web | postgresql.org |
Český web | postgres.cz/PostgreSQL |
Některá data mohou pocházet z datové položky. |
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.[6] 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.
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.[7] 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.
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ů,[8] ale koncem roku 2001 ukončila svou činnost kvůli tvrdé konkurenci a nepříznivým podmínkám na trhu.[9]
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.[10]
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),[11][nedostupný zdroj] ačkoliv v té době nebyly zveřejněny žádné detaily. V listopadu 2005 Sun oznámil podporu pro PostgreSQL.[12] Od června 2006 zahrnoval operační systém Solaris 10 (vydání 6/06) PostgreSQL.
V srpnu 2007 společnost EnterpriseDB oznámila[13] 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.
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:
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.
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:
WHERE
klauzule na konec příkazu CREATE INDEX
. To umožňuje vytvoření menších indexů.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.
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 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.
Podporována je široká škála nativních datových typů, mezi jinými:
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.
Vytvořit lze nové typy téměř všech objektů v databázi, mezi které patří:
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.
insert
, update
a/nebo delete
přepisovacích pravidel na příslušném pohledu.Inner
, outer
(full
, left
a right
), a cross joiny
Poznámka: platí při použití techniky TOAST.[22]
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 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 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.[24]
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ů.
Bylo provedeno mnoho neformálních analýz výkonu PostgreSQL,[25] 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.[26] 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.[25]
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.[27]
Do roku 2008 PostgreSQL obdržel následující ceny:[39]
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.