Utgivningen av databashanteraren PostgreSQL 18

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

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster