PostgreSQL | |
---|---|
Typ | relační DBMS , bezplatný a open source software a SQL server [d] |
Autor | Michael Stonebreaker [1] |
Vývojář | PostgreSQL komunita |
Zapsáno v | C [3] [4] |
Operační systém | FreeBSD [5] , OpenBSD [5] , Linux [5] , macOS [5] , Solaris [5] , Microsoft Windows [5] a operační systém podobný Unixu |
První vydání | 1996 |
Nejnovější verze | |
Licence | Licence PostgreSQL ( zdarma a open-source ) |
webová stránka | postgresql.org _ |
Mediální soubory na Wikimedia Commons |
PostgreSQL (vyslovuje se "Post-Gres-Q-El" [6] ) je bezplatný objektově-relační systém pro správu databází (DBMS).
Existuje v implementacích pro různé platformy podobné UNIXu , včetně AIX , různé systémy BSD , HP-UX , IRIX , Linux , macOS , Solaris / OpenSolaris , Tru64 , QNX a pro Microsoft Windows .
PostgreSQL je založen na jazyku SQL a podporuje mnoho funkcí standardu SQL:2011 [7] [8] .
PostgreSQL verze 12 má následující omezení [9] :
Maximální velikost databáze | Bez omezení |
Maximální velikost stolu | 32 TB |
Maximální velikost pole | 1 GB |
Maximální počet záznamů na tabulku | Omezeno velikostí stolu |
Maximální počet polí v záznamu | 250-1600, v závislosti na typech polí |
Maximální indexy na tabulku | Bez omezení |
Silné stránky PostgreSQL jsou:
PostgreSQL je založen na nekomerční databázi Postgres vyvinuté jako open-source projekt na University of California, Berkeley . Vývoj Postgresu, který započal v roce 1986, přímo souvisel s Michaelem Stonebreakerem , šéfem dřívějšího projektu Ingres , v té době již získaným Computer Associates . Jméno znamenalo „ Post Ingres “ a mnoho raných vývojů bylo použito při vytváření Postgres.
Stonebreaker a jeho studenti vyvíjeli nový DBMS osm let od roku 1986 do roku 1994. Během tohoto období byly do syntaxe zavedeny procedury, pravidla, uživatelem definované typy a další komponenty. V roce 1995 se vývoj opět rozdělil: Stonebreaker využil své zkušenosti k vybudování komerční databáze Illustra , kterou propagovala jeho vlastní stejnojmenná společnost (později koupená Informixem ), a jeho studenti vyvinuli novou verzi Postgres, Postgres95, ve které POSTQUEL dotazovací jazyk , dědictví Ingres, byl nahrazen SQL.
Vývoj Postgres95 byl přenesen mimo univerzitu a předán týmu nadšenců. Nový DBMS dostal název, pod kterým je znám a v současnosti se vyvíjí – PostgreSQL.
Verze | Datum prvního vydání | Poslední vedlejší verze | Datum posledního vydání | Konec podpory [11] | Implementované funkce |
---|---|---|---|---|---|
6.0 | 1997-01-29 | n/a | n/a | n/a | Formálně první vydání PostgreSQL. Jedinečné indexy, nástroj pg_dumpall, autentizace ident . |
6.1 | 1997-06-08 | 6.1.1 | 1997-07-22 | n/a | Vícesloupcové indexy, sekvence, peněžní datový typ, GEQO (GEnetic Query Optimizer). |
6.2 | 1997-10-02 | 6.2.1 | 1997-10-17 | n/a | Rozhraní JDBC , spouštěče , programovací rozhraní serveru, omezení . |
6.3 | 1998-03-01 | 6.3.2 | 1998-04-07 | 2003-03-01 | Podvýběr podpory z SQL-92 , PL/pgTCL. |
6.4 | 1998-10-30 | 6.4.2 | 1998-12-20 | 2003-10-30 | Podpora VIEW (pouze v režimu pouze pro čtení) a pravidel, PL/pgSQL . |
6.5 | 1999-06-09 | 6.5.3 | 1999-10-13 | 2004-06-09 | MVCC , dočasné tabulky, podpora nových SQL příkazů (CASE, INTERSECT a EXCEPT). |
7,0 | 2000-05-08 | 7.0.3 | 2000-11-11 | 2004-05-08 | Externí include, syntaxe SQL-92 pro spojení (JOIN). |
7.1 | 2001-04-13 | 7.1.3 | 2001-08-15 | 2006-04-13 | Proaktivní protokolování , OUTER JOIN. |
7.2 | 2002-02-04 | 7.2.8 | 2005-05-09 | 2007-02-04 | PL/Python, pole OID se stává volitelným v tabulkách, internacionalizaci zpráv a lokalizaci . |
7.3 | 2002-11-27 | 7.3.21 | 2008-01-07 | 2007-11-27 | schémata , tabulkové funkce, připravené dotazy [12] . |
7.4 | 2003-11-17 | 7.4.30 | 2010-10-04 | 2010-10-01 | Optimalizace ve funkcích JOINů a datových skladů [13] . |
8,0 | 2005-01-19 | 8.0.26 | 2010-10-04 | 2010-10-01 | Verze pro Microsoft Windows , body uložení v transakcích , tabulkové prostory , bodová obnova [14] . |
8.1 | 2005-11-08 | 8.1.23 | 2010-12-16 | 2010-11-08 | Optimalizace výkonu, dvoufázové potvrzení, rozdělení tabulek , skenování bitmap indexu v plánovači SQL, sdílené zamykání na úrovni řádků, role. |
8.2 | 2006-12-05 | 8.2.23 | 2011-12-05 | 2011-12-05 | Optimalizace výkonu, nepřetržité vytváření indexů, poradní zámky, režim „teplého pohotovostního režimu“ při obnově databáze ze záznamů WAL [15] . |
8.3 | 2008-02-04 | 8.3.23 | 2013-02-07 | 2013-02-07 | Mechanismus n-tic pouze pro haldu, fulltextové vyhledávání , [16] SQL/XML , typy ENUM, typy UUID . |
8.4 | 2009-07-01 | 8.4.22 | 2014-07-24 | 2014-07-24 | Funkce oken, oprávnění na úrovni polí (sloupců) tabulky, paralelní obnova databáze, třídicí pravidla na úrovni databáze, běžné tabulkové dotazy a rekurzivní dotazy [17] . |
9,0 | 2010-09-20 | 9.0.23 | 2015-10-08 | 2015-10-08 | Vestavěná streamingová binární replikace , aktivní pohotovostní režim , upgrade bez zastavení serveru, podpora 64bitových verzí Windows [18] . |
9.1 | 2011-09-12 | 9.1.24 | 2016-10-27 | 2016-10-27 | Synchronní replikace, třídění podle sloupců, nezaprotokolované tabulky, úroveň izolace transakcí „serializovatelný snímek izolace“, zapisovatelnost v běžných dotazech na SQL tabulky, integrace SELinux , rozšíření, externí tabulky [19] . |
9.2 | 2012-09-10 [20] | 9.2.24 | 2017-11-09 | 2017-11-09 | Kaskádová replikace streamování, skenování pouze na základě indexu, přímá podpora JSON , vylepšená správa zámků, typy rozsahů, nástroj pg_receivexlog, indexy GiST rozdělené do prostoru . |
9.3 | 2013-09-09 | 9.3.25 | 2018-11-08 | 2018-11-08 | Konfigurovatelné pracovní postupy na pozadí, kontrolní součty stránek pro detekci poškozených dat, příkazy JSON, LATERAL JOIN, zrychlení pg_dump, nový nástroj pro monitorování serveru pg_isready, vylepšené možnosti spouštění a základního zobrazení, zapisovatelné externí tabulky, materializované pohledy , vylepšení replikace. |
9.4 | 2014-12-18 | 9.4.26 | 2020-02-13 | 2020-02-13 | Datový typ JSONB , příkaz ALTER SYSTEM pro změnu hodnot v konfiguraci systému, možnost aktualizovat materializované pohledy bez blokování čtení, dynamická registrace/spouštění/zastavování pracovních procesů na pozadí, API pro dekódování logiky pro připojení k databázi, vylepšené indexy GIN , podpora obrovských stránky pro Linux, znovu načtení mezipaměti databáze pomocí pg_prewarm, nové akcelerované verze Hstore umístěné jako preferovaný způsob ukládání dat sloupců [21] . |
9.5 | 2016-01-07 | 9.5.25 | 2021-02-11 | 2021-02-11 | UPSERT, zásady ochrany řádků, TABLES AMPLE, CUBE/ROLLUP, GROUPING SETS a nový typ indexu BRIN [22] . |
9.6 | 2016-09-29 | 9.6.24 | 2021-11-11 | 2021-11-11 | Podpora paralelních dotazů, vylepšení PostgreSQL pro zpracování cizích dat (FDW) - přidána možnost posunutí dolů pro řazení/spojení, více synchronních serverů v pohotovostním režimu, rychlejší vakuový provoz na velkých stolech. |
deset | 2017-10-05 | 10.20 | 2022-02-10 | 2022-11-10 | Logická replikace, [23] deklarativní rozdělení tabulek, vylepšené paralelní provádění v dotazech. |
jedenáct | 2018-10-18 | 11.15 | 2022-02-10 | 2023-11-09 | Vylepšená stabilita a výkon dělení, podpora transakcí v uložených procedurách, vylepšené paralelní provádění v dotazech, kompilace výrazů just-in-time (JIT) [24] [25] . |
12 | 2019-10-03 | 12.10 | 2022-02-10 | 2024-11-14 | Zrychlení dotazů a hospodárnější využití místa na disku; podpora jazykových výrazů cesty SQL/JSON; generované sloupce; zlepšení v internacionalizaci a ověřování; nové rozhraní pro vytváření zásuvných tabulkových procesorů [26] . |
13 | 2020-09-24 | 13.6 | 2022-02-10 | 2025-11-13 | Deduplikace uzlů v indexech B-stromu je rychlejší a vyžaduje méně místa, zvýšený výkon dotazů, které využívají agregace nebo dělené tabulky, vylepšené plánování dotazů při použití rozšířené statistiky, paralelní vysávání indexů, přírůstkové řazení [27] [28] . |
čtrnáct | 2021-09-30 | 14.2 | 2022-02-10 | 2026-11-12 | SQL-definované volby SEARCH a CYCLE jsou povoleny v obecných tabulkových dotazech a je povoleno přidat DISTINCT do GROUP BY [29] [30] . |
Funkce jsou bloky kódu, které běží na serveru, nikoli na databázovém klientovi. Ačkoli mohou být napsány v čistém SQL, implementace další logiky, jako jsou podmínky a smyčky , je mimo rozsah SQL a vyžaduje použití některých jazykových rozšíření. Funkce lze psát pomocí jednoho z následujících jazyků:
PostgreSQL umožňuje použití funkcí, které vracejí sadu záznamů, které pak lze použít stejným způsobem jako výsledek běžného dotazu.
Funkce lze spouštět jak s právy jejich tvůrce, tak s právy aktuálního uživatele.
Někdy jsou funkce identifikovány s uloženými procedurami , ale mezi těmito pojmy je rozdíl. Od deváté verze je možné psát autonomní bloky, které umožňují spouštět kód v procedurálních jazycích bez psaní funkcí přímo v klientovi.
Spouštěče jsou definovány jako funkce iniciované operacemi DML . Operace INSERT může například spustit spouštěč, který kontroluje přidaný záznam podle určitých podmínek. Při psaní funkcí pro spouštěče lze použít různé programovací jazyky (viz výše).
Spouštěče jsou spojeny s tabulkami. Vícenásobné spouštění se provádí v abecedním pořadí.
Modul pravidel ( angl. rules ) je mechanismus pro vytváření vlastních handlerů nejen pro operace DML , ale také pro operace výběru. Hlavní rozdíl oproti spouštěcímu mechanismu spočívá v tom, že pravidla se spouštějí ve fázi analýzy požadavku, před výběrem optimálního plánu provádění a před samotným procesem provádění. Pravidla vám umožňují přepsat chování systému při provádění operace SQL na tabulce. Dobrým příkladem je implementace mechanismu zobrazení ( eng. views ): při vytvoření pohledu je vytvořeno pravidlo, které určuje, že namísto provedení operace načtení na pohledu by měl systém provést operaci načtení na podkladové tabulce. / tabulky s přihlédnutím k podmínkám načítání, které jsou základem definice pohledu. Chcete-li vytvořit pohledy, které podporují operace aktualizace, pravidla pro vkládání, aktualizaci a odstraňování řádků musí definovat uživatel.
PostgreSQL podporuje následující typy indexů : B-tree , hash , GiST , GIN , BRIN , Bloom . Podle potřeby můžete vytvářet nové typy indexů. Indexy v PostgreSQL mají následující vlastnosti:
PostgreSQL podporuje současnou modifikaci databáze několika uživateli pomocí mechanismu Multiversion Concurrency Control ( MVCC ). To splňuje požadavky ACID a prakticky eliminuje potřebu zámků čtení.
PostgreSQL podporuje velkou sadu vestavěných datových typů:
Kromě toho může uživatel nezávisle vytvářet nové typy, které potřebuje, a programovat pro ně mechanismy indexování pomocí GiST .
PostgreSQL si může uživatel rozšířit pro své potřeby téměř v jakémkoliv aspektu. Je možné přidat vlastní:
Tabulky mohou dědit charakteristiky a sady polí z jiných (nadřazených) tabulek. V tomto případě se data přidaná do vygenerované tabulky budou automaticky účastnit (pokud to není uvedeno samostatně) dotazů na nadřazenou tabulku.
PostgreSQL 10 přidal mechanismus rozdělení tabulek . Rozdělení je určeno k rozdělení jedné tabulky na více, tzv. oddíly. Rozdělení je podobné dědičnosti, ale má uživatelsky přívětivější syntaxi a silnější omezení, což umožňuje další optimalizace při plánování dotazů.
Podle výsledků automatizované analýzy chyb různého softwaru, provedené v roce 2005, bylo ve zdrojovém kódu PostgreSQL nalezeno 20 problémových oblastí na 775 000 řádků zdrojového kódu (v průměru jedna chyba na 39 000 řádků kódu) [31] . Pro srovnání: MySQL - 97 problémů, jedna chyba na 8 000 řádků kódu; FreeBSD (celé) – 306 problémů, jedna chyba na 2 500 řádků kódu; Linux (pouze jádro) – 950 problémů, jedna chyba na 800 řádků kódu.
Licence PostgreSQL vám umožňuje na jejím základě vytvářet různé, včetně komerčních, forků . Známých je několik desítek [32] .
Na základě PostgreSQL vyvinul EnterpriseDB další varianty tohoto DBMS, které jsou placené pro komerční použití - Postgres Plus (skládá se výhradně z produktů s otevřeným zdrojovým kódem; platba je vyžadována pouze v případě, že potřebujete zakoupit komerční podporu pro produkt) a Postgres Plus Advanced Server ( Rozšíření PostgreSQL se speciálními schopnostmi pro zajištění kompatibility s databází Oracle ) [33] . Dodávka těchto produktů obsahuje sadu softwaru pro vývojáře a správce databází:
Existují další komerční produkty založené na PostgreSQL a doplňující jej o různé funkce:
Developerská společnost byla založena v roce 2015 ruskými 3 předními vývojáři ( hlavní přispěvatel ) PostgreSQL DBMS - Oleg Bartunov , Fedor Sigaev , Alexander Korotkov, vývojář Ivan Panchenko a spoluzakladatel NVision Group Anton Sushkevich, který se stal investorem projektu [41] .
Systémy pro správu databází (DBMS) | |
---|---|
Klient-server | |
Motory | |
Souborový server |
Databáze | |
---|---|
Koncepty |
|
Objekty | |
Klíče | |
SQL | |
Komponenty |