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 .
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:
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.
VersionshistorikVersion | 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 | 6.1.1 | 1997-07-22 | n/a | Flerkolumnsindex, sekvenser, pengadatatyp, GEQO (GENetic Query Optimizer). |
6.2 | 1997-10-02 | 6.2.1 | 1997-10-17 | n/a | JDBC -gränssnitt , triggers , serverprogrammeringsgränssnitt, restriktioner . |
6.3 | 1998-03-01 | 6.3.2 | 1998-04-07 | 2003-03-01 | Undervälj support från SQL-92 , PL/pgTCL. |
6.4 | 1998-10-30 | 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 | 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 | 7.0.3 | 2000-11-11 | 2004-05-08 | Externt inkluderar, SQL-92-syntax för joins (JOIN). |
7.1 | 2001-04-13 | 7.1.3 | 2001-08-15 | 2006-04-13 | Proaktiv loggning , YTTRE JOIN. |
7.2 | 2002-02-04 | 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 | 7.3.21 | 2008-01-07 | 2007-11-27 | scheman , tabellfunktioner, förberedda frågor [12] . |
7.4 | 2003-11-17 | 7.4.30 | 2010-10-04 | 2010-10-01 | Optimering av JOINs och datalagerfunktioner [13] . |
8,0 | 2005-01-19 | 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 | 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 | 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 | 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 | 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 | 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 | 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] | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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] . |
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.
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.
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.
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:
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.
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 .
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:
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.
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.
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:
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] .
Databashanteringssystem (DBMS) | |
---|---|
Klient-server | |
Motorer | |
Fil server |
Databas | |
---|---|
Begrepp |
|
Objekt | |
Nycklar | |
SQL |
|
Komponenter |