PostgreSQL

PostgreSQL
Sorts relationell DBMS , fri och öppen källkod och SQL-server [d]
Författare Michael Stonebreaker [1]
Utvecklaren PostgreSQL-community
Skrivet i C [3] [4]
Operativ system FreeBSD [5] , OpenBSD [5] , Linux [5] , macOS [5] , Solaris [5] , Microsoft Windows [5] och Unix-liknande operativsystem
Första upplagan 1996
senaste versionen
Licens PostgreSQL-licens ( gratis och öppen källkod )
Hemsida postgresql.org
 Mediafiler på Wikimedia Commons

PostgreSQL (uttalas "Post-Gres-Q-El" [6] ) är ett gratis objektrelationellt databashanteringssystem (DBMS).

Finns i implementeringar för en mängd olika UNIX-liknande plattformar, inklusive AIX , olika BSD-system , HP-UX , IRIX , Linux , macOS , Solaris / OpenSolaris , Tru64 , QNX och för Microsoft Windows .

Standardstöd, funktioner, funktioner

PostgreSQL är baserat på SQL- språket och stöder många av funktionerna i standarden SQL:2011 [7] [8] .

PostgreSQL version 12 har följande begränsningar [9] :

Maximal databasstorlek Inga begränsningar
Maximal bordsstorlek 32 TB
Maximal fältstorlek 1 GB
Maximalt antal poster per tabell Begränsad av bordsstorlek
Maximalt antal fält i en post 250-1600, beroende på fälttyper
Maximalt antal index per tabell Inga begränsningar

Styrkan med PostgreSQL är:

Historik

PostgreSQL är baserat på den icke-kommersiella Postgres-databasen utvecklad som ett öppen källkodsprojekt vid University of California, Berkeley . Utvecklingen av Postgres, som började 1986, var direkt relaterad till Michael Stonebreaker , chef för det tidigare projektet Ingres , som vid den tiden redan förvärvades av Computer Associates . Namnet stod för " Post Ingres " , och många tidiga utvecklingar tillämpades i skapandet av Postgres.

Stonebreaker och hans elever utvecklade det nya DBMS under åtta år från 1986 till 1994. Under denna period introducerades procedurer, regler, användardefinierade typer och andra komponenter i syntaxen. 1995 splittrades utvecklingen igen: Stonebreaker använde sin erfarenhet för att bygga den kommersiella databasen Illustra , som främjades av hans eget företag med samma namn (senare förvärvat av Informix ), och hans elever utvecklade en ny version av Postgres, Postgres95, där POSTQUEL frågespråk  , ett arv från Ingres, ersattes till SQL.

Postgres95 utveckling togs utanför universitetet och överlämnades till ett team av entusiaster. Det nya DBMS fick det namn som det är känt under och som för närvarande utvecklas - PostgreSQL.

Versionshistorik
Version Första releasedatum Sista mindre versionen Senaste releasedatum Slut på support [11] Implementerade funktioner
6,0 1997-01-29 n/a n/a n/a Formellt den första utgåvan av PostgreSQL. Unika index, pg_dumpall-verktyg, ident- autentisering .
6.1 1997-06-08 Gammal version, stöds inte:6.1.1 1997-07-22 n/a Flerkolumnsindex, sekvenser, pengadatatyp, GEQO (GENetic Query Optimizer).
6.2 1997-10-02 Gammal version, stöds inte:6.2.1 1997-10-17 n/a JDBC -gränssnitt , triggers , serverprogrammeringsgränssnitt, restriktioner .
6.3 1998-03-01 Gammal version, stöds inte:6.3.2 1998-04-07 2003-03-01 Undervälj support från SQL-92 , PL/pgTCL.
6.4 1998-10-30 Gammal version, stöds inte:6.4.2 1998-12-20 2003-10-30 Stöd för VIEW (endast i skrivskyddat läge) och regler, PL/pgSQL .
6.5 1999-06-09 Gammal version, stöds inte:6.5.3 1999-10-13 2004-06-09 MVCC , temporära tabeller, stöd för nya SQL-satser (CASE, INTERSECT och EXCEPT).
7,0 2000-05-08 Gammal version, stöds inte:7.0.3 2000-11-11 2004-05-08 Externt inkluderar, SQL-92-syntax för joins (JOIN).
7.1 2001-04-13 Gammal version, stöds inte:7.1.3 2001-08-15 2006-04-13 Proaktiv loggning , YTTRE JOIN.
7.2 2002-02-04 Gammal version, stöds inte:7.2.8 2005-05-09 2007-02-04 PL/Python, OID -fältet blir valfritt i tabeller, meddelandeinternationalisering och lokalisering .
7.3 2002-11-27 Gammal version, stöds inte:7.3.21 2008-01-07 2007-11-27 scheman , tabellfunktioner, förberedda frågor [12] .
7.4 2003-11-17 Gammal version, stöds inte:7.4.30 2010-10-04 2010-10-01 Optimering av JOINs och datalagerfunktioner [13] .
8,0 2005-01-19 Gammal version, stöds inte:8.0.26 2010-10-04 2010-10-01 Version för Microsoft Windows , räddningspunkter i transaktioner , tabellutrymmen , punkt-i-tidsåterställning [14] .
8.1 2005-11-08 Gammal version, stöds inte:8.1.23 2010-12-16 2010-11-08 Prestandaoptimeringar, tvåfasig commit, tabellpartitionering , indexbitmappsskanning i SQL-planerare, delad radnivålåsning, roller.
8.2 2006-12-05 Gammal version, stöds inte:8.2.23 2011-12-05 2011-12-05 Prestandaoptimering, non-stop indexuppbyggnad, rådgivande lås, "varmt standby"-läge vid återställning av databasen från WAL-poster [15] .
8.3 2008-02-04 Gammal version, stöds inte:8.3.23 2013-02-07 2013-02-07 Heap-only tuples-mekanism, fulltextsökning , [16] SQL/XML , ENUM-typer, UUID- typer .
8.4 2009-07-01 Gammal version, stöds inte:8.4.22 2014-07-24 2014-07-24 Fönsterfunktioner, behörigheter på fältnivå (kolumner) i tabellen, parallell databasåterställning, sorteringsregler på databasnivå, vanliga tabellfrågor och rekursiva frågor [17] .
9,0 2010-09-20 Gammal version, stöds inte:9.0.23 2015-10-08 2015-10-08 Inbyggd strömmande binär replikering , hot standby -läge , uppgradering utan att stoppa servern, stöd för 64-bitarsversioner av Windows [18] .
9.1 2011-09-12 Gammal version, stöds inte:9.1.24 2016-10-27 2016-10-27 Synkron replikering, sortering per kolumn, icke-loggade tabeller, "serialiserbar ögonblicksbildsisolering" transaktionsisoleringsnivå, skrivbarhet i vanliga SQL-tabellfrågor, SELinux- integration , tillägg, externa tabeller [19] .
9.2 2012-09-10 [20] Gammal version, stöds inte:9.2.24 2017-11-09 2017-11-09 Cascading streaming replikering, index-endast skanningar, direkt JSON -stöd , förbättrad låshantering, intervalltyper, pg_receivexlog-verktyg, space-partitionerade GiST -index .
9.3 2013-09-09 Gammal version, stöds inte:9.3.25 2018-11-08 2018-11-08 Konfigurerbara bakgrundsarbetsflöden, sidkontrollsummor för att upptäcka korrupta data, JSON-satser, LATERAL JOIN, pg_dump speedup, nytt pg_isready-serverövervakningsverktyg, förbättrade trigger- och basvymöjligheter, skrivbara externa tabeller, materialiserade vyer , replikeringsförbättringar.
9.4 2014-12-18 Gammal version, stöds inte:9.4.26 2020-02-13 2020-02-13 JSONB- datatyp , ALTER SYSTEM-sats för att ändra värden i systemkonfiguration, möjlighet att uppdatera materialiserade vyer utan läsblockering, dynamisk registrering/start/stopp av bakgrundsarbetarprocesser, logisk avkodnings-API för databasanslutning, förbättrade GIN- index , stöd för enorma sidor för Linux, ladda om databascachen med pg_prewarm, en ny accelererad version av Hstore placerad som det föredragna sättet att lagra kolumndata [21] .
9.5 2016-01-07 Gammal version, stöds inte:9.5.25 2021-02-11 2021-02-11 UPSERT, radskyddspolicyer, TABLESAMPLE, CUBE/ROLLUP, GROUPING SET, och den nya indextypen BRIN [22] .
9.6 2016-09-29 Gammal version, stöds inte:9.6.24 2021-11-11 2021-11-11 Stöd för parallella frågor, PostgreSQL-förbättringar för hantering av utländsk data (FDW) - tillagt pushdown-alternativ för sortering/join, flera synkrona hot standby-servrar, snabbare vakuumdrift på stora bord.
tio 2017-10-05 Gammal version som stöds:10.20 2022-02-10 2022-11-10 Logisk replikering, [23] deklarativ tabellpartitionering, förbättrad parallell exekvering i frågor.
elva 2018-10-18 Gammal version som stöds:11.15 2022-02-10 2023-11-09 Förbättrad partitioneringsstabilitet och prestanda, stöd för transaktioner i lagrade procedurer, förbättrad parallell exekvering i frågor, just-in-time (JIT) uttryckskompilering [24] [25] .
12 2019-10-03 Gammal version som stöds:12.10 2022-02-10 2024-11-14 Snabba upp frågor och mer ekonomisk användning av diskutrymme; stöd för SQL/JSON-sökvägsspråksuttryck; genererade kolumner; förbättringar av internationalisering och autentisering; ett nytt gränssnitt för att skapa pluggbara kalkylbladsmotorer [26] .
13 2020-09-24 Gammal version som stöds:13.6 2022-02-10 2025-11-13 Deduplicering av noder i B-trädindex är snabbare och kräver mindre utrymme, ökad prestanda för frågor som använder aggregat eller partitionerade tabeller, förbättrad frågeschemaläggning vid användning av utökad statistik, parallell dammsugning av index, inkrementell sortering [27] [28] .
fjorton 2021-09-30 Aktuell version: 14.2 2022-02-10 2026-11-12 De SQL-definierade SEARCH- och CYCLE-alternativen är tillåtna i allmänna tabellfrågor och det är tillåtet att lägga till DISTINCT till GROUP BY [29] [30] .

Nyckelfunktioner

Funktioner

Funktioner är kodblock som körs på servern, inte på databasklienten. Även om de kan skrivas i ren SQL ligger implementeringen av ytterligare logik, såsom villkor och loopar , utanför SQLs ram och kräver användning av vissa språktillägg. Funktioner kan skrivas med ett av följande språk:

PostgreSQL tillåter användning av funktioner som returnerar en uppsättning poster, som sedan kan användas på samma sätt som resultatet av en normal fråga.

Funktioner kan köras både med rättigheterna för deras skapare och med rättigheterna för den aktuella användaren.

Ibland identifieras funktioner med lagrade procedurer , men det finns en skillnad mellan dessa koncept. Sedan den nionde versionen är det möjligt att skriva autonoma block som låter dig exekvera kod på procedurspråk utan skrivfunktioner, direkt i klienten.

Utlösare

Triggers definieras som funktioner som initieras av DML- operationer. Till exempel kan en INSERT- operation aktivera en trigger som kontrollerar den tillagda posten mot vissa villkor. När du skriver funktioner för triggers kan olika programmeringsspråk användas (se ovan).

Utlösare är associerade med tabeller. Flera triggers exekveras i alfabetisk ordning.

Regler och representationer

Regelmotorn ( eng.  rules ) är en mekanism för att skapa anpassade hanterare inte bara för DML- operationer utan även för urvalsoperationer. Den största skillnaden från utlösningsmekanismen är att reglerna utlöses vid förfrågningsanalysen, före valet av den optimala exekveringsplanen och själva exekveringsprocessen. Regler tillåter dig att åsidosätta systemets beteende när du utför en SQL-operation på en tabell. Ett bra exempel är implementeringen av vymekanismen ( eng. views ): när en vy skapas skapas en regel som anger att istället för att utföra en hämtningsoperation på vyn ska systemet utföra en hämtningsoperation på den underliggande tabellen / tabeller, med hänsyn till hämtningsvillkoren som ligger till grund för vydefinitionen. För att skapa vyer som stöder uppdateringsoperationer måste reglerna för att infoga, uppdatera och ta bort rader definieras av användaren.  

Index

PostgreSQL stöder följande indextyper : B-tree , hash , GiST , GIN , BRIN , Bloom . Du kan skapa nya indextyper efter behov. Index i PostgreSQL har följande egenskaper:

Multiversioning ( MVCC )

PostgreSQL stöder samtidig modifiering av databasen av flera användare med hjälp av mekanismen Multiversion Concurrency Control ( MVCC ). Detta uppfyller ACID- kraven och eliminerar praktiskt taget behovet av läslås.

Datatyper

PostgreSQL stöder en stor uppsättning inbyggda datatyper:

Dessutom kan användaren självständigt skapa nya typer som han behöver och programmera indexeringsmekanismer för dem med hjälp av GiST .

Anpassade objekt

PostgreSQL kan utökas av användaren för sina egna behov i nästan vilken aspekt som helst. Det är möjligt att lägga till din egen:

Arv och partitionering

Tabeller kan ärva egenskaper och fältuppsättningar från andra (överordnade) tabeller. I det här fallet kommer data som läggs till i den genererade tabellen automatiskt att delta (om det inte anges separat) i frågor till den överordnade tabellen.

PostgreSQL 10 lade till en tabellpartitioneringsmekanism . Partitionering är utformad för att dela upp en tabell i flera, de så kallade partitionerna. Partitionering liknar arv, men har en mer användarvänlig syntax och starkare begränsningar, vilket möjliggör ytterligare optimeringar i frågeplanering.

Andra funktioner

Källkodskvalitet

Enligt resultaten av en automatiserad analys av olika programvaror för fel, utförd 2005, hittades 20 problemområden i PostgreSQL-källkoden per 775 000 rader källkod (i genomsnitt ett fel per 39 000 rader kod) [31] . Som jämförelse: MySQL  - 97 problem, ett fel per 8 000 rader kod; FreeBSD (hela) - 306 nummer, en bugg per 2 500 rader kod; Linux (endast kärna) - 950 problem, en bugg per 800 rader kod.

Derivater

PostgreSQL-licensen låter dig skapa olika, inklusive kommersiella, gafflar baserade på den . Det finns flera dussin kända [32] .

Baserat på PostgreSQL har EnterpriseDB utvecklat andra varianter av detta DBMS som betalas för kommersiellt bruk - Postgres Plus (består helt av produkter med öppen källkod; betalning krävs endast om du behöver köpa kommersiell support för produkten) och Postgres Plus Advanced Server ( PostgreSQL-tillägg med speciella funktioner för att säkerställa kompatibilitet med Oracle-databasen ) [33] . Leveransuppsättningen av dessa produkter innehåller en uppsättning programvara för utvecklare och databasadministratörer:

Det finns andra kommersiella produkter baserade på PostgreSQL och kompletterar den med olika funktioner:

PostgreSQL

Utvecklarföretaget grundades 2015 av ryska tre ledande utvecklare ( Major Contributor ) PostgreSQL DBMS - Oleg Bartunov , Fedor Sigaev , Alexander Korotkov, utvecklaren Ivan Panchenko och NVision Groups medgrundare Anton Sushkevich, som blev projektinvesteraren [41] .

Anteckningar

  1. https://www.postgresql.org/docs/current/history.html
  2. PostgreSQL 15 släppt
  3. https://github.com/postgres/postgres
  4. Postgres Open Source Project på Open Hub: Languages-sidan - 2006.
  5. 1 2 3 4 5 6 https://www.postgresql.org/download/
  6. Enligt FAQ Arkiverad 15 oktober 2011 på Wayback Machine , samt enligt ljudinspelningen Arkiverad 17 september 2009 på Wayback Machine för referensuttalet, finns det ett uttal "Postgre-S-Q-El" , som stämmer inte helt överens med namnets historia (det finns inget separat ord "Postgre", och partikeln "-gres" finns i namnen på många relationella DBMS).
  7. "Appendix D. SQL Conformance" Arkiverad 23 mars 2014 på Wayback Machine . PostgreSQL 9-dokumentation Arkiverad 8 juli 2014 på Wayback Machine . PostgreSQL Global Development Group. 2009 [1996]. Hämtad 2013-04-01.
  8. "SQL Conformance" Arkiverad 21 juli 2014 på Wayback Machine . postgresql.org. 2013-04-04. Hämtad 2013-08-28.
  9. PostgreSQL-gränser . www.postgresql.org. Hämtad 15 augusti 2016. Arkiverad från originalet 12 november 2019.
  10. PostgreSQL: Dokumentation: 11: Procedurspråk . www.postgresql.org. Hämtad 2 mars 2019. Arkiverad från originalet 3 mars 2019.
  11. Versioneringspolicy . PostgreSQL Global Development Group. Hämtad 4 oktober 2018. Arkiverad från originalet 4 april 2022.
  12. Vaas, Lisa (2 december 2002). "Databaser riktar sig mot företag" . eWeek . Hämtad 29 oktober 2016 .
  13. Krill, Paul (20 november 2003). PostgreSQL ökar databasen med öppen källkod . infovärlden . Arkiverad från originalet 2018-11-06 . Hämtad 21 oktober 2016 . Utfasad parameter används |deadlink=( hjälp )
  14. Krill, Paul (19 januari 2005). "PostgreSQL-databas med öppen källkod har Windows-boost" . infovärlden . Arkiverad från originalet 2018-11-06 . Hämtad 2 november 2016 . Utfasad parameter används |deadlink=( hjälp )
  15. Weiss, Todd R. (5 december 2006). "Version 8.2 av postgreSQL DB med öppen källkod släppt" . datorvärlden . Hämtad 17 oktober 2016 .
  16. Gilbertson, Scott (5 februari 2008). "PostgreSQL 8.3: Open Source Database Promises Blazing Speed" . trådbunden . Arkiverad från originalet 2017-03-16 . Hämtad 17 oktober 2016 . Utfasad parameter används |deadlink=( hjälp )
  17. Huber, Mathias (2 juli 2009). "PostgreSQL 8.4 visar sig vara rik på funktioner" . Linux Magazine . Arkiverad från originalet 2020-06-09 . Hämtad 17 oktober 2016 . Utfasad parameter används |deadlink=( hjälp )
  18. Brockmeier, Joe Fem företagsfunktioner i PostgreSQL 9 . linux.com . Linux Foundation (30 september 2010). Datum för åtkomst: 6 februari 2017. Arkiverad från originalet 18 februari 2021.
  19. Timothy Prickett Morgan (12 september 2011). "PostgreSQL varv till 9.1, syftar till företagande" . Registret . Arkiverad från originalet 2018-11-06 . Hämtad 6 februari 2017 . Utfasad parameter används |deadlink=( hjälp )
  20. PostgreSQL: PostgreSQL 9.2 släppt . www.postgresql.org (10 september 2012). Hämtad 5 april 2022. Arkiverad från originalet 21 september 2020.
  21. Återintroducerar Hstore för PostgreSQL . InfoQ . Hämtad 5 april 2022. Arkiverad från originalet 16 juni 2021.
  22. Richard, Chirgwin (7 januari 2016). "Säg oj, UPSERT ditt huvud: PostgreSQL version 9.5 har landat" . Registret . Arkiverad från originalet 2020-05-24 . Hämtad 17 oktober 2016 . Utfasad parameter används |deadlink=( hjälp )
  23. PostgreSQL: Dokumentation: 10: Kapitel 31. Logisk replikering . www.postgresql.org (12 augusti 2021). Hämtad 5 april 2022. Arkiverad från originalet 5 april 2022.
  24. PostgreSQL 11 släpptes (18 oktober 2018). Hämtad 18 oktober 2018. Arkiverad från originalet 14 september 2020.
  25. PostgreSQL Release Notes . Hämtad 18 oktober 2018. Arkiverad från originalet 26 oktober 2018.
  26. PostgreSQL: PostgreSQL 12 släppt!  (3 oktober 2019). Arkiverad från originalet den 24 september 2020. Hämtad 5 april 2022.
  27. PostgreSQL 13 Release Notes . www.postgresql.org (12 augusti 2021). Hämtad 5 april 2022. Arkiverad från originalet 5 april 2022.
  28. PostgreSQL 13 släppt! . www.postgresql.org (24 september 2020). Hämtad 5 april 2022. Arkiverad från originalet 31 mars 2022.
  29. PostgreSQL 14 Release Notes . www.postgresql.org (11 november 2021). Hämtad 5 april 2022. Arkiverad från originalet 25 mars 2022.
  30. PostgreSQL 14 släppt! . www.postgresql.org (30 september 2021). Hämtad 5 april 2022. Arkiverad från originalet 31 mars 2022.
  31. PostgreSQL uppnår täckningskvalitetscertifiering  (engelska)  (länk ej tillgänglig) . PostgreSQL Global Development Group (24 juli 2005). — Nyheter om resultatet av kvalitetscertifiering. Hämtad 8 september 2009. Arkiverad från originalet 24 augusti 2011.
  32. PostgreSQL-härledda databaser . PostgreSQL Wiki. Hämtad 30 juli 2018. Arkiverad från originalet 30 juli 2018.
  33. Metod för att migrera databaser från Oracle till EnterpriseDB (nedlänk) . Solomatin Bureau (13 december 2010). — Metod för databasmigrering från Oracle till EnterpriseDB. Hämtad 13 december 2010. Arkiverad från originalet 24 augusti 2011.    (nedlänk sedan 2017-03-07 [2063 dagar])
  34. 2ndQPostgres . Datum för åtkomst: 8 november 2019. Arkiverad från originalet den 8 november 2019.
  35. Fujitsu Enterprise Postgres . Datum för åtkomst: 8 november 2019. Arkiverad från originalet den 8 november 2019.
  36. PostgreSQL . Hämtad 8 november 2019. Arkiverad från originalet 6 september 2019.
  37. Konstantin Skurat (2021-11-15). "SUBDsidia i tillväxt" . Comnews . Arkiverad från originalet 2022-01-30 . Hämtad 2022-01-30 . Föråldrad parameter använd |deadlink=( hjälp );Kontrollera datumet på |date=( hjälp på engelska )
  38. Alexander Malyarevsky (27 juli 2021). "Virtualisering: trender inom en trend på den ryska marknaden" . CRN . Arkiverad från originalet 2022-01-30 . Hämtad 2022-01-30 . Föråldrad parameter använd |deadlink=( hjälp );Kontrollera datumet på |date=( hjälp på engelska )
  39. Denis Voeikov (10 december 2020). "Rosatom förändrar massivt Oracle och Microsoft DBMS till det ryska Postgres Pro" . Nyheter . Arkiverad från originalet 2022-01-30 . Hämtad 2022-01-30 . Utfasad parameter används |deadlink=( hjälp )
  40. Denis Voeikov (4 januari 2021). "Goznak byter till det ryska DBMS Postgres Pro" . Nyheter . Arkiverad från originalet 2022-01-30 . Hämtad 2022-01-30 . Föråldrad parameter använd |deadlink=( hjälp );Kontrollera datumet på |date=( hjälp på engelska )
  41. Vladislav Meshcheryakov (28 januari 2015). "NVisions grundare investerade i det ryska utvecklingsteamet PostgreSQL" . Nyheter . Arkiverad från originalet 2022-01-30 . Hämtad 2022-01-30 . Utfasad parameter används |deadlink=( hjälp )

Länkar