Efter ett Ärs utveckling har den nya stabila versionen av databasprogramvaran PostgreSQL 18 slÀppts. Uppdateringar för den nya versionen kommer att slÀppas under fem Är fram till november 2030. Stödet för PostgreSQL 13.x, den Àldsta av de stödjade versionerna, kommer att upphöra den 13 november.
Huvudsakliga nyheter:
- Ett subsystem för asynkron in-/utmatning har lagts till, vilket gör det möjligt att öka genomströmningen av in-/utmatning och eliminera fördröjningar. Förutom den plattformsoberoende universella implementeringen av AIO (io_method=worker) som baseras pÄ flera processhanterare (standard Àr 3), kan Linux anvÀnda grÀnssnittet för asynkron in-/utmatning io_uring (io_method=io_uring), vilket stöds frÄn kÀrnan Linux 5.1. Asynkron in-/utmatning anvÀnds för nÀrvarande endast för att accelerera vissa operationer kopplade till att lÀsa data frÄn filsystemet, sÄsom sekventiell genomgÄng, skanning av indexbitmappar och rengöring (vacuum). I vissa tester resulterar anvÀndningen av AIO i en prestandaökning pÄ 2-3 gÄnger. Skrivaroperationer fortsÀtter att utföras synkront för att uppfylla krav pÄ ACID.
- Optimeringen "skip scan" har implementerats i flermÄlsindex, vilket gör att indexet kan anvÀndas inte bara för att kontrollera den första indexerade kolumnen och den fullstÀndiga kopplingen av kolumner, utan ocksÄ för att bearbeta de övriga indexerade kolumnerna separat. Till exempel, tidigare nÀr ett B-tree-index skapades över kolumnerna "(status, date)" anvÀndes indexet endast för frÄgor som kontrollerade fÀltet "status" eller bÄda fÀlten "status" och "date", medan en frÄga som endast kontrollerade fÀltet "date" resulterade i en skanning av tabellens innehÄll. "Skip scan"-lÀget tillÄter i vissa situationer att skanna indexet vid en frÄga som bara kontrollerar fÀltet "date". LÀge anvÀnds endast för "B-tree"-index nÀr en villkorsoperator "=" anvÀnds pÄ det indexerade fÀltet i förfrÄgningar, under förutsÀttning att det utelÀmnade fÀltet har ett litet antal olika vÀrden (till exempel kommer optimeringen att fungera om fÀltet status "status" har nÄgra fasta vÀrden).
- Optimeringar har lagts till som effektivare anvĂ€nder index för frĂ„gor som innehĂ„ller konstruktionerna "OR" och "IN (âŠ)" i "WHERE"-blocken, samt förbĂ€ttrar prestandan för planering och utförande av tabellsammanfogningar (till exempel har koden för hash-sammanfogningar pĂ„skyndats och inkrementell sortering kan nu anvĂ€ndas vid sammanfogning av tabeller).
- Stöd för parallell konstruktion av GIN-index (Generalized Inverted Index) har lagts till, vilket anvÀnds för att indexera sammansatta vÀrden, sÄsom arrayer, samt för att organisera sökningar i fulltextsdata eller JSON-strukturer.
- Möjligheten att skapa materialiserade vyer och nycklar för partitionering av tabeller med unika index har lagts till, utan att anvÀnda B-tree-strukturen.
- Den allmÀnna prestandan för lÄs har ökat för frÄgor som arbetar med mÄnga tabeller, och förbÀttringar har gjorts i behandlingen av frÄgor mot partitionerade tabeller, vilket pÄskyndar avskiljning av oanvÀnda sektioner och sammanfogningar (JOIN).
- Operationer med text, sÄsom funktioner för att Àndra till versaler/gemener, har pÄskyndats. LÀge PG_UNICODE_FAST har lagts till för att pÄskynda beaktandet av egenskaper i Unicode-tecken.
- Möjlighet att spara statistik för frÄgeplaneraren efter uppdateringar mellan stora versioner av PostgreSQL har implementerats. Denna Àndring gör det möjligt att undvika resurskrÀvande "ANALYZE"-operationer efter att en ny version har körts, vilket annars resulterar i prestandaförsÀmringar.
- Prestandan för verktyget pg_upgrade, som anvĂ€nds för att automatisera övergĂ„ngen till en ny betydande version av PostgreSQL, har förbĂ€ttrats. Optimeringarna Ă€r sĂ€rskilt mĂ€rkbara vid uppgradering av databaser med mĂ„nga objekt, sĂ„som tabeller och sekvenser. För att öka hastigheten pĂ„ pg_upgrade har ocksĂ„ flaggan "âjobs N" lagts till för att parallellisera kontroller i N trĂ„dar och flaggan "âswap" har lagts till för att byta kataloger med data helt utan att skapa lĂ€nkar, utan kloning och utan kopiering av filer.
- Stöd för virtuella genererade kolumner har lagts till, vars vÀrden berÀknas i realtid under körning av förfrÄgningar, utan att sparas pÄ disk. Om uttrycket "CREATE TABLE..." för de genererade kolumnerna endast innehÄller nyckelordet "GENERATED" utan att specificera typ (STORED eller VIRTUAL), tillÀmpas det nya alternativet som standard istÀllet för den gamla implementeringen. I den gamla implementeringen genererades vÀrdena under operationer som "INSERT" eller "UPDATE" och sparades pÄ disk för senare anvÀndning. Nackdelen med virtuella genererade kolumner Àr att de inte kan anvÀndas i index, medan fördelen Àr att man kan utföra normalisering och datamanipulation i realtid (sÀrskilt relevant vid arbete med JSON-data). NÀr det gÀller klassiska lagrade genererade kolumner, har stöd för logisk replikering implementerats i den nya versionen.
- I kommandona INSERT, UPDATE, DELETE och MERGE har möjligheten att visa tidigare (OLD) och aktuella (CURRENT) vÀrden i uttrycket RETURNING realiserats. Till exempel, "UPDATE... RETURNING WITH (OLD AS o, NEW AS n) o.*, n.*.".
- Funktionen uuidv7() har lagts till för att generera slumpmÀssiga unika identifierare i UUIDv7-format. Till skillnad frÄn den gamla funktionen för att generera UUID (gen_random_uuid), som nu ocksÄ Àr tillgÀnglig under namnet uuidv4(), inkluderas genereringstiden i UUIDv7 utöver det slumpmÀssiga vÀrdet. NÀrvaron av ordnade delar i UUID-vÀrdet (de första 12 tecknen representerar tidsstÀmplar, och de följande 18 Àr slumpmÀssiga vÀrden) ökar effektiviteten i sortering och indexering, vilket Àr relevant eftersom UUID vanligtvis anvÀnds för primÀra nycklar (till exempel placeras nycklar som skapats nÀra i tid nÀra varandra i indexet).
- I operationen "LIKE" har stöd för textmatchningar implementerats, dÀr osÀkra egenskaper för lokal "collation" anvÀnds, vilket möjliggör matchningar med hÀnsyn till symbolernas betydelse (till exempel kan betoningen ignoreras vid jÀmförelse). Funktionen CASEFOLD har lagts till för att Àndra teckenens fall med hÀnsyn till lokalens "collation"-egenskaper (till exempel har vissa tecken mer Àn tvÄ smÄ bokstÀver eller krÀver omvandling till versaler snarare Àn gemener vid jÀmförelse).
- Möjlighet att anvÀnda tidsbegrÀnsningar (temporal constraint) har lagts till. I vÀrdena "PRIMARY KEY" och "UNIQUE" bör uttrycket "WITHOUT OVERLAPS" anvÀndas för att lÀgga till tidsbegrÀnsningar, medan uttrycket PERIOD bör anvÀndas för vÀrdet "FOREIGN KEY". Till exempel kan primÀrnycklar begrÀnsas med överlappande tidsintervall.
- Kommandot "CREATE FOREIGN TABLE ⊠LIKE command" har lagts till för att skapa en extern tabell med en struktur baserat pÄ definitionen av en lokal tabell.
- Stöd för att ansluta till databashanterare med autentisering baserad pÄ OAUTH 2.0 har lagts till, med anvÀndning av Ätkomsttoken istÀllet för lösenord. AnvÀndningen av OAUTH möjliggör att inte lagra lösenord i databasen, utan att identifiera anvÀndare genom externa tjÀnster, samt att anvÀnda funktioner som tvÄfaktorsautentisering och en enda inloggning (SSO).
- Funktionen ssl_tls13_ciphers() har lagts till, genom vilken en lista över tillÄtna krypteringsalgoritmer kan definieras vid anslutning med hjÀlp av protokollet TLSv1.3.
- Stödet för autentisering med hjÀlp av algoritmen md5 för lösenordshashning har klassificerats som förÄldrat och planerat för borttagning. IstÀllet rekommenderas algoritmen SCRAM (SCRAM-SHA-256), som introducerades i PostgreSQL 10. Dessutom noteras implementeringen av stöd för autentisering baserat pÄ SCRAM vid anslutning via postgres_fdw och dblink till externa PostgreSQL-servrar.
- Vid utförande av operationen "EXPLAIN ANALYZE" ges information om antalet indexsökningar vid indexskanning och antalet accesser till buffrar vid utförandet av förfrÄgan. Statistik om CPU, WAL-loggar och intensitet av lÀsoperationer har lagts till i utskriften av "EXPLAIN ANALYZE VERBOSE". Till tabellen pg_stat_all_tables har information om tiden som lagts pÄ VACUUM-operationer och analys av tabeller lagts till. Statistik över I/O-intensitet och belastning pÄ WAL-loggar har ocksÄ lagts till för enskilda kopplingar. I pg_stat_subscription_stats och loggar har information med diagnos av konflikter vid skrivoperationer under logisk replikering lagts till.
- För nya installationer har anvĂ€ndningen av kontrollsummor för att verifiera integriteten av lagrade data aktiverats som standard. För att avbryta detta beteende vid start av initdb bör alternativet "âno-data-checksums" anges.
- I verktyget pg_createsubscriber har en flagga "âall" lagts till för att skapa logiska replikat med ett enda kommando för alla databaser.
- En ny version (3.2) av protokollet, som anvÀnds för att interagera med externa verktyg och implementerat i biblioteket libpq, har realiserats. Den senaste uppdateringen av protokollet genomfördes i PostgreSQL 7.4 (2003). I biblioteket libpq fortsÀtter version 3.0 att anvÀndas som standard.
KĂ€lla: opennet.ru
