PostgreSQL | |
---|---|
Tyyppi | relaatiotietokantajärjestelmä , ilmainen ja avoimen lähdekoodin ohjelmisto ja SQL-palvelin [d] |
Tekijä | Michael Stonebreaker [1] |
Kehittäjä | PostgreSQL-yhteisö |
Sisään kirjoitettu | C [3] [4] |
Käyttöjärjestelmä | FreeBSD [5] , OpenBSD [5] , Linux [5] , macOS [5] , Solaris [5] , Microsoft Windows [5] ja Unixin kaltainen käyttöjärjestelmä |
Ensimmäinen painos | 1996 |
uusin versio |
|
Lisenssi | PostgreSQL-lisenssi ( ilmainen ja avoimen lähdekoodin ) |
Verkkosivusto | postgresql.org _ |
Mediatiedostot Wikimedia Commonsissa |
PostgreSQL (lausutaan "Post-Gres-Q-El" [6] ) on ilmainen oliorelaatiotietokannan hallintajärjestelmä (DBMS).
Löytyy toteutuksissa useille UNIX-tyyppisille alustoille, mukaan lukien AIX , erilaiset BSD-järjestelmät , HP-UX , IRIX , Linux , macOS , Solaris / OpenSolaris , Tru64 , QNX ja Microsoft Windows .
PostgreSQL perustuu SQL -kieleen ja tukee monia SQL:2011 [7] [8] -standardin ominaisuuksia .
PostgreSQL-versiossa 12 on seuraavat rajoitukset [9] :
Tietokannan enimmäiskoko | Ei rajoituksia |
Pöydän enimmäiskoko | 32 TB |
Kentän enimmäiskoko | 1 Gt |
Tietueiden enimmäismäärä taulukkoa kohden | Rajoitettu pöydän koon mukaan |
Tietueen kenttiä enimmäismäärä | 250-1600 kenttätyypeistä riippuen |
Enimmäisindeksit taulukkoa kohden | Ei rajoituksia |
PostgreSQL:n vahvuudet ovat:
PostgreSQL perustuu ei-kaupalliseen Postgres-tietokantaan, joka on kehitetty avoimen lähdekoodin projektina Kalifornian yliopistossa Berkeleyssä . Vuonna 1986 alkanut Postgresin kehitys liittyi suoraan Michael Stonebreakeriin , aiemman Ingres -projektin johtajaan, jonka Computer Associates oli tuolloin jo hankkinut . Nimi merkitsi " Post Ingres " , ja monia varhaisia kehityssuuntia sovellettiin Postgresin luomiseen.
Stonebreaker ja hänen oppilaansa kehittivät uutta DBMS:ää kahdeksan vuoden ajan vuosina 1986–1994. Tänä aikana syntaksiin otettiin käyttöön menettelyjä, sääntöjä, käyttäjän määrittämiä tyyppejä ja muita komponentteja. Vuonna 1995 kehitys jakautui jälleen: Stonebreaker käytti kokemustaan rakentaakseen kaupallisen tietokannan Illustra , jota mainosti hänen oma samanniminen yritys (jonka myöhemmin hankki Informix ), ja hänen opiskelijansa kehittivät uuden version Postgresista, Postgres95, jossa POSTQUEL kyselykieli , Ingresin perintö, korvattiin SQL:llä.
Postgres95-kehitys vietiin yliopiston ulkopuolelle ja luovutettiin harrastajatiimille. Uusi DBMS sai nimen, jolla se tunnetaan ja jota kehitetään parhaillaan - PostgreSQL.
Versio | Ensimmäinen julkaisupäivä | Viimeisin pieni versio | Viimeinen julkaisupäivä | Tuen loppu [11] | Toteutetut ominaisuudet |
---|---|---|---|---|---|
6.0 | 1997-01-29 | n/a | n/a | n/a | Muodollisesti ensimmäinen PostgreSQL-julkaisu. Ainutlaatuiset indeksit, pg_dumpall-apuohjelma, identtinen todennus . |
6.1 | 1997-06-08 | 6.1.1 | 22.7.1997 | n/a | Monisarakkeiset indeksit, sekvenssit, rahatietotyyppi, GEQO (GENetic Query Optimizer). |
6.2 | 10.2.1997 | 6.2.1 | 17.10.1997 | n/a | JDBC- liitäntä , triggerit , palvelimen ohjelmointirajapinta, rajoitukset . |
6.3 | 1998-03-01 | 6.3.2 | 1998-04-07 | 2003-03-01 | Alivalitse tuki SQL-92 :sta, PL/pgTCL:stä. |
6.4 | 30.10.1998 | 6.4.2 | 20.12.1998 | 30.10.2003 | Tuki VIEW:lle (vain luku -tilassa) ja säännöille, PL/pgSQL . |
6.5 | 1999-06-09 | 6.5.3 | 13.10.1999 | 2004-06-09 | MVCC , väliaikaiset taulukot, tuki uusille SQL-käskyille (CASE, INTERSECT ja EXCEPT). |
7.0 | 2000-05-08 | 7.0.3 | 11.11.2000 | 2004-05-08 | Ulkoinen sisältää, SQL-92-syntaksi liitoksille (JOIN). |
7.1 | 13.4.2001 | 7.1.3 | 15.8.2001 | 13.4.2006 | Ennakoiva kirjaus , ULKOINEN LIITTYMINEN. |
7.2 | 2002-02-04 | 7.2.8 | 2005-05-09 | 2007-02-04 | PL/Python, OID -kenttä tulee valinnaiseksi taulukoissa, viestien kansainvälistymisessä ja lokalisoinnissa . |
7.3 | 27.11.2002 | 7.3.21 | 2008-01-07 | 27.11.2007 | skeemat , taulukkofunktiot, valmistetut kyselyt [12] . |
7.4 | 17.11.2003 | 7.4.30 | 2010-10-04 | 10.10.2010 | JOIN- ja tietovarastotoimintojen optimointi [13] . |
8.0 | 19.1.2005 | 8.0.26 | 2010-10-04 | 10.10.2010 | Microsoft Windows -versio , tapahtumien tallennuspisteet , taulukkotilat , ajankohtainen palautus [14] . |
8.1 | 2005-11-08 | 8.1.23 | 16.12.2010 | 08.11.2010 | Suorituskyvyn optimointi, kaksivaiheinen vahvistus, taulukon osiointi , indeksin bittikarttaskannaus SQL Plannerissa, jaettu rivitason lukitus, roolit. |
8.2 | 12.5.2006 | 8.2.23 | 12.5.2011 | 12.5.2011 | Suorituskyvyn optimointi, non-stop indeksin rakentaminen, neuvovat lukitukset, "lämmin valmiustila" palautettaessa tietokantaa WAL-tietueista [15] . |
8.3 | 2008-02-04 | 8.3.23 | 2013-02-07 | 2013-02-07 | Vain keon monikkomekanismi, täystekstihaku , [ 16] SQL/XML , ENUM-tyypit, UUID -tyypit . |
8.4 | 2009-07-01 | 8.4.22 | 24.7.2014 | 24.7.2014 | Ikkunatoiminnot, oikeudet taulukon kenttien (sarakkeiden) tasolla, rinnakkaistietokannan palautus, lajittelusäännöt tietokantatasolla, yleiset taulukkokyselyt ja rekursiiviset kyselyt [17] . |
9.0 | 20.9.2010 | 9.0.23 | 10.8.2015 | 10.8.2015 | Sisäänrakennettu suoratoiston binäärireplikointi , kuuma valmiustila , päivitys pysäyttämättä palvelinta, tuki Windowsin 64-bittisille versioille [18] . |
9.1 | 12.9.2011 | 9.1.24 | 27.10.2016 | 27.10.2016 | Synkroninen replikointi, sarakekohtainen lajittelu, kirjaamattomat taulukot, "serialisable Snapshot Isolation" -tapahtuman eristystaso, kirjoitettavuus yleisissä SQL-taulukkokyselyissä, SELinux -integraatio , laajennukset, ulkoiset taulukot [19] . |
9.2 | 10.9.2012 [20] | 9.2.24 | 9.11.2017 | 9.11.2017 | CSS-suoratoiston replikointi, vain indeksitarkistukset, suora JSON -tuki , parannettu lukituksen hallinta, aluetyypit, pg_receivexlog-apuohjelma, tilaosioidut GiST -indeksit . |
9.3 | 9.9.2013 | 9.3.25 | 08.11.2018 | 08.11.2018 | Muokattavat taustatyönkulut, sivun tarkistussummat vioittuneiden tietojen havaitsemiseksi, JSON-lauseet, LATTERAL JOIN, pg_dump-nopeus, uusi pg_isready-palvelimen seuranta-apuohjelma, parannetut trigger- ja perusnäkymäominaisuudet, kirjoitettavat ulkoiset taulukot, toteutuneet näkymät , replikoinnin parannukset. |
9.4 | 18.12.2014 | 9.4.26 | 13.2.2020 | 13.2.2020 | JSONB- tietotyyppi , ALTER SYSTEM -käsky järjestelmän kokoonpanon arvojen muuttamiseksi, kyky päivittää materialisoituneita näkymiä ilman lukuestoa, dynaaminen rekisteröinti/aloitus/pysäytys taustatyöntekijöiden prosessien, logiikan dekoodauksen API tietokantayhteydelle, parannetut GIN -indeksit , tuki valtavalle sivuja Linuxille, lataamalla tietokannan välimuisti uudelleen käyttämällä pg_prewarm-ohjelmaa, Hstoren uutta nopeutettua versiota, joka on asetettu ensisijaiseksi tapaksi tallentaa saraketietoja [21] . |
9.5 | 2016-01-07 | 9.5.25 | 2021-02-11 | 2021-02-11 | UPSERT, rivinsuojauskäytännöt, TABLESAMPLE, CUBE/ROLLUP, GROUPING SETS ja uusi indeksityyppi BRIN [22] . |
9.6 | 29.9.2016 | 9.6.24 | 11.11.2021 | 11.11.2021 | Rinnakkaiskyselytuki, PostgreSQL:n ulkomaisten tietojen käsittelyn (FDW) parannukset - lisätty pushdown-vaihtoehto lajitteluun/liittymiseen, useita synkronisia hot standby -palvelimia, nopeampi tyhjiötoiminta suurissa pöydissä. |
kymmenen | 10.5.2017 | 10.20 | 2022-02-10 | 10.11.2022 | Looginen replikointi, [23] deklaratiivinen taulukon osiointi, parannettu rinnakkaissuoritus kyselyissä. |
yksitoista | 18.10.2018 | 11.15 | 2022-02-10 | 9.11.2023 | Parempi osioinnin vakaus ja suorituskyky, tuki tallennetuissa proseduureissa, parannettu rinnakkaissuoritus kyselyissä, just-in-time (JIT) -lausekkeiden käännös [24] [25] . |
12 | 2019-10-03 | 12.10 | 2022-02-10 | 14.11.2024 | Nopeuttaa kyselyitä ja säästää levytilaa; tuki SQL/JSON-polun kielilausekkeille; luodut sarakkeet; kansainvälistymisen ja autentikoinnin parannukset; uusi käyttöliittymä liitettävien taulukkolaskentaohjelmien luomiseen [26] . |
13 | 24.09.2020 | 13.6 | 2022-02-10 | 13.11.2025 | Solmujen deduplikaatio B-puun indekseissä on nopeampaa ja vaatii vähemmän tilaa, aggregaatteja tai ositettuja taulukoita käyttävien kyselyiden tehokkuuden lisääntyminen, parannettu kyselyn ajoitus käytettäessä laajennettuja tilastoja, indeksien rinnakkais tyhjiöinti, inkrementaalinen lajittelu [27] [28] . |
neljätoista | 30.9.2021 | 14.2 | 2022-02-10 | 12.11.2026 | SQL:n määrittämät SEARCH- ja CYCLE-valinnat ovat sallittuja yleisissä taulukkokyselyissä , ja DISTINCT on sallittua lisätä ryhmään GROUP BY [29] [30] . |
Funktiot ovat koodilohkoja, jotka suoritetaan palvelimella, ei tietokantaasiakkaalla. Vaikka ne voidaan kirjoittaa puhtaalla SQL:llä, lisälogiikan, kuten ehdollisten ja silmukoiden , toteuttaminen ei kuulu SQL:n soveltamisalaan ja vaatii joidenkin kielilaajennusten käyttöä. Funktiot voidaan kirjoittaa jollakin seuraavista kielistä:
PostgreSQL sallii sellaisten funktioiden käytön, jotka palauttavat tietuejoukon, jota voidaan sitten käyttää samalla tavalla kuin tavallisen kyselyn tulosta.
Toimintoja voidaan suorittaa sekä niiden luojan että nykyisen käyttäjän oikeuksilla.
Joskus funktiot tunnistetaan tallennetuilla proseduureilla , mutta näiden käsitteiden välillä on ero. Yhdeksännestä versiosta lähtien on mahdollista kirjoittaa autonomisia lohkoja, joiden avulla voit suorittaa koodia proseduurikielillä ilman kirjoitustoimintoja suoraan asiakkaalle.
Triggerit määritellään DML -toimintojen käynnistämiksi funktioiksi . Esimerkiksi INSERT - toiminto voi käynnistää liipaisimen, joka tarkistaa lisätyn tietueen tiettyjen ehtojen suhteen. Kun kirjoitetaan liipaisutoimintoja, voidaan käyttää erilaisia ohjelmointikieliä (katso yllä).
Triggerit liittyvät taulukoihin. Useita laukaisuja suoritetaan aakkosjärjestyksessä.
Sääntömoottori ( eng. rules ) on mekanismi mukautettujen käsittelijöiden luomiseen DML - toimintojen lisäksi myös valintatoimintoihin. Suurin ero laukaisumekanismiin verrattuna on, että säännöt laukeavat pyynnön jäsennysvaiheessa, ennen optimaalisen suoritussuunnitelman valintaa ja itse suoritusprosessia. Sääntöjen avulla voit ohittaa järjestelmän toiminnan, kun suoritat SQL-toiminnon taulukolle. Hyvä esimerkki on näkymämekanismin ( eng. views ) toteutus: kun näkymä luodaan, luodaan sääntö, joka määrittelee, että järjestelmän tulee suorittaa hakutoiminnon sijaan näkymän noutotoiminto taustalla olevalle taulukolle. / taulukot, ottaen huomioon näkymän määritelmän taustalla olevat hakuehdot. Päivitystoimintoja tukevien näkymien luomiseksi käyttäjän on määritettävä rivien lisäämistä, päivittämistä ja poistamista koskevat säännöt.
PostgreSQL tukee seuraavia indeksityyppejä : B-tree , hash , GiST , GIN , BRIN , Bloom . Voit luoda uusia hakemistotyyppejä tarpeen mukaan. PostgreSQL:n indekseillä on seuraavat ominaisuudet:
PostgreSQL tukee useiden käyttäjien samanaikaista tietokannan muokkaamista käyttämällä Multiversion Concurrency Control ( MVCC ) -mekanismia. Tämä täyttää ACID - vaatimukset ja käytännössä eliminoi lukulukituksen tarpeen.
PostgreSQL tukee suurta joukkoa sisäänrakennettuja tietotyyppejä:
Lisäksi käyttäjä voi itsenäisesti luoda tarvitsemaansa uusia tyyppejä ja ohjelmoida niille indeksointimekanismeja GiST :n avulla .
Käyttäjä voi laajentaa PostgreSQL:ää omiin tarpeisiinsa lähes kaikilla osa-alueilla. On mahdollista lisätä omasi:
Taulukot voivat periä ominaisuuksia ja kenttäjoukkoja muista (emo)taulukoista. Tässä tapauksessa luotuun taulukkoon lisätyt tiedot osallistuvat automaattisesti (ellei sitä ole erikseen määritetty) päätaulukon kyselyihin.
PostgreSQL 10 lisäsi taulukon osiointimekanismin . Osiointi on suunniteltu jakamaan yksi taulukko useisiin, niin sanottuihin osioihin. Osiointi on samanlaista kuin perinnöllinen, mutta siinä on käyttäjäystävällisempi syntaksi ja vahvemmat rajoitukset, mikä mahdollistaa lisäoptimoinnin kyselyn suunnittelussa.
Vuonna 2005 suoritetun eri ohjelmistojen automaattisen virheanalyysin tulosten mukaan PostgreSQL-lähdekoodista löydettiin 20 ongelma -aluetta 775 000 lähdekoodiriviä kohti (keskimäärin yksi virhe 39 000 koodiriviä kohti) [31] . Vertailun vuoksi: MySQL - 97 ongelmaa, yksi virhe 8000 koodiriviä kohti; FreeBSD (kokonainen) - 306 ongelmaa, yksi bugi 2500 koodiriviä kohden; Linux (vain ydin) – 950 ongelmaa, yksi virhe 800 koodiriviä kohti.
PostgreSQL-lisenssi antaa sinun luoda siihen perustuvia erilaisia, mukaan lukien kaupallisia haarukoita . Tunnetaan useita kymmeniä [32] .
PostgreSQL:n perusteella EnterpriseDB on kehittänyt muita versioita tästä DBMS:stä, joista maksetaan kaupalliseen käyttöön - Postgres Plus (koostuu kokonaan avoimen lähdekoodin tuotteista; maksu vaaditaan vain, jos tarvitset kaupallista tukea tuotteelle) ja Postgres Plus Advanced Server ( PostgreSQL-laajennus erikoisominaisuuksilla varmistaakseen yhteensopivuuden Oracle-tietokannan kanssa ) [33] . Näiden tuotteiden toimitussarja sisältää ohjelmistopaketin kehittäjille ja tietokannan ylläpitäjille:
On muita kaupallisia tuotteita, jotka perustuvat PostgreSQL:ään ja täydentävät sitä eri toiminnoilla:
Kehittäjäyrityksen perustivat vuonna 2015 venäläiset 3 johtavaa kehittäjää (suurin tekijä ) PostgreSQL DBMS - Oleg Bartunov , Fedor Sigaev , Alexander Korotkov, kehittäjä Ivan Panchenko ja NVision Groupin perustaja Anton Sushkevich, josta tuli projektin sijoittaja [41] .
Tietokannan hallintajärjestelmät (DBMS) | |
---|---|
Asiakas-palvelin | |
Moottorit | |
Tiedosto palvelin |
Tietokanta | |
---|---|
Käsitteet |
|
Objektit | |
Avaimet |
|
SQL | |
Komponentit |