PostgreSQL

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 .

Podpora standardů, funkce, funkce

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:

Historie

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.

Historie verzí
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 Stará verze, nepodporovaná: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 Stará verze, nepodporovaná:6.2.1 1997-10-17 n/a Rozhraní JDBC , spouštěče , programovací rozhraní serveru, omezení .
6.3 1998-03-01 Stará verze, nepodporovaná:6.3.2 1998-04-07 2003-03-01 Podvýběr podpory z SQL-92 , PL/pgTCL.
6.4 1998-10-30 Stará verze, nepodporovaná: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 Stará verze, nepodporovaná: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 Stará verze, nepodporovaná:7.0.3 2000-11-11 2004-05-08 Externí include, syntaxe SQL-92 pro spojení (JOIN).
7.1 2001-04-13 Stará verze, nepodporovaná:7.1.3 2001-08-15 2006-04-13 Proaktivní protokolování , OUTER JOIN.
7.2 2002-02-04 Stará verze, nepodporovaná: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 Stará verze, nepodporovaná:7.3.21 2008-01-07 2007-11-27 schémata , tabulkové funkce, připravené dotazy [12] .
7.4 2003-11-17 Stará verze, nepodporovaná:7.4.30 2010-10-04 2010-10-01 Optimalizace ve funkcích JOINů a datových skladů [13] .
8,0 2005-01-19 Stará verze, nepodporovaná: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 Stará verze, nepodporovaná: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 Stará verze, nepodporovaná: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 Stará verze, nepodporovaná: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 Stará verze, nepodporovaná: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 Stará verze, nepodporovaná: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 Stará verze, nepodporovaná: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] Stará verze, nepodporovaná: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 Stará verze, nepodporovaná: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 Stará verze, nepodporovaná: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 Stará verze, nepodporovaná: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 Stará verze, nepodporovaná: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 Stará podporovaná verze: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 Stará podporovaná verze: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 Stará podporovaná verze: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 Stará podporovaná verze: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 Současná verze: 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] .

Klíčové vlastnosti

Funkce

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

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

Pravidla a reprezentace

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.

Indexy

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:

Multiverzování ( MVCC )

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

Datové typy

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 .

Vlastní objekty

PostgreSQL si může uživatel rozšířit pro své potřeby téměř v jakémkoliv aspektu. Je možné přidat vlastní:

Dědičnost a rozdělení

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

Další vlastnosti

Kvalita zdrojového kódu

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.

Deriváty

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:

PostgreSQL

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

Poznámky

  1. https://www.postgresql.org/docs/current/history.html
  2. Vydán PostgreSQL 15
  3. https://github.com/postgres/postgres
  4. Postgres Open Source Project na Open Hub: Jazyková stránka - 2006.
  5. 1 2 3 4 5 6 https://www.postgresql.org/download/
  6. Podle FAQ Archived 15. října 2011 na Wayback Machine , stejně jako podle zvukového záznamu Archived 17. září 2009 na Wayback Machine referenční výslovnosti existuje výslovnost "Postgre-S-Q-El" , která není zcela v souladu s historií názvu (neexistuje žádné samostatné slovo „Postgre“ a částice „-gres“ se nachází v názvech mnoha relačních DBMS).
  7. „Příloha D. Shoda SQL“ Archivováno 23. března 2014 na Wayback Machine . Dokumentace PostgreSQL 9 archivována 8. července 2014 na Wayback Machine . Globální vývojová skupina PostgreSQL. 2009 [1996]. Získáno 2013-04-01.
  8. "SQL Conformance" Archivováno 21. července 2014 na Wayback Machine . postgresql.org. 2013-04-04. Získáno 28. 8. 2013.
  9. Limity PostgreSQL . www.postgresql.org. Získáno 15. srpna 2016. Archivováno z originálu 12. listopadu 2019.
  10. PostgreSQL: Dokumentace: 11: Procedurální jazyky . www.postgresql.org. Získáno 2. března 2019. Archivováno z originálu dne 3. března 2019.
  11. Zásady verzování . Globální vývojová skupina PostgreSQL. Získáno 4. října 2018. Archivováno z originálu dne 4. dubna 2022.
  12. Vaas, Lisa (2. prosince 2002). "Databáze se zaměřují na podniky" . eTýden . Staženo 29. října 2016 .
  13. Krill, Paul (20. listopadu 2003). PostgreSQL posiluje open source databázi . infosvět . Archivováno z originálu dne 2018-11-06 . Staženo 21. října 2016 . Použitý zastaralý parametr |deadlink=( nápověda )
  14. Krill, Paul (19. ledna 2005). „Open source databáze PostgreSQL se může pochlubit vylepšením Windows“ . infosvět . Archivováno z originálu dne 2018-11-06 . Staženo 2. listopadu 2016 . Použitý zastaralý parametr |deadlink=( nápověda )
  15. Weiss, Todd R. (5. prosince 2006). „Vydána verze 8.2 open-source PostgreSQL DB“ . počítačový svět . Staženo 17. října 2016 .
  16. Gilbertson, Scott (5. února 2008). „PostgreSQL 8.3: Databáze s otevřeným zdrojovým kódem slibuje závratnou rychlost“ . drátové . Archivováno z originálu dne 2017-03-16 . Staženo 17. října 2016 . Použitý zastaralý parametr |deadlink=( nápověda )
  17. Huber, Mathias (2. července 2009). „PostgreSQL 8.4 je bohatý na funkce“ . Linuxový časopis . Archivováno z originálu dne 2020-06-09 . Staženo 17. října 2016 . Použitý zastaralý parametr |deadlink=( nápověda )
  18. Brockmeier, Joe Pět podnikových funkcí v PostgreSQL 9 . linux.com . Linux Foundation (30. září 2010). Datum přístupu: 6. února 2017. Archivováno z originálu 18. února 2021.
  19. Timothy Prickett Morgan (12. září 2011). „PostgreSQL revize na 9.1, cíle pro podniky“ . Registr . Archivováno z originálu dne 2018-11-06 . Staženo 6. února 2017 . Použitý zastaralý parametr |deadlink=( nápověda )
  20. PostgreSQL: Vydán PostgreSQL 9.2 . www.postgresql.org (10. září 2012). Získáno 5. dubna 2022. Archivováno z originálu dne 21. září 2020.
  21. Znovuzavedení Hstore pro PostgreSQL . InfoQ . Získáno 5. dubna 2022. Archivováno z originálu dne 16. června 2021.
  22. Richard, Chirgwin (7. ledna 2016). „Řekni, ups, UPSERT your head: PostgreSQL verze 9.5 are landed“ . Registr . Archivováno z originálu dne 24.05.2020 . Staženo 17. října 2016 . Použitý zastaralý parametr |deadlink=( nápověda )
  23. PostgreSQL: Dokumentace: 10: Kapitola 31. Logická replikace . www.postgresql.org (12. srpna 2021). Získáno 5. dubna 2022. Archivováno z originálu 5. dubna 2022.
  24. Vydán PostgreSQL 11 (18. října 2018). Získáno 18. října 2018. Archivováno z originálu 14. září 2020.
  25. Poznámky k vydání PostgreSQL . Získáno 18. října 2018. Archivováno z originálu dne 26. října 2018.
  26. PostgreSQL: Vydán PostgreSQL 12!  (3. října 2019). Archivováno z originálu 24. září 2020. Staženo 5. dubna 2022.
  27. PostgreSQL 13 Release Notes . www.postgresql.org (12. srpna 2021). Získáno 5. dubna 2022. Archivováno z originálu 5. dubna 2022.
  28. Vydán PostgreSQL 13! . www.postgresql.org (24. září 2020). Získáno 5. dubna 2022. Archivováno z originálu dne 31. března 2022.
  29. PostgreSQL 14 Release Notes . www.postgresql.org (11. listopadu 2021). Získáno 5. dubna 2022. Archivováno z originálu dne 25. března 2022.
  30. Vydán PostgreSQL 14! . www.postgresql.org (30. září 2021). Získáno 5. dubna 2022. Archivováno z originálu dne 31. března 2022.
  31. PostgreSQL dosáhl certifikace kvality Coverity  (anglicky)  (odkaz není dostupný) . PostgreSQL Global Development Group (24. července 2005). — Zprávy o výsledcích certifikace kvality. Získáno 8. září 2009. Archivováno z originálu 24. srpna 2011.
  32. Databáze odvozené z PostgreSQL . PostgreSQL Wiki. Získáno 30. července 2018. Archivováno z originálu 30. července 2018.
  33. Přístup k migraci databází z Oracle do EnterpriseDB (downlink) . Solomatin Bureau (13. prosince 2010). — Přístup k migraci databáze z Oracle na EnterpriseDB. Získáno 13. prosince 2010. Archivováno z originálu dne 24. srpna 2011.    (downlink od 07-03-2017 [2063 dní])
  34. 2ndQPostgres . Datum přístupu: 8. listopadu 2019. Archivováno z originálu 8. listopadu 2019.
  35. Fujitsu Enterprise Postgres . Datum přístupu: 8. listopadu 2019. Archivováno z originálu 8. listopadu 2019.
  36. PostgreSQL . Získáno 8. listopadu 2019. Archivováno z originálu dne 6. září 2019.
  37. Konstantin Skurat (15. 11. 2021). "SUBDsidia v růstu" . Comnews . Archivováno z originálu dne 2022-01-30 . Získáno 2022-01-30 . Použitý zastaralý parametr |deadlink=( help );Zkontrolujte datum na |date=( nápověda v angličtině )
  38. Alexandr Malyarevskij (27. července 2021). „Virtualizace: trendy v rámci trendu na ruském trhu“ . CRN . Archivováno z originálu dne 2022-01-30 . Získáno 2022-01-30 . Použitý zastaralý parametr |deadlink=( help );Zkontrolujte datum na |date=( nápověda v angličtině )
  39. Denis Voeikov (10. prosince 2020). „Rosatom masivně mění Oracle a Microsoft DBMS na ruský Postgres Pro“ . Cnews . Archivováno z originálu dne 2022-01-30 . Získáno 2022-01-30 . Použitý zastaralý parametr |deadlink=( nápověda )
  40. Denis Voeikov (4. ledna 2021). „Goznak přechází na ruský DBMS Postgres Pro“ . Cnews . Archivováno z originálu dne 2022-01-30 . Získáno 2022-01-30 . Použitý zastaralý parametr |deadlink=( help );Zkontrolujte datum na |date=( nápověda v angličtině )
  41. Vladislav Meshcheryakov (28. ledna 2015). „Zakladatel NVision investoval do ruského vývojového týmu PostgreSQL“ . Cnews . Archivováno z originálu dne 2022-01-30 . Získáno 2022-01-30 . Použitý zastaralý parametr |deadlink=( nápověda )

Odkazy