PostgreSQL

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 .

Standardstøtte, funktioner, funktioner

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:

Historie

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.

Versionshistorik
Version 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 Gammel version, ikke understøttet:6.1.1 1997-07-22 n/a Multi-kolonne indekser, sekvenser, penge datatype, GEQO (GENetic Query Optimizer).
6.2 1997-10-02 Gammel version, ikke understøttet:6.2.1 1997-10-17 n/a JDBC -grænseflade , triggere , serverprogrammeringsgrænseflade, begrænsninger .
6.3 1998-03-01 Gammel version, ikke understøttet:6.3.2 1998-04-07 2003-03-01 Undervælg support fra SQL-92 , PL/pgTCL.
6.4 1998-10-30 Gammel version, ikke understøttet: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 Gammel version, ikke understøttet: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 Gammel version, ikke understøttet:7.0.3 2000-11-11 2004-05-08 Ekstern inkluderer SQL-92-syntaks for joins (JOIN).
7.1 2001-04-13 Gammel version, ikke understøttet:7.1.3 2001-08-15 2006-04-13 Proaktiv logning , YDRE JOIN.
7.2 2002-02-04 Gammel version, ikke understøttet: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 Gammel version, ikke understøttet:7.3.21 2008-01-07 2007-11-27 skemaer , tabelfunktioner, forberedte forespørgsler [12] .
7.4 2003-11-17 Gammel version, ikke understøttet:7.4.30 2010-10-04 2010-10-01 Optimering i JOINs og datavarehusfunktioner [13] .
8,0 2005-01-19 Gammel version, ikke understøttet: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 Gammel version, ikke understøttet: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 Gammel version, ikke understøttet: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 Gammel version, ikke understøttet: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 Gammel version, ikke understøttet: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 Gammel version, ikke understøttet: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 Gammel version, ikke understøttet: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] Gammel version, ikke understøttet: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 Gammel version, ikke understøttet: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 Gammel version, ikke understøttet: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 Gammel version, ikke understøttet: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 Gammel version, ikke understøttet: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 Gammel understøttet version:10.20 2022-02-10 2022-11-10 Logisk replikering, [23] deklarativ tabelopdeling, forbedret parallel eksekvering i forespørgsler.
elleve 2018-10-18 Gammel understøttet version: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 Gammel understøttet version: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 Gammel understøttet version: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 Nuværende version: 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] .

Nøglefunktioner

Funktioner

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.

Udløsere

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.

Regler og repræsentationer

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.

Indeks

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:

Multiversionering ( MVCC )

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.

Datatyper

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 .

Brugerdefinerede objekter

PostgreSQL kan udvides af brugeren til deres egne behov i næsten ethvert aspekt. Det er muligt at tilføje din egen:

Nedarvning og partitionering

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.

Andre funktioner

Kildekodekvalitet

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.

Derivater

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:

PostgreSQL

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] .

Noter

  1. https://www.postgresql.org/docs/current/history.html
  2. PostgreSQL 15 frigivet
  3. https://github.com/postgres/postgres
  4. Postgres Open Source Project på Open Hub: Languages-side - 2006.
  5. 1 2 3 4 5 6 https://www.postgresql.org/download/
  6. Ifølge FAQ Arkiveret 15. oktober 2011 på Wayback Machine , samt ifølge lydoptagelsen Arkiveret 17. september 2009 på Wayback Machine af referenceudtalen, er der en udtale "Postgre-S-Q-El" , som er ikke helt i overensstemmelse med navnets historie (der er ikke noget separat ord "Postgre", og partiklen "-gres" findes i navnene på mange relationelle DBMS).
  7. "Appendix D. SQL Conformance" Arkiveret 23. marts 2014 på Wayback Machine . PostgreSQL 9-dokumentation Arkiveret 8. juli 2014 på Wayback Machine . PostgreSQL Global Development Group. 2009 [1996]. Hentet 2013-04-01.
  8. "SQL Conformance" Arkiveret 21. juli 2014 på Wayback Machine . postgresql.org. 2013-04-04. Hentet 2013-08-28.
  9. PostgreSQL-grænser . www.postgresql.org. Hentet 15. august 2016. Arkiveret fra originalen 12. november 2019.
  10. PostgreSQL: Dokumentation: 11: Procedurelle sprog . www.postgresql.org. Hentet 2. marts 2019. Arkiveret fra originalen 3. marts 2019.
  11. Versioneringspolitik . PostgreSQL Global Development Group. Hentet 4. oktober 2018. Arkiveret fra originalen 4. april 2022.
  12. Vaas, Lisa (2. december 2002). "Databaser målrettede virksomheder" . eUge . Hentet 29. oktober 2016 .
  13. Krill, Paul (20. november 2003). PostgreSQL booster open source-databasen . infoverden . Arkiveret fra originalen 2018-11-06 . Hentet 21. oktober 2016 . Forældet parameter brugt |deadlink=( hjælp )
  14. Krill, Paul (19. januar 2005). "PostgreSQL open source-database kan prale af Windows-boost" . infoverden . Arkiveret fra originalen 2018-11-06 . Hentet 2. november 2016 . Forældet parameter brugt |deadlink=( hjælp )
  15. Weiss, Todd R. (5. december 2006). "Version 8.2 af open source PostgreSQL DB frigivet" . computerverden . Hentet 17. oktober 2016 .
  16. Gilbertson, Scott (5. februar 2008). "PostgreSQL 8.3: Open Source-database lover lynende hastighed" . kablet . Arkiveret fra originalen 2017-03-16 . Hentet 17. oktober 2016 . Forældet parameter brugt |deadlink=( hjælp )
  17. Huber, Mathias (2. juli 2009). "PostgreSQL 8.4 viser sig at være rig på funktioner" . Linux Magasinet . Arkiveret fra originalen 2020-06-09 . Hentet 17. oktober 2016 . Forældet parameter brugt |deadlink=( hjælp )
  18. Brockmeier, Joe Five Enterprise Features in PostgreSQL 9 . linux.com . Linux Foundation (30. september 2010). Dato for adgang: 6. februar 2017. Arkiveret fra originalen 18. februar 2021.
  19. Timothy Prickett Morgan (12. september 2011). "PostgreSQL omdrejninger til 9.1, sigter mod virksomhed" . Registeret . Arkiveret fra originalen 2018-11-06 . Hentet 6. februar 2017 . Forældet parameter brugt |deadlink=( hjælp )
  20. PostgreSQL: PostgreSQL 9.2 udgivet . www.postgresql.org (10. september 2012). Hentet 5. april 2022. Arkiveret fra originalen 21. september 2020.
  21. Genintroducerer Hstore til PostgreSQL . InfoQ . Hentet 5. april 2022. Arkiveret fra originalen 16. juni 2021.
  22. Richard, Chirgwin (7. januar 2016). "Sig ups, UPSERT dit hoved: PostgreSQL version 9.5 er landet" . Registeret . Arkiveret fra originalen 2020-05-24 . Hentet 17. oktober 2016 . Forældet parameter brugt |deadlink=( hjælp )
  23. PostgreSQL: Dokumentation: 10: Kapitel 31. Logisk replikering . www.postgresql.org (12. august 2021). Hentet 5. april 2022. Arkiveret fra originalen 5. april 2022.
  24. PostgreSQL 11 udgivet (18. oktober 2018). Hentet 18. oktober 2018. Arkiveret fra originalen 14. september 2020.
  25. PostgreSQL Release Notes . Hentet 18. oktober 2018. Arkiveret fra originalen 26. oktober 2018.
  26. PostgreSQL: PostgreSQL 12 udgivet!  (3. oktober 2019). Arkiveret fra originalen den 24. september 2020. Hentet 5. april 2022.
  27. PostgreSQL 13 Release Notes . www.postgresql.org (12. august 2021). Hentet 5. april 2022. Arkiveret fra originalen 5. april 2022.
  28. PostgreSQL 13 udgivet! . www.postgresql.org (24. september 2020). Hentet 5. april 2022. Arkiveret fra originalen 31. marts 2022.
  29. PostgreSQL 14 Release Notes . www.postgresql.org (11. november 2021). Hentet 5. april 2022. Arkiveret fra originalen 25. marts 2022.
  30. PostgreSQL 14 udgivet! . www.postgresql.org (30. september 2021). Hentet 5. april 2022. Arkiveret fra originalen 31. marts 2022.
  31. PostgreSQL opnår dækningskvalitetscertificering  (engelsk)  (link ikke tilgængeligt) . PostgreSQL Global Development Group (24. juli 2005). — Nyheder om resultaterne af kvalitetscertificering. Hentet 8. september 2009. Arkiveret fra originalen 24. august 2011.
  32. PostgreSQL-afledte databaser . PostgreSQL Wiki. Hentet 30. juli 2018. Arkiveret fra originalen 30. juli 2018.
  33. Tilgang til migrering af databaser fra Oracle til EnterpriseDB (downlink) . Solomatin Bureau (13. december 2010). — Tilgang til databasemigrering fra Oracle til EnterpriseDB. Hentet 13. december 2010. Arkiveret fra originalen 24. august 2011.    (downlink siden 07-03-2017 [2063 dage])
  34. 2ndQPostgres . Dato for adgang: 8. november 2019. Arkiveret fra originalen 8. november 2019.
  35. Fujitsu Enterprise Postgres . Dato for adgang: 8. november 2019. Arkiveret fra originalen 8. november 2019.
  36. PostgreSQL . Hentet 8. november 2019. Arkiveret fra originalen 6. september 2019.
  37. Konstantin Skurat (15/11/2021). "SUBDsidia i vækst" . Comnews . Arkiveret fra originalen 2022-01-30 . Hentet 2022-01-30 . Forældet parameter brugt |deadlink=( hjælp );Tjek datoen på |date=( hjælp på engelsk )
  38. Alexander Malyarevsky (27. juli 2021). "Virtualisering: tendenser inden for en trend på det russiske marked" . CRN . Arkiveret fra originalen 2022-01-30 . Hentet 2022-01-30 . Forældet parameter brugt |deadlink=( hjælp );Tjek datoen på |date=( hjælp på engelsk )
  39. Denis Voeikov (10. december 2020). "Rosatom ændrer massivt Oracle og Microsoft DBMS til det russiske Postgres Pro" . Nyheder . Arkiveret fra originalen 2022-01-30 . Hentet 2022-01-30 . Forældet parameter brugt |deadlink=( hjælp )
  40. Denis Voeikov (4. januar 2021). "Goznak skifter til det russiske DBMS Postgres Pro" . Nyheder . Arkiveret fra originalen 2022-01-30 . Hentet 2022-01-30 . Forældet parameter brugt |deadlink=( hjælp );Tjek datoen på |date=( hjælp på engelsk )
  41. Vladislav Meshcheryakov (28. januar 2015). "Grundlæggeren af ​​NVision investerede i det russiske PostgreSQL-udviklingsteam" . Nyheder . Arkiveret fra originalen 2022-01-30 . Hentet 2022-01-30 . Forældet parameter brugt |deadlink=( hjælp )

Links