PostgreSQL

PostgreSQL
Tip de SGBD relațional , software gratuit și open source și server SQL [d]
Autor Michael Stonebreaker [1]
Dezvoltator Comunitatea PostgreSQL
Scris in C [3] [4]
Sistem de operare FreeBSD [5] , OpenBSD [5] , Linux [5] , macOS [5] , Solaris [5] , Microsoft Windows [5] și sistem de operare asemănător Unix
Prima editie 1996
ultima versiune
Licență Licență PostgreSQL ( gratuită și cu sursă deschisă )
Site-ul web postgresql.org
 Fișiere media la Wikimedia Commons

PostgreSQL (pronunțat „Post-Gres-Q-El” [6] ) este un sistem gratuit de gestionare a bazelor de date obiect-relaționale (DBMS).

Există în implementări pentru o varietate de platforme asemănătoare UNIX , inclusiv AIX , diverse sisteme BSD , HP-UX , IRIX , Linux , macOS , Solaris / OpenSolaris , Tru64 , QNX și pentru Microsoft Windows .

Suport pentru standarde, caracteristici, caracteristici

PostgreSQL se bazează pe limbajul SQL și acceptă multe dintre caracteristicile standardului SQL:2011 [7] [8] .

PostgreSQL versiunea 12 are următoarele restricții [9] :

Dimensiunea maximă a bazei de date Fara restrictii
Dimensiunea maximă a mesei 32 TB
Dimensiunea maximă a câmpului 1 GB
Înregistrări maxime pe tabel Limitat de dimensiunea mesei
Câmpuri maxime dintr-o înregistrare 250-1600, în funcție de tipurile de câmp
Indici maximi pe tabel Fara restrictii

Punctele forte ale PostgreSQL sunt:

Istorie

PostgreSQL se bazează pe baza de date non-comercială Postgres dezvoltată ca proiect open-source la Universitatea din California, Berkeley . Dezvoltarea Postgres, care a început în 1986, a fost direct legată de Michael Stonebreaker , șeful proiectului anterior Ingres , la acea vreme deja achiziționat de Computer Associates . Numele a reprezentat „ Post Ingres ” și multe dezvoltări timpurii au fost aplicate în crearea Postgres.

Stonebreaker și studenții săi au dezvoltat noul DBMS timp de opt ani, din 1986 până în 1994. În această perioadă, procedurile, regulile, tipurile definite de utilizator și alte componente au fost introduse în sintaxă. În 1995, dezvoltarea s-a împărțit din nou: Stonebreaker și-a folosit experiența pentru a construi baza de date comercială Illustra , promovată de propria sa companie cu același nume (achiziționată ulterior de Informix ), iar studenții săi au dezvoltat o nouă versiune a Postgres, Postgres95, în care POSTQUEL limbajul de interogare  , o moștenire a lui Ingres, a fost înlocuit cu SQL.

Dezvoltarea Postgres95 a fost dusă în afara universității și predată unei echipe de entuziaști. Noul SGBD a primit numele cu care este cunoscut și este în curs de dezvoltare - PostgreSQL.

Versiunea istorică
Versiune Prima dată de lansare Ultima versiune minoră Ultima dată de lansare Sfârșitul suportului [11] Caracteristici implementate
6.0 1997-01-29 N / A N / A N / A În mod oficial, prima lansare a PostgreSQL. Indici unici, utilitar pg_dumpall, autentificare ident .
6.1 1997-06-08 Versiune veche, neacceptată:6.1.1 22-07-1997 N / A Indici multi-coloană, secvențe, tip de date monetare, GEQO (GEnetic Query Optimizer).
6.2 1997-10-02 Versiune veche, neacceptată:6.2.1 17-10-1997 N / A Interfață JDBC , declanșatoare , interfață de programare server, restricții .
6.3 1998-03-01 Versiune veche, neacceptată:6.3.2 1998-04-07 2003-03-01 Subselectați suportul din SQL-92 , PL/pgTCL.
6.4 1998-10-30 Versiune veche, neacceptată:6.4.2 1998-12-20 2003-10-30 Suport pentru VIEW (numai în modul read-only) și reguli, PL/pgSQL .
6.5 1999-06-09 Versiune veche, neacceptată:6.5.3 13-10-1999 2004-06-09 MVCC , tabele temporare, suport pentru noi instrucțiuni SQL (CASE, INTERSECT și EXCEPT).
7.0 2000-05-08 Versiune veche, neacceptată:7.0.3 2000-11-11 2004-05-08 Include externă, sintaxă SQL-92 pentru îmbinări (JOIN).
7.1 2001-04-13 Versiune veche, neacceptată:7.1.3 15-08-2001 13-04-2006 Înregistrare proactivă , OUTER JOIN.
7.2 2002-02-04 Versiune veche, neacceptată:7.2.8 2005-05-09 2007-02-04 PL/Python, câmpul OID devine opțional în tabele, internaționalizarea și localizarea mesajelor .
7.3 27-11-2002 Versiune veche, neacceptată:7.3.21 07-01-2008 27-11-2007 scheme , funcții de tabel, interogări pregătite [12] .
7.4 2003-11-17 Versiune veche, neacceptată:7.4.30 2010-10-04 01-10-2010 Optimizare în JOIN-uri și funcții de depozit de date [13] .
8.0 19-01-2005 Versiune veche, neacceptată:8.0.26 2010-10-04 01-10-2010 Versiune pentru Microsoft Windows , puncte de salvare în tranzacții , spații de tabele , recuperare punct-in-time [14] .
8.1 2005-11-08 Versiune veche, neacceptată:8.1.23 16-12-2010 08-11-2010 Optimizări de performanță, confirmare în două faze, partiționare tabelă , scanare bitmap index în planificatorul SQL, blocare partajată la nivel de rând, roluri.
8.2 2006-12-05 Versiune veche, neacceptată:8.2.23 05-12-2011 05-12-2011 Optimizarea performanței, construirea non-stop de index, blocări de consiliere, modul „warm standby” la restaurarea bazei de date din înregistrările WAL [15] .
8.3 2008-02-04 Versiune veche, neacceptată:8.3.23 07-02-2013 07-02-2013 Mecanism de tuplu numai heap, căutare full-text , [16] SQL/XML , tipuri ENUM, tipuri UUID .
8.4 2009-07-01 Versiune veche, neacceptată:8.4.22 24-07-2014 24-07-2014 Funcții de fereastră, permisiuni la nivelul câmpurilor (coloanelor) tabelului, recuperare paralelă a bazei de date, reguli de sortare la nivel de bază de date, interogări comune de tabel și interogări recursive [17] .
9,0 20-09-2010 Versiune veche, neacceptată:9.0.23 2015-10-08 2015-10-08 Replicare binară de streaming încorporată , modul de așteptare la cald , upgrade fără oprirea serverului, suport pentru versiunile pe 64 de biți de Windows [18] .
9.1 2011-09-12 Versiune veche, neacceptată:9.1.24 27-10-2016 27-10-2016 Replicare sincronă, sortare pe coloană, tabele neînregistrate, nivel de izolare a tranzacțiilor „serializabil snapshot izolare”, scriere în interogări comune de tabel SQL, integrare SELinux , extensii, tabele externe [19] .
9.2 2012-09-10 [20] Versiune veche, neacceptată:9.2.24 2017-11-09 2017-11-09 Replicare streaming în cascadă, scanări numai indexate, suport direct JSON , management îmbunătățit al blocărilor, tipuri de intervale, utilitar pg_receivexlog, indici GiST partiționați în spațiu .
9.3 2013-09-09 Versiune veche, neacceptată:9.3.25 08-11-2018 08-11-2018 Fluxuri de lucru de fundal configurabile, sume de verificare a paginilor pentru detectarea datelor corupte, instrucțiuni JSON, LATERAL JOIN, accelerare pg_dump, nou utilitar de monitorizare a serverului pg_isready, capabilități îmbunătățite de declanșare și vizualizare de bază, tabele externe care pot fi scrise, vizualizări materializate , îmbunătățiri de replicare.
9.4 2014-12-18 Versiune veche, neacceptată:9.4.26 2020-02-13 2020-02-13 Tip de date JSONB , instrucțiune ALTER SYSTEM pentru modificarea valorilor în configurația sistemului, capacitatea de a actualiza vizualizările materializate fără blocarea citirii, înregistrarea dinamică/pornirea/oprirea proceselor de lucru în fundal, API de decodare logică pentru conexiunea la baza de date, indici GIN îmbunătățiți , suport pentru uriașe pagini pentru Linux, reîncărcarea cache-ului bazei de date folosind pg_prewarm, o nouă versiune accelerată a Hstore poziționată ca modalitate preferată de stocare a datelor coloanei [21] .
9.5 07-01-2016 Versiune veche, neacceptată:9.5.25 2021-02-11 2021-02-11 UPSERT, politici de protecție a rândurilor, TABLESAMPLE, CUBE/ROLLUP, GROUPING SETS și noul tip de index BRIN [22] .
9.6 29-09-2016 Versiune veche, neacceptată:9.6.24 2021-11-11 2021-11-11 Suport pentru interogări paralele, îmbunătățiri PostgreSQL pentru manipularea datelor străine (FDW) - opțiune adăugată pushdown pentru sortare/asociere, mai multe servere sincrone de așteptare la cald, operare mai rapidă în vid pe mese mari.
zece 05-10-2017 Versiune veche acceptată:10.20 2022-02-10 2022-11-10 Replicare logică, [23] partiționare declarativă a tabelelor, execuție paralelă îmbunătățită în interogări.
unsprezece 18-10-2018 Versiune veche acceptată:11.15 2022-02-10 2023-11-09 Stabilitate și performanță îmbunătățite de partiționare, suport pentru tranzacții în procedurile stocate, execuție paralelă îmbunătățită în interogări, compilare de expresii just-in-time (JIT) [24] [25] .
12 2019-10-03 Versiune veche acceptată:12.10 2022-02-10 2024-11-14 Accelerați interogările și utilizarea mai economică a spațiului pe disc; suport pentru expresiile limbajului de cale SQL/JSON; coloane generate; îmbunătățiri în internaționalizare și autentificare; o nouă interfață pentru crearea motoarelor de foi de calcul conectabile [26] .
13 24-09-2020 Versiune veche acceptată:13.6 2022-02-10 2025-11-13 Deduplicarea nodurilor în indexurile B-tree este mai rapidă și necesită mai puțin spațiu, performanță crescută a interogărilor care utilizează agregate sau tabele partiționate, programare îmbunătățită a interogărilor atunci când se utilizează statistici extinse, aspirarea paralelă a indicilor, sortare incrementală [27] [28] .
paisprezece 30-09-2021 Versiune curentă: 14.2 2022-02-10 2026-11-12 Opțiunile SEARCH și CYCLE definite de SQL sunt permise în interogările de tabel generale și este permisă adăugarea DISTINCT la GROUP BY [29] [30] .

Caracteristici cheie

Funcții

Funcțiile sunt blocuri de cod care rulează pe server, nu pe clientul bazei de date. Deși pot fi scrise în SQL pur, implementarea logicii suplimentare, cum ar fi condiționalele și buclele , este în afara domeniului de aplicare al SQL și necesită utilizarea unor extensii de limbaj. Funcțiile pot fi scrise folosind una dintre următoarele limbi:

PostgreSQL permite utilizarea funcțiilor care returnează un set de înregistrări, care pot fi apoi utilizate în același mod ca rezultatul unei interogări normale.

Funcțiile pot fi executate atât cu drepturile creatorului lor, cât și cu drepturile utilizatorului actual.

Uneori, funcțiile sunt identificate cu proceduri stocate , dar există o diferență între aceste concepte. Începând cu versiunea a noua, este posibil să scrieți blocuri autonome care vă permit să executați cod în limbaje procedurale fără a scrie funcții, direct în client.

Declanșatoare

Declanșatorii sunt definiți ca funcții inițiate de operațiuni DML . De exemplu, o operație INSERT poate declanșa un declanșator care verifică înregistrarea adăugată în anumite condiții. Când scrieți funcții pentru declanșatoare, pot fi utilizate diverse limbaje de programare (vezi mai sus).

Declanșatoarele sunt asociate cu tabele. Declanșatoarele multiple sunt executate în ordine alfabetică.

Reguli și reprezentări

Motorul de reguli ( ing.  reguli ) este un mecanism pentru crearea de handlere personalizate nu numai pentru operațiunile DML , ci și pentru operațiunile de selecție. Principala diferență față de mecanismul de declanșare este că regulile sunt declanșate în etapa de analiză a cererii, înainte de alegerea planului de execuție optim și a procesului de execuție în sine. Regulile vă permit să suprascrieți comportamentul sistemului atunci când efectuați o operație SQL pe o tabelă. Un bun exemplu este implementarea mecanismului de vizualizare ( ing.  vizualizări ): atunci când este creată o vizualizare, este creată o regulă care specifică că, în loc să efectueze o operație de preluare pe vizualizare, sistemul ar trebui să efectueze o operație de preluare pe tabelul de bază. / tabele, ținând cont de condițiile de preluare care stau la baza definiției vizualizării. Pentru a crea vizualizări care acceptă operațiuni de actualizare, regulile pentru inserarea, actualizarea și ștergerea rândurilor trebuie să fie definite de utilizator.

Indici

PostgreSQL acceptă următoarele tipuri de index : B-tree , hash , GiST , GIN , BRIN , Bloom . Puteți crea noi tipuri de index după cum este necesar. Indecșii din PostgreSQL au următoarele proprietăți:

Multiversioning ( MVCC )

PostgreSQL acceptă modificarea simultană a bazei de date de către mai mulți utilizatori folosind mecanismul Multiversion Concurrency Control ( MVCC ). Acest lucru îndeplinește cerințele ACID și elimină practic nevoia de blocări de citire.

Tipuri de date

PostgreSQL acceptă un set mare de tipuri de date încorporate:

În plus, utilizatorul poate crea în mod independent noi tipuri de care are nevoie și poate programa mecanisme de indexare pentru ele folosind GiST .

Obiecte personalizate

PostgreSQL poate fi extins de către utilizator pentru propriile nevoi în aproape orice aspect. Este posibil să adăugați propria dvs.:

Moștenire și partiționare

Tabelele pot moșteni caracteristici și seturi de câmpuri de la alte tabele (părinte). În acest caz, datele adăugate la tabelul generat vor participa automat (cu excepția cazului în care este specificat separat) la interogări către tabelul părinte.

PostgreSQL 10 a adăugat un mecanism de partiţionare a tabelelor . Partiționarea este concepută pentru a împărți un tabel în mai multe, așa-numitele partiții. Partiționarea este similară cu moștenirea, dar are o sintaxă mai ușor de utilizat și restricții mai puternice, ceea ce permite optimizări suplimentare în planificarea interogărilor.

Alte caracteristici

Calitatea codului sursă

Conform rezultatelor unei analize automate a diferitelor programe software pentru erori, efectuată în 2005, în codul sursă PostgreSQL au fost găsite 20 de zone cu probleme la 775.000 de linii de cod sursă (în medie, o eroare la 39.000 de linii de cod) [31] . Pentru comparație: MySQL  - 97 de probleme, o eroare la 8.000 de linii de cod; FreeBSD (întreg) - 306 probleme, un bug la 2.500 de linii de cod; Linux (numai kernel) - 950 de probleme, o eroare la 800 de linii de cod.

Derivate

Licența PostgreSQL vă permite să creați diverse, inclusiv comerciale, fork -uri bazate pe aceasta . Sunt cunoscute câteva zeci [32] .

Pe baza PostgreSQL, EnterpriseDB a dezvoltat alte variante ale acestui DBMS care sunt plătite pentru uz comercial - Postgres Plus (constă în întregime din produse open source; plata este necesară doar dacă trebuie să achiziționați suport comercial pentru produs) și Postgres Plus Advanced Server ( Extensie PostgreSQL cu capabilități speciale pentru a asigura compatibilitatea cu baza de date Oracle ) [33] . Setul de livrare al acestor produse conține un set de software pentru dezvoltatori și administratorii de baze de date:

Există și alte produse comerciale bazate pe PostgreSQL și care îl completează cu diverse funcții:

PostgreSQL

Compania de dezvoltare a fost înființată în 2015 de către cei 3 dezvoltatori ruși ( contribuitor major ) PostgreSQL DBMS - Oleg Bartunov , Fedor Sigaev , Alexander Korotkov, dezvoltatorul Ivan Panchenko și co-fondatorul NVision Group Anton Sushkevich, care a devenit investitorul proiectului [41] .

Note

  1. https://www.postgresql.org/docs/current/history.html
  2. PostgreSQL 15 lansat
  3. https://github.com/postgres/postgres
  4. Proiectul postgres Open Source pe Open Hub: Pagina de limbi - 2006.
  5. 1 2 3 4 5 6 https://www.postgresql.org/download/
  6. Conform FAQ Arhivat 15 octombrie 2011 pe Wayback Machine , precum și conform înregistrării audio Arhivat 17 septembrie 2009 pe Wayback Machine a pronunției de referință, există o pronunție „Postgre-S-Q-El” , care nu este în întregime în concordanță cu istoria numelui (nu există un cuvânt separat „Postgre”, iar particula „-gres” se găsește în numele multor SGBD relaționale).
  7. „Anexa D. Conformitatea SQL” Arhivat 23 martie 2014 la Wayback Machine . Documentația PostgreSQL 9 Arhivată la 8 iulie 2014 la Wayback Machine . Grupul de dezvoltare globală PostgreSQL. 2009 [1996]. Extras 2013-04-01.
  8. „SQL Conformance” Arhivat 21 iulie 2014 la Wayback Machine . postgresql.org. 2013-04-04. Consultat 2013-08-28.
  9. Limite PostgreSQL . www.postgresql.org. Consultat la 15 august 2016. Arhivat din original la 12 noiembrie 2019.
  10. PostgreSQL: Documentație: 11: Limbaje procedurale . www.postgresql.org. Preluat la 2 martie 2019. Arhivat din original la 3 martie 2019.
  11. Politica de versiuni . Grupul de dezvoltare globală PostgreSQL. Preluat la 4 octombrie 2018. Arhivat din original la 4 aprilie 2022.
  12. Vaas, Lisa (2 decembrie 2002). „Întreprinderi țintă baze de date” . eWeek . Consultat la 29 octombrie 2016 .
  13. Krill, Paul (20 noiembrie 2003). PostgreSQL îmbunătățește baza de date open source . infoworld . Arhivat din original pe 06.11.2018 . Extras 21 octombrie 2016 . Parametrul depreciat folosit |deadlink=( ajutor )
  14. Krill, Paul (19 ianuarie 2005). „Baza de date open source PostgreSQL se mândrește cu Windows boost” . infoworld . Arhivat din original pe 06.11.2018 . Recuperat la 2 noiembrie 2016 . Parametrul depreciat folosit |deadlink=( ajutor )
  15. Weiss, Todd R. (5 decembrie 2006). „A fost lansată versiunea 8.2 a bazei de date PostgreSQL open-source” . lumea computerelor . Recuperat la 17 octombrie 2016 .
  16. Gilbertson, Scott (5 februarie 2008). „PostgreSQL 8.3: baza de date cu sursă deschisă promite o viteză uimitoare” . cu fir . Arhivat din original pe 16.03.2017 . Recuperat la 17 octombrie 2016 . Parametrul depreciat folosit |deadlink=( ajutor )
  17. Huber, Mathias (2 iulie 2009). „PostgreSQL 8.4 se dovedește bogat în funcții” . Revista Linux . Arhivat din original pe 09.06.2020 . Recuperat la 17 octombrie 2016 . Parametrul depreciat folosit |deadlink=( ajutor )
  18. Brockmeier, Joe Five Enterprise Features în PostgreSQL 9 . linux.com . Linux Foundation (30 septembrie 2010). Data accesului: 6 februarie 2017. Arhivat din original pe 18 februarie 2021.
  19. Timothy Prickett Morgan (12 septembrie 2011). „PostgreSQL revine la 9.1, vizează întreprinderi” . Registrul . Arhivat din original pe 06.11.2018 . Extras 6 februarie 2017 . Parametrul depreciat folosit |deadlink=( ajutor )
  20. PostgreSQL: PostgreSQL 9.2 lansat . www.postgresql.org (10 septembrie 2012). Preluat la 5 aprilie 2022. Arhivat din original la 21 septembrie 2020.
  21. Reintroducerea Hstore pentru PostgreSQL . InfoQ . Preluat la 5 aprilie 2022. Arhivat din original la 16 iunie 2021.
  22. Richard, Chirgwin (7 ianuarie 2016). „Spune oops, ridică-ți capul: PostgreSQL versiunea 9.5 a aterizat” . Registrul . Arhivat din original pe 24.05.2020 . Recuperat la 17 octombrie 2016 . Parametrul depreciat folosit |deadlink=( ajutor )
  23. PostgreSQL: Documentație: 10: Capitolul 31. Replicare logică . www.postgresql.org (12 august 2021). Consultat la 5 aprilie 2022. Arhivat din original pe 5 aprilie 2022.
  24. PostgreSQL 11 lansat (18 octombrie 2018). Consultat la 18 octombrie 2018. Arhivat din original la 14 septembrie 2020.
  25. Note de lansare PostgreSQL . Preluat la 18 octombrie 2018. Arhivat din original la 26 octombrie 2018.
  26. PostgreSQL: PostgreSQL 12 lansat!  (3 octombrie 2019). Arhivat din original pe 24 septembrie 2020. Preluat la 5 aprilie 2022.
  27. Note de lansare PostgreSQL 13 . www.postgresql.org (12 august 2021). Consultat la 5 aprilie 2022. Arhivat din original pe 5 aprilie 2022.
  28. PostgreSQL 13 lansat! . www.postgresql.org (24 septembrie 2020). Preluat la 5 aprilie 2022. Arhivat din original la 31 martie 2022.
  29. Note de lansare PostgreSQL 14 . www.postgresql.org (11 noiembrie 2021). Preluat la 5 aprilie 2022. Arhivat din original la 25 martie 2022.
  30. PostgreSQL 14 lansat! . www.postgresql.org (30 septembrie 2021). Preluat la 5 aprilie 2022. Arhivat din original la 31 martie 2022.
  31. PostgreSQL Achieves Coverity Quality Certification  (Engleză)  (link nu este disponibil) . Grupul de dezvoltare globală PostgreSQL (24 iulie 2005). — Știri despre rezultatele certificării calității. Consultat la 8 septembrie 2009. Arhivat din original pe 24 august 2011.
  32. Baze de date derivate PostgreSQL . Wiki PostgreSQL. Preluat la 30 iulie 2018. Arhivat din original la 30 iulie 2018.
  33. Abordarea migrării bazelor de date de la Oracle la EnterpriseDB (downlink) . Biroul Solomatin (13 decembrie 2010). — Abordarea migrației bazei de date de la Oracle la EnterpriseDB. Consultat la 13 decembrie 2010. Arhivat din original la 24 august 2011.    (link descendent din 07-03-2017 [2063 zile])
  34. 2ndQPostgres . Data accesului: 8 noiembrie 2019. Arhivat din original pe 8 noiembrie 2019.
  35. Fujitsu Enterprise Postgres . Data accesului: 8 noiembrie 2019. Arhivat din original pe 8 noiembrie 2019.
  36. PostgreSQL . Consultat la 8 noiembrie 2019. Arhivat din original la 6 septembrie 2019.
  37. Konstantin Skurat (15.11.2021). „SUBDsidia în creștere” . Comnews . Arhivat din original pe 30.01.2022 . Accesat 2022-01-30 . Parametru depreciat folosit |deadlink=( ajutor );Verificați data la |date=( ajutor în engleză )
  38. Alexander Malyarevsky (27 iulie 2021). „Virtualizarea: tendințe în cadrul unei tendințe pe piața rusă” . CRN . Arhivat din original pe 30.01.2022 . Accesat 2022-01-30 . Parametru depreciat folosit |deadlink=( ajutor );Verificați data la |date=( ajutor în engleză )
  39. Denis Voeikov (10 decembrie 2020). „Rosatom schimbă masiv Oracle și Microsoft DBMS în Postgres Pro rusesc” . Cnews . Arhivat din original pe 30.01.2022 . Accesat 2022-01-30 . Parametrul depreciat folosit |deadlink=( ajutor )
  40. Denis Voeikov (04 ianuarie 2021). „Goznak trece la DBMS rus Postgres Pro” . Cnews . Arhivat din original pe 30.01.2022 . Accesat 2022-01-30 . Parametru depreciat folosit |deadlink=( ajutor );Verificați data la |date=( ajutor în engleză )
  41. Vladislav Meshcheryakov (28 ianuarie 2015). „Fondatorul NVision a investit în echipa rusă de dezvoltare PostgreSQL” . Cnews . Arhivat din original pe 30.01.2022 . Accesat 2022-01-30 . Parametrul depreciat folosit |deadlink=( ajutor )

Link -uri