Udgivelsen af databasen PostgreSQL 18.

Efter et års udvikling er den nye stabile version af databasesystemet PostgreSQL 18 blevet udgivet. Opdateringer til den nye version vil blive udgivet i fem år frem til november 2030. Støtten til PostgreSQL 13.x, den ældste af de understøttede versioner, vil blive afsluttet den 13. november.

Hovednyhederne:

  • Der er tilføjet et subsystem til asynkron ind- og uddata, som øger båndbredden for ind- og uddata og eliminerer forsinkelser. Udover den universelle AIO-implementering (io_method=worker), der er tilgængelig på alle platforme og baseret på flere behandlingsprocesser (som standard 3), kan der i Linux anvendes grænsefladen til asynkron ind- og uddata io_uring (io_method=io_uring), som understøttes fra Linux-kernen 5.1. Asynkron ind- og uddata anvendes i øjeblikket kun til at accelerationere visse operationer relateret til læsning af data fra filsystemet, såsom sekventiel iterering, scanning af indeksbitmap og udførelse af oprydning (vacuum). I nogle tests fører brugen af AIO til en stigning i ydeevnen på 2-3 gange. Skriveoperationer fortsætter med at blive udført synkront for at opfylde kravene til ACID.
  • Optimeringen "skip scan" er implementeret i flersøjlede indekser, hvilket gør det muligt at bruge indekset ikke kun til at kontrollere den første indekserede søjle og den komplette binding af søjler, men også til at behandle de andre indekserede søjler separat. For eksempel, tidligere ville oprettelsen af et B-tree indeks over søjlerne "(status, date)" kun anvende indekset til forespørgsler, der kontrollerer feltet "status" eller begge felter "status" og "date", mens en forespørgsel, der kun kontrollerede feltet "date", ville kræve skanning af tabelindholdet. "Skip scan"-tilstanden gør det muligt at scanne indekset i visse situationer, når der kun forespørges på feltet "date". Denne tilstand anvendes kun for "B-tree" indekser i situationer, hvor det betingede operator "=" anvendes på det indekserede felt, i tilfælde hvor det udeladte felt har et lille antal forskellige værdier (for eksempel vil optimeringen fungere, hvis feltet status "status" har et par faste værdier).
  • Der er tilføjet optimeringer, der mere effektivt bruger indekser til forespørgsler, der indeholder konstruktioner som «OR» og «IN (…)» i WHERE-blokken, samt forbedringer af planlægning og udførelse af tabelsammenføjning (f.eks. er koden til hash-sammenlægning blevet accelereret, og inkrementel sortering kan nu anvendes ved tabelsammenlægning).
  • Der er tilføjet support til parallelisering af opbygningen af GIN (Generalized Inverted Index) indekser, der anvendes til indeksering af sammensatte værdier som arrays og til organisering af søgning i fuldtekstdata eller JSON-strukturer.
  • Muligheden for at skabe materialiserede visninger og nøgler til sektionering af tabeller med indekser med et tegn på «unique», der ikke anvender B-tree-strukturen, er blevet tilføjet.
  • Den samlede ydeevne for låsning af forespørgsler, der arbejder med mange tabeller, er forbedret, og der er også lavet forbedringer i håndteringen af forespørgsler til sektionerede tabeller, hvilket accelererer filtreringen af ubrugte sektioner og sammenføjninger (JOIN).
  • Tekstoperationer, såsom funktioner til at konvertere til store/små bogstaver, er blevet accelereret. Der er tilføjet en PG_UNICODE_FAST-tilstand for at fremskynde håndteringen af Unicode-tegns lokalitetsegenskaber.
  • Muligheden for at gemme statistik for forespørgselsplanlæggeren efter opdatering mellem store versioner af PostgreSQL er blevet implementeret. Ændringen forhindrer udførelse af den ressourcekrævende operation «ANALYZE» efter lancering af en ny version, indtil denne er afsluttet, hvilket førte til en nedsat databasedrift.
  • Ydeevnen for pg_upgrade-værktøjet, der bruges til at automatisere overgangen til en ny væsentlig PostgreSQL-udgave, er blevet forbedret. Optimeringerne er særligt mærkbare ved opdatering af databaser, der indeholder mange objekter som tabeller og sekvenser. For at fremskynde pg_upgrade er der også tilføjet fladen «—jobs N» til parallelisering af kontroller i N tråde og fladen «—swap» til at erstatte datakataloger fuldstændigt uden at sætte referencer, uden kloning og uden filkopiering.
  • Der er tilføjet støtte til virtuelle genererede kolonner, hvis værdier beregnes i realtid under udførelsen af forespørgsler uden at blive gemt på disk. Hvis der i udtrykket "CREATE TABLE..." for genererede kolonner kun angives nøgleordet "GENERATED" uden at specificere typen (STORED eller VIRTUAL), anvendes den nye version som standard i stedet for den gamle implementering. I den gamle implementering blev værdierne genereret under udførelsen af "INSERT" eller "UPDATE" operationer og gemt på disk til senere brug. Ulempen ved virtuelle genererede kolonner er, at de ikke kan bruges i indekser, mens fordelen er muligheden for at normalisere og ændre data i realtid (relevant ved arbejde med JSON data). Hvad angår klassiske gemte genererede kolonner, er der i den nye version tilføjet support til logisk replikation.
  • I INSERT, UPDATE, DELETE og MERGE kommandoer er muligheden for at returnere tidligere (OLD) og nuværende (CURRENT) værdier i RETURNING udtrykket implementeret. For eksempel, "UPDATE... RETURNING WITH (OLD AS o, NEW AS n) o.*, n.*.".
  • Funktionen uuidv7() er tilføjet for at generere tilfældige unikke identifikatorer i UUIDv7 format. I modsætning til den gamle funktion til generering af UUID (gen_random_uuid), som nu også er tilgængelig under navnet uuidv4(), inkluderer UUIDv7 udover den tilfældige værdi også tidsstemplet for genereringen. Tilstedeværelsen af ordnede dele i UUID værdien (de første 12 tegn er epokes tidsstempel, og de efterfølgende 18 er den tilfældige værdi) forbedrer effektiviteten af sortering og indeksering, hvilket er relevant da UUID typisk bruges til primære nøgler (for eksempel placeres nøgler oprettet på næsten samme tid nær hinanden i indekset).
  • I "LIKE" operationen er der implementeret støtte til tekstmatch, hvor der anvendes ikke-deterministiske lokalspecifikke egenskaber "collation", som muliggør match med henblik på betydningen af tegn (for eksempel kan aksentueringsmærker ignoreres under sammenligningen). Funktionen CASEFOLD er tilføjet for at ændre tegns registrering under hensyntagen til egenskaberne i "collation" (for eksempel har visse tegn mere end to små bogstavsversioner eller kræver, at de under sammenligningen konverteres til store bogstaver i stedet for små).
  • Mulighed for at bruge tidsbegrænsninger (temporal constraint) er tilføjet. For værdierne «PRIMARY KEY» og «UNIQUE» skal udtrykket «WITHOUT OVERLAPS» bruges til at tilføje tidsbegrænsninger, mens udtrykket PERIOD skal bruges for værdien «FOREIGN KEY». For eksempel kan primære nøgler begrænses til nøgler med overlapende tidsintervaller.
  • Der er tilføjet kommandoen «CREATE FOREIGN TABLE … LIKE command» for at oprette en skema for en ekstern tabel baseret på definitionen af en lokal tabel.
  • Support til at oprette forbindelse til databaser ved hjælp af OAUTH 2.0-godkendelse med adgangstoken i stedet for adgangskode er blevet tilføjet. Anvendelse af OAUTH muliggør ikke at gemme adgangskoder i databasen, men identificerer brugere gennem eksterne tjenester, samt udnytte funktioner som to-faktorautentifikation og single sign-on (SSO).
  • Funktionen ssl_tls13_ciphers() er blevet tilføjet, som gør det muligt at bestemme listen over godkendte krypteringsalgoritmer ved tilslutning ved hjælp af protokollen TLSv1.3.
  • Understøttelse af godkendelse med brug af md5-algoritmen til hashing af adgangskoder er blevet klassificeret som forældet og planlagt til fjernelse. I stedet anbefales det at bruge SCRAM-algoritmen (SCRAM-SHA-256), som blev introduceret i PostgreSQL 10. Der skal desuden bemærkes implementeringen af SCRAM-godkendelse ved tilslutning via postgres_fdw og dblink til eksterne PostgreSQL-servere.
  • Ved udførelse af operationen «EXPLAIN ANALYZE» er der sikret output af oplysninger om antallet af søgeoperationer i indeksene under indeksscanning og antallet af kald til buffere ved udførelsen af forespørgslen. Statistik om CPU, WAL-loggen og intensiteten af læseoperationer er inkluderet i outputtet «EXPLAIN ANALYZE VERBOSE». Tabel pg_stat_all_tables har fået tilføjet oplysninger om den tid, der er brugt på VACUUM-operationer og tabelanalyse. Statistik om intensiteten af input/udgang og belastningen på WAL-loggen pr. forbindelse er blevet præsenteret. Informationen om diagnosticering af konflikter under skriveoperationer under logisk replikation er blevet tilføjet til pg_stat_subscription_stats og loggene.
  • I nye installationer er brugen af kontrolsummmer til integritetskontrol af gemte data som standard aktiveret. For at annullere denne adfærd ved opstart af initdb skal indstillingen «—no-data-checksums» angives.
  • Flaget «—all» er tilføjet til værktøjet pg_createsubscriber for at oprette logiske repliker med ét kommando for alle databaser.
  • En ny version (3.2) af protokollen, der anvendes til kommunikation mellem eksterne værktøjer og DBMS, er implementeret i biblioteket libpq. Den forrige opdatering af protokollen blev udført i PostgreSQL 7.4 (2003). I biblioteket libpq anvendes version 3.0 som standard.

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster