Release van de database PostgreSQL 18

Na een jaar ontwikkeling is de nieuwe stabiele tak van de database PostgreSQL 18 gepubliceerd. Updates voor deze nieuwe tak zullen gedurende vijf jaar worden uitgebracht tot november 2030. De ondersteuning voor PostgreSQL 13.x, de oudste van de ondersteunde takken, zal op 13 november eindigen.

Belangrijkste vernieuwingen:

  • Er is een subsysteem voor asynchrone invoer/uitvoer toegevoegd, dat de doorvoer van invoer/uitvoer verhoogt en vertragingen vermindert. Behalve de universele implementatie van AIO (io_method=worker), die op alle platforms beschikbaar is en gebaseerd is op het uitvoeren van meerdere handler-processen (standaard 3), kan in Linux de interface voor asynchrone invoer/uitvoer io_uring (io_method=io_uring) worden gebruikt, die wordt ondersteund vanaf kernel 5.1. Asynchrone invoer/uitvoer wordt voorlopig alleen gebruikt om de uitvoering van bepaalde operaties die verband houden met het lezen van gegevens uit het bestandssysteem, zoals sequentieel doorlopen, het scannen van indexbitmap en het uitvoeren van onderhoud (vacuum), te versnellen. In sommige tests leidt het gebruik van AIO tot een prestatieverbetering van 2-3 keer. Schrijfbewerkingen blijven in synchrone modus uitgevoerd om te voldoen aan de vereisten van ACID.
  • Er is een optimalisatie 'skip scan' geïmplementeerd in multikolomindexen, waardoor de index niet alleen kan worden gebruikt voor het controleren van de eerste geïndexeerde kolom en de volledige koppeling van kolommen, maar ook voor het afzonderlijk verwerken van de andere geïndexeerde kolommen. Bijvoorbeeld, bij het creëren van een B-tree-index op de kolommen '(status, date)' werd de index alleen gebruikt voor query's die het veld 'status' of beide velden 'status' en 'date' controleerden, terwijl bij het controleren van alleen het veld 'date' de inhoud van de tabel moest worden doorzocht. De 'skip scan'-modus maakt het mogelijk om in bepaalde situaties de index te scannen bij het aanvragen van alleen het veld 'date'. Deze modus wordt alleen toegepast voor 'B-tree'-indexen bij gebruik in de query met de voorwaarde '=' op het geïndexeerde veld, in situaties waarin het overgeslagen veld een klein aantal verschillende waarden heeft (bijvoorbeeld, de optimalisatie werkt als het veld 'status' enkele vaste waarden heeft).
  • Er zijn optimalisaties toegevoegd die efficiënter gebruikmaken van indexen voor verzoeken die de constructies "OR" en "IN (…)" in het "WHERE"-blok bevatten, evenals verbeteringen in de prestaties van planning en uitvoering van tabeljoins (bijvoorbeeld is de hash merge-code versneld en is incrementele sortering toegestaan bij het samenvoegen van tabellen).
  • Ondersteuning voor het parallel bouwen van GIN-indexen (Generalized Inverted Index), toegepast op samengestelde waarden zoals arrays, en het organiseren van zoekopdrachten op volledige tekst of JSON-structuren is toegevoegd.
  • Het is nu mogelijk om gematerialiseerde views en sleutels voor partitie-tabelindexen met unieke aanduidingen te maken die geen B-tree-structuur gebruiken.
  • De algehele prestaties van vergrendelingen voor verzoeken die met veel tabellen werken zijn verbeterd, en er zijn verbeteringen aangebracht in de verwerking van verzoeken naar gepartitioneerde tabellen die het afschermen van ongebruikte secties en join-operaties versnellen.
  • De tekstoperaties zijn versneld, zoals functies voor het omzetten naar hoofdletters/kleine letters. De PG_UNICODE_FAST-modus is toegevoegd om de verwerking van Unicode-teken locale-eigenschappen te versnellen.
  • De mogelijkheid is geïmplementeerd om de statistieken van de query-planner na een update tussen significante releases van PostgreSQL te behouden. Deze wijziging voorkomt dat de middelen-intensieve operatie "ANALYZE" moet worden uitgevoerd na het starten van de nieuwe versie, die tot dat moment prestatieproblemen met de DBMS vertoont.
  • De prestaties van de pg_upgrade-tool, die wordt gebruikt voor de automatisering van de upgrade naar een nieuwe significante release van PostgreSQL, zijn verbeterd. De optimalisaties zijn bijzonder merkbaar bij het bijwerken van databases die een groot aantal objecten bevatten, zoals tabellen en sequenties. Om de werking van pg_upgrade te versnellen, zijn er ook een "—jobs N"-vlag toegevoegd voor het parallel uitvoeren van controles in N threads en een "—swap"-vlag voor het geheel vervangen van gegevensmappen zonder het instellen van links, zonder klonen en zonder het kopiëren van bestanden.
  • Ondersteuning voor virtuele gegenereerde kolommen is toegevoegd, waarvan de waarde on-the-fly wordt berekend tijdens de uitvoering van queries, zonder op schijf te worden opgeslagen. Als in de uitdrukking "CREATE TABLE..." voor gegenereerde kolommen alleen het sleutelwoord "GENERATED" is opgegeven zonder specificatie van het type (STORED of VIRTUAL), dan wordt de nieuwe variant standaard toegepast in plaats van de oude implementatie. In de oude implementatie werden de waarden tijdens het uitvoeren van "INSERT"- of "UPDATE"-bewerkingen gegenereerd en op schijf opgeslagen voor later gebruik. Een nadeel van virtuele gegenereerde kolommen is dat ze niet in indexen kunnen worden gebruikt, terwijl een voordeel is dat ze het mogelijk maken om normalisatie en gegevenswijzigingen on-the-fly uit te voeren (relevant bij het werken met JSON-gegevens). Wat betreft klassieke opgeslagen gegenereerde kolommen, is er in de nieuwe release ondersteuning voor logische replicatie toegevoegd.
  • In de commando's INSERT, UPDATE, DELETE en MERGE is de mogelijkheid geïmplementeerd om oude (OLD) en actuele (CURRENT) waarden weer te geven in de RETURNING-uitdrukking. Bijvoorbeeld, "UPDATE... RETURNING WITH (OLD AS o, NEW AS n) o.*, n.*.".
  • De functie uuidv7() is toegevoegd voor het genereren van willekeurige unieke identificatoren in UUIDv7-formaat. In tegenstelling tot de oude functie voor het genereren van UUID (gen_random_uuid), die nu ook beschikbaar is onder de naam uuidv4(), omvat UUIDv7 naast een willekeurige waarde ook tijd van generatie. De aanwezigheid van geordende delen in de UUID-waarde (de eerste 12 tekens zijn epochtijd en de volgende 18 een willekeurige waarde) verhoogt de efficiëntie van sorteren en indexeren, wat relevant is omdat UUID's meestal worden gebruikt voor primaire sleutels (bijvoorbeeld sleutels die in een korte tijd zijn gemaakt, worden naast elkaar in de index geplaatst).
  • In de "LIKE"-bewerking is ondersteuning toegevoegd voor tekstvergelijkingen waarin niet-deterministische eigenschappen van de locale "collation" worden gebruikt, waardoor vergelijkingen met inachtneming van de betekenis van symbolen mogelijk worden (bijvoorbeeld kan een accentteken niet in aanmerking worden genomen bij het vergelijken). De functie CASEFOLD is toegevoegd voor het wijzigen van de hoofdlettergevoeligheid van symbolen rekening houdend met de eigenschappen van de locale "collation" (bijvoorbeeld sommige symbolen hebben meer dan twee kleine lettervarianten, of bij het vergelijken is omzetting naar hoofdletters vereist, in plaats van naar kleine letters).
  • De mogelijkheid om tijdelijke beperkingen (temporal constraint) te gebruiken is toegevoegd. Bij de waarden 'PRIMARY KEY' en 'UNIQUE' dient de uitdrukking 'WITHOUT OVERLAPS' gebruikt te worden voor het toevoegen van tijdelijke beperkingen, terwijl bij de waarde 'FOREIGN KEY' de uitdrukking PERIOD moet worden gebruikt. Bijvoorbeeld, bij het definiëren van primaire sleutels kunnen sleutels met overlappende tijdsintervallen worden beperkt.
  • De opdracht 'CREATE FOREIGN TABLE … LIKE' is toegevoegd voor het creëren van een externe tabelstructuur op basis van de definitie van een lokale tabel.
  • Ondersteuning is toegevoegd voor verbinding met de database (DBMS) met gebruik van authenticatie op basis van OAUTH 2.0 met een toegangstoken in plaats van een wachtwoord. Het gebruik van OAUTH maakt het mogelijk om wachtwoorden niet in de database op te slaan, maar om gebruikers via externe services te identificeren, evenals mogelijkheden zoals twee-factor-authenticatie en single sign-on (SSO).
  • De functie ssl_tls13_ciphers() is toegevoegd, waarmee een lijst van toegestane versleutelingsalgoritmen kan worden gedefinieerd bij verbinding met gebruik van het TLSv1.3-protocol.
  • Ondersteuning voor authenticatie met gebruik van het md5-algoritme voor het hashing van wachtwoorden is overgebracht naar de verouderde status en is gepland voor verwijdering. In plaats van md5 wordt het SCRAM-algoritme (SCRAM-SHA-256), geïntroduceerd in PostgreSQL 10, aanbevolen. Daarnaast wordt ondersteuning voor SCRAM-authenticatie bij verbinding via postgres_fdw en dblink naar externe PostgreSQL-servers gerapporteerd.
  • Bij het uitvoeren van de operatie 'EXPLAIN ANALYZE' zijn gegevens over het aantal indexzoekopdrachten bij indexscans en het aantal bufferverzoeken tijdens het uitvoeren van de query toegevoegd aan de output. De output van 'EXPLAIN ANALYZE VERBOSE' bevat nu statistieken over CPU, WAL-log en de intensiteit van leesbewerkingen. In de tabel pg_stat_all_tables zijn gegevens toegevoegd over de tijd die besteed is aan de VACUUM-operatie en het analyseren van tabellen. Statistieken over in- en uitvoerintensiteit en belasting van de WAL-log per verbinding zijn beschikbaar gesteld. In pg_stat_subscription_stats en de logs is informatie over conflictdiagnose tijdens schrijfoperaties tijdens logische replicatie toegevoegd.
  • In nieuwe installaties is het gebruik van checksums voor het verifiëren van de integriteit van opgeslagen gegevens standaard ingeschakeld. Om dit gedrag bij het starten van initdb ongedaan te maken, moet de optie '--no-data-checksums' worden opgegeven.
  • In de pg_createsubscriber tool is een vlag "--all" toegevoegd om logische replica's in één keer voor alle databases te creëren.
  • Een nieuwe versie (3.2) van het protocol, dat wordt gebruikt voor de interactie tussen externe tools en de database, is geïmplementeerd in de libpq bibliotheek. De vorige update van het protocol vond plaats in PostgreSQL 7.4 (2003). In de libpq bibliotheek blijft standaard versie 3.0 in gebruik.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster