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 .
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:
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.
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 | 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 | 6.2.1 | 17-10-1997 | N / A | Interfață JDBC , declanșatoare , interfață de programare server, restricții . |
6.3 | 1998-03-01 | 6.3.2 | 1998-04-07 | 2003-03-01 | Subselectați suportul din SQL-92 , PL/pgTCL. |
6.4 | 1998-10-30 | 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 | 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 | 7.0.3 | 2000-11-11 | 2004-05-08 | Include externă, sintaxă SQL-92 pentru îmbinări (JOIN). |
7.1 | 2001-04-13 | 7.1.3 | 15-08-2001 | 13-04-2006 | Înregistrare proactivă , OUTER JOIN. |
7.2 | 2002-02-04 | 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 | 7.3.21 | 07-01-2008 | 27-11-2007 | scheme , funcții de tabel, interogări pregătite [12] . |
7.4 | 2003-11-17 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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] | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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] . |
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ș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ă.
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.
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:
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.
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 .
PostgreSQL poate fi extins de către utilizator pentru propriile nevoi în aproape orice aspect. Este posibil să adăugați propria dvs.:
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.
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.
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:
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] .
Sisteme de management al bazelor de date (DBMS) | |
---|---|
Client server | |
Motoare | |
Server de fișiere |
Bază de date | |
---|---|
Concepte |
|
Obiecte | |
Chei | |
SQL |
|
Componente |