PostgreSQL | |
---|---|
Type | relationel DBMS , gratis og open source software og SQL server [d] |
Forfatter | Michael Stonebreaker [1] |
Udvikler | PostgreSQL-fællesskab |
Skrevet i | C [3] [4] |
Operativ system | FreeBSD [5] , OpenBSD [5] , Linux [5] , macOS [5] , Solaris [5] , Microsoft Windows [5] og Unix-lignende operativsystemer |
Første udgave | 1996 |
nyeste version |
|
Licens | PostgreSQL-licens ( gratis og open source ) |
Internet side | postgresql.org _ |
Mediefiler på Wikimedia Commons |
PostgreSQL (udtales "Post-Gres-Q-El" [6] ) er et gratis objektrelationelt databasestyringssystem (DBMS).
Eksisterer i implementeringer til en række UNIX-lignende platforme, inklusive AIX , forskellige BSD-systemer , HP-UX , IRIX , Linux , macOS , Solaris / OpenSolaris , Tru64 , QNX og til Microsoft Windows .
PostgreSQL er baseret på SQL -sproget og understøtter mange af funktionerne i SQL:2011 [7] [8] standarden .
PostgreSQL version 12 har følgende begrænsninger [9] :
Maksimal databasestørrelse | Ingen begrænsninger |
Maksimal bordstørrelse | 32 TB |
Maksimal feltstørrelse | 1 GB |
Maksimalt antal poster pr. tabel | Begrænset af bordstørrelse |
Maksimalt antal felter i en post | 250-1600,- afhængig af marktyper |
Maksimale indekser pr. tabel | Ingen begrænsninger |
Styrken ved PostgreSQL er:
PostgreSQL er baseret på den ikke-kommercielle Postgres-database udviklet som et open source- projekt ved University of California, Berkeley . Udviklingen af Postgres, som begyndte i 1986, var direkte relateret til Michael Stonebreaker , leder af det tidligere projekt Ingres , på det tidspunkt allerede erhvervet af Computer Associates . Navnet stod for " Post Ingres " , og mange tidlige udviklinger blev anvendt i skabelsen af Postgres.
Stonebreaker og hans elever udviklede det nye DBMS i otte år fra 1986 til 1994. I denne periode blev procedurer, regler, brugerdefinerede typer og andre komponenter introduceret i syntaksen. I 1995 splittes udviklingen igen: Stonebreaker brugte sin erfaring til at opbygge den kommercielle database Illustra , promoveret af hans eget firma af samme navn (senere erhvervet af Informix ), og hans elever udviklede en ny version af Postgres, Postgres95, hvor POSTQUEL query language , en arv fra Ingres, blev erstattet til SQL.
Postgres95 udvikling blev taget uden for universitetet og overdraget til et hold af entusiaster. Det nye DBMS fik det navn, som det er kendt under og er i øjeblikket under udvikling - PostgreSQL.
VersionshistorikVersion | Første udgivelsesdato | Sidste mindre version | Sidste udgivelsesdato | Slut på support [11] | Implementerede funktioner |
---|---|---|---|---|---|
6,0 | 1997-01-29 | n/a | n/a | n/a | Formelt den første udgivelse af PostgreSQL. Unikke indekser, pg_dumpall-værktøj, ident -godkendelse . |
6.1 | 1997-06-08 | 6.1.1 | 1997-07-22 | n/a | Multi-kolonne indekser, sekvenser, penge datatype, GEQO (GENetic Query Optimizer). |
6.2 | 1997-10-02 | 6.2.1 | 1997-10-17 | n/a | JDBC -grænseflade , triggere , serverprogrammeringsgrænseflade, begrænsninger . |
6.3 | 1998-03-01 | 6.3.2 | 1998-04-07 | 2003-03-01 | Undervælg support fra SQL-92 , PL/pgTCL. |
6.4 | 1998-10-30 | 6.4.2 | 1998-12-20 | 2003-10-30 | Understøttelse af VIEW (kun i skrivebeskyttet tilstand) og regler, PL/pgSQL . |
6.5 | 1999-06-09 | 6.5.3 | 1999-10-13 | 2004-06-09 | MVCC , midlertidige tabeller, understøttelse af nye SQL-sætninger (CASE, INTERSECT og EXCEPT). |
7,0 | 2000-05-08 | 7.0.3 | 2000-11-11 | 2004-05-08 | Ekstern inkluderer SQL-92-syntaks for joins (JOIN). |
7.1 | 2001-04-13 | 7.1.3 | 2001-08-15 | 2006-04-13 | Proaktiv logning , YDRE JOIN. |
7.2 | 2002-02-04 | 7.2.8 | 2005-05-09 | 2007-02-04 | PL/Python, OID -feltet bliver valgfrit i tabeller, meddelelsesinternationalisering og lokalisering . |
7.3 | 2002-11-27 | 7.3.21 | 2008-01-07 | 2007-11-27 | skemaer , tabelfunktioner, forberedte forespørgsler [12] . |
7.4 | 2003-11-17 | 7.4.30 | 2010-10-04 | 2010-10-01 | Optimering i JOINs og datavarehusfunktioner [13] . |
8,0 | 2005-01-19 | 8.0.26 | 2010-10-04 | 2010-10-01 | Version til Microsoft Windows , savepoints i transaktioner , tablespaces , point-in-time recovery [14] . |
8.1 | 2005-11-08 | 8.1.23 | 2010-12-16 | 2010-11-08 | Ydeevneoptimeringer, to-faset commit, tabelopdeling , indeks bitmap scanning i SQL planner, delt række-niveau låsning, roller. |
8.2 | 2006-12-05 | 8.2.23 | 2011-12-05 | 2011-12-05 | Ydeevneoptimering, non-stop indeksopbygning, rådgivende låse, "varm standby"-tilstand ved gendannelse af databasen fra WAL-poster [15] . |
8.3 | 2008-02-04 | 8.3.23 | 2013-02-07 | 2013-02-07 | Heap-only tuples-mekanisme, fuldtekstsøgning , [16] SQL/XML , ENUM-typer, UUID -typer . |
8.4 | 2009-07-01 | 8.4.22 | 2014-07-24 | 2014-07-24 | Vinduesfunktioner, tilladelser på niveau med felter (kolonner) i tabellen, parallel databasegendannelse, sorteringsregler på databaseniveau, almindelige tabelforespørgsler og rekursive forespørgsler [17] . |
9,0 | 2010-09-20 | 9.0.23 | 2015-10-08 | 2015-10-08 | Indbygget streaming binær replikering , hot standby -tilstand , opgradering uden at stoppe serveren, understøttelse af 64-bit versioner af Windows [18] . |
9.1 | 2011-09-12 | 9.1.24 | 2016-10-27 | 2016-10-27 | Synkron replikering, sortering pr. kolonne, ikke-loggede tabeller, "serialiserbar snapshot-isolation" transaktionsisoleringsniveau, skrivbarhed i almindelige SQL-tabelforespørgsler, SELinux -integration , udvidelser, eksterne tabeller [19] . |
9.2 | 2012-09-10 [20] | 9.2.24 | 2017-11-09 | 2017-11-09 | Cascading streaming-replikering, kun indeksscanninger, direkte JSON -understøttelse , forbedret låsestyring, rækketyper, pg_receivexlog-værktøj, space-partitionerede GiST -indekser . |
9.3 | 2013-09-09 | 9.3.25 | 2018-11-08 | 2018-11-08 | Konfigurerbare baggrundsarbejdsgange, sidekontrolsummer til at detektere beskadigede data, JSON-sætninger, LATERAL JOIN, pg_dump speedup, nyt pg_isready-serverovervågningsværktøj, forbedrede trigger- og basisvisningsmuligheder, skrivbare eksterne tabeller, materialiserede visninger , replikeringsforbedringer. |
9.4 | 2014-12-18 | 9.4.26 | 2020-02-13 | 2020-02-13 | JSONB -datatype , ALTER SYSTEM-sætning til ændring af værdier i systemkonfiguration, mulighed for at opdatere materialiserede visninger uden læseblokering, dynamisk registrering/start/stop af baggrundsarbejdsprocesser, logisk afkodnings-API til databaseforbindelse, forbedrede GIN- indekser , understøttelse af enorme sider til Linux, genindlæsning af databasecachen ved hjælp af pg_prewarm, en ny accelereret version af Hstore placeret som den foretrukne måde at lagre kolonnedata på [21] . |
9.5 | 2016-01-07 | 9.5.25 | 2021-02-11 | 2021-02-11 | UPSERT, rækkebeskyttelsespolitikker, TABLESAMPLE, CUBE/ROLLUP, GRUPPERINGSSÆT og den nye indekstype BRIN [22] . |
9.6 | 2016-09-29 | 9.6.24 | 2021-11-11 | 2021-11-11 | Understøttelse af parallelle forespørgsler, PostgreSQL-forbedringer til håndtering af udenlandsk data (FDW) - tilføjet pushdown-mulighed for sortering/join, flere synkrone hot-standby-servere, hurtigere vakuumdrift på store borde. |
ti | 2017-10-05 | 10.20 | 2022-02-10 | 2022-11-10 | Logisk replikering, [23] deklarativ tabelopdeling, forbedret parallel eksekvering i forespørgsler. |
elleve | 2018-10-18 | 11.15 | 2022-02-10 | 2023-11-09 | Forbedret partitioneringsstabilitet og ydeevne, understøttelse af transaktioner i lagrede procedurer, forbedret parallel eksekvering i forespørgsler, just-in-time (JIT) udtrykskompilering [24] [25] . |
12 | 2019-10-03 | 12.10 | 2022-02-10 | 2024-11-14 | Fremskynde forespørgsler og mere økonomisk brug af diskplads; understøttelse af SQL/JSON-stisprogudtryk; genererede kolonner; forbedringer i internationalisering og autentificering; en ny grænseflade til oprettelse af pluggbare regnearksmotorer [26] . |
13 | 2020-09-24 | 13.6 | 2022-02-10 | 2025-11-13 | Deduplikering af noder i B-træindekser er hurtigere og kræver mindre plads, øget ydeevne af forespørgsler, der bruger aggregater eller partitionerede tabeller, forbedret forespørgselsplanlægning ved brug af udvidet statistik, parallel støvsugning af indekser, trinvis sortering [27] [28] . |
fjorten | 30-09-2021 | 14.2 | 2022-02-10 | 2026-11-12 | De SQL-definerede SEARCH- og CYCLE-indstillinger er tilladt i generelle tabelforespørgsler , og det er tilladt at tilføje DISTINCT til GROUP BY [29] [30] . |
Funktioner er kodeblokke, der kører på serveren, ikke på databaseklienten. Selvom de kan skrives i ren SQL, er implementeringen af yderligere logik, såsom conditionals og loops , uden for SQL-området og kræver brug af nogle sprogudvidelser. Funktioner kan skrives på et af følgende sprog:
PostgreSQL tillader brugen af funktioner, der returnerer et sæt poster, som derefter kan bruges på samme måde som resultatet af en normal forespørgsel.
Funktioner kan udføres både med deres skabers rettigheder og med den aktuelle brugers rettigheder.
Nogle gange identificeres funktioner med lagrede procedurer , men der er forskel på disse begreber. Siden den niende version er det muligt at skrive autonome blokke, der giver dig mulighed for at udføre kode på proceduresprog uden skrivefunktioner, direkte i klienten.
Triggere er defineret som funktioner, der initieres af DML- operationer. For eksempel kan en INSERT - operation udløse en trigger, der kontrollerer den tilføjede post mod visse betingelser. Når du skriver funktioner til triggere, kan forskellige programmeringssprog bruges (se ovenfor).
Udløsere er knyttet til tabeller. Flere triggere udføres i alfabetisk rækkefølge.
Regelmotoren ( eng. rules ) er en mekanisme til at skabe brugerdefinerede handlere, ikke kun til DML- operationer, men også til udvælgelsesoperationer. Den væsentligste forskel fra triggermekanismen er, at reglerne udløses på anmodnings-parsingsstadiet, før valget af den optimale eksekveringsplan og selve eksekveringsprocessen. Regler giver dig mulighed for at tilsidesætte systemets adfærd, når du udfører en SQL-handling på en tabel. Et godt eksempel er implementeringen af visningsmekanismen ( eng. views ): når en visning oprettes, oprettes en regel, der specificerer, at systemet i stedet for at udføre en hente-operation på visningen, skal udføre en hente-handling på den underliggende tabel / tabeller, under hensyntagen til de hentebetingelser, der ligger til grund for visningsdefinitionen. For at oprette visninger, der understøtter opdateringshandlinger, skal reglerne for indsættelse, opdatering og sletning af rækker defineres af brugeren.
PostgreSQL understøtter følgende indekstyper : B-tree , hash , GiST , GIN , BRIN , Bloom . Du kan oprette nye indekstyper efter behov. Indekser i PostgreSQL har følgende egenskaber:
PostgreSQL understøtter samtidig ændring af databasen af flere brugere ved hjælp af Multiversion Concurrency Control ( MVCC ) mekanismen. Dette opfylder ACID- kravene og eliminerer stort set behovet for læselåse.
PostgreSQL understøtter et stort sæt indbyggede datatyper:
Desuden kan brugeren selvstændigt oprette nye typer, han har brug for, og programmere indekseringsmekanismer for dem ved hjælp af GiST .
PostgreSQL kan udvides af brugeren til deres egne behov i næsten ethvert aspekt. Det er muligt at tilføje din egen:
Tabeller kan arve karakteristika og feltsæt fra andre (overordnede) tabeller. I dette tilfælde vil de data, der tilføjes til den genererede tabel, automatisk deltage (medmindre det er specificeret separat) i forespørgsler til den overordnede tabel.
PostgreSQL 10 tilføjede en tabelopdelingsmekanisme . Partitionering er designet til at opdele en tabel i flere, de såkaldte partitioner. Partitionering ligner arv, men har en mere brugervenlig syntaks og stærkere begrænsninger, som giver mulighed for yderligere optimeringer i forespørgselsplanlægning.
Ifølge resultaterne af en automatiseret analyse af forskellige software for fejl, udført i 2005, blev der fundet 20 problemområder i PostgreSQL-kildekoden pr. 775.000 linjer kildekode (i gennemsnit en fejl pr. 39.000 linjer kode) [31] . Til sammenligning: MySQL - 97 problemer, én fejl pr. 8.000 linjer kode; FreeBSD (hele) - 306 problemer, en fejl pr. 2.500 linjer kode; Linux (kun kerne) - 950 problemer, en fejl pr. 800 linjer kode.
PostgreSQL-licensen giver dig mulighed for at oprette forskellige, inklusive kommercielle, gafler baseret på den . Der er flere dusin kendte [32] .
Baseret på PostgreSQL har EnterpriseDB udviklet andre varianter af dette DBMS, der betales for kommerciel brug - Postgres Plus (består udelukkende af open source-produkter; betaling er kun påkrævet, hvis du skal købe kommerciel support til produktet) og Postgres Plus Advanced Server ( PostgreSQL-udvidelse med specielle muligheder for at sikre kompatibilitet med Oracle-databasen ) [33] . Leveringssættet af disse produkter indeholder et sæt software til udviklere og databaseadministratorer:
Der er andre kommercielle produkter baseret på PostgreSQL og supplerer det med forskellige funktioner:
Udviklerfirmaet blev grundlagt i 2015 af russiske 3 førende udviklere ( Stor bidragyder ) PostgreSQL DBMS - Oleg Bartunov , Fedor Sigaev , Alexander Korotkov, udvikler Ivan Panchenko og NVision Group medstifter Anton Sushkevich, som blev projektinvestor [41] .
Databasestyringssystemer (DBMS) | |
---|---|
Klient-server | |
Motorer | |
Filserver |
Database | |
---|---|
Begreber |
|
Objekter | |
Nøgler | |
SQL | |
Komponenter |