Mohamed ZagoudiAdelix Automation

Infrastructuur

PostgreSQL 18: asynchrone I/O, skip scans en uuidv7() in één release

PostgreSQL 18 brengt asynchrone I/O met io_method, skip scans op B-tree-indexen, virtuele gegenereerde kolommen, uuidv7(), OAuth-authenticatie en deprecatie van md5.

Foto bij het artikel over PostgreSQL 18

Foto: Lenharth Systems via stocksnap (Openverse) · CC0 1.0

In dit artikel
  1. Asynchrone I/O als kern van de release
  2. Query-prestaties en indexen
  3. Sneller op snelheid na een major upgrade
  4. Voor ontwikkelaars: kolommen, UUID's en RETURNING
  5. Tekst en collaties
  6. Authenticatie en beveiliging
  7. Replicatie, vacuum en observability
  8. Wire protocol 3.2
  9. Samengevat
  10. Bronnen

Op 25 september 2025 heeft de PostgreSQL Global Development Group PostgreSQL 18 uitgebracht. De aankondiging plaatst één verandering voorop: een nieuw subsysteem voor asynchrone I/O, dat in benchmarks tot 3× snellere leesprestaties heeft laten zien. Daaromheen zitten verbeteringen voor query-planning, major-versie-upgrades, ontwikkelaars (virtuele gegenereerde kolommen, uuidv7(), RETURNING met oude én nieuwe waarden) en authenticatie (OAuth 2.0, deprecatie van md5-wachtwoorden).

Dit artikel zet de release op een rij aan de hand van de officiële aankondiging, aangevuld met de releasenotes en de documentatie van versie 18 voor de exacte parameternamen en standaardwaarden.

Asynchrone I/O als kern van de release

PostgreSQL vertrouwde tot nu toe op het readahead-mechanisme van het besturingssysteem om leesverzoeken vooruit te lopen. Omdat het besturingssysteem geen zicht heeft op databasespecifieke toegangspatronen, kan het niet altijd voorspellen welke blokken nodig zijn. Het nieuwe AIO-subsysteem (asynchronous I/O) laat PostgreSQL zelf meerdere I/O-verzoeken tegelijk uitstaan hebben in plaats van op elk verzoek afzonderlijk te wachten. In PostgreSQL 18 wordt dit gebruikt voor sequentiële scans, bitmap heap scans en vacuum; benchmarks tonen volgens de aankondiging winsten tot 3× in bepaalde scenario's.

Welk mechanisme wordt ingezet, bepaalt de nieuwe instelling io_method, die alleen bij het starten van de server kan worden gezet:

INI
# postgresql.conf
io_method = worker      # standaard: asynchrone I/O via aparte I/O-workerprocessen
# io_method = io_uring  # via io_uring; vereist een build met --with-liburing / -Dliburing
# io_method = sync      # voert AIO-geschikte I/O synchroon uit (gedrag zoals voorheen)
io_workers = 3          # aantal I/O-workers, alleen relevant bij io_method = worker

Volgens de documentatie is worker de standaardwaarde en zijn er drie I/O-workers als io_workers niet wordt aangepast. De releasenotes noemen daarnaast de nieuwe parameters io_combine_limit en io_max_combine_limit (grootste gecombineerde I/O-omvang, standaard 128 kB), een hogere standaardwaarde van 16 voor effective_io_concurrency en maintenance_io_concurrency, en de nieuwe systeemview pg_aios, die de bestandshandles toont die voor asynchrone I/O in gebruik zijn.

Wat de 3× wel en niet betekent

De aankondiging spreekt van "tot 3×" bij het lezen van opslag, "in bepaalde scenario's", en wijst erop dat er met AIO meer parameters zijn om af te stemmen. Het getal is geen algemene versnelling voor elke werklast, maar de bovengrens uit benchmarks van de ondersteunde scantypen.

Query-prestaties en indexen

Naast het I/O-werk noemt de aankondiging een reeks verbeteringen aan planner en indexgebruik:

  • Skip scan op multikolom-B-tree-indexen. Queries die de =-voorwaarde op een of meer voorafgaande indexkolommen weglaten, kunnen de index nu toch gebruiken.
  • OR-voorwaarden in WHERE kunnen via een index worden afgehandeld, wat volgens de aankondiging tot aanzienlijk snellere uitvoering leidt.
  • Joins. Hash joins zijn sneller en merge joins kunnen incrementele sorteringen gebruiken.
  • Parallelle opbouw van GIN-indexen, naast B-tree- en BRIN-indexen die dit al ondersteunden.
  • Hardwareversnelling. ARM NEON- en SVE-instructies voor popcount, de basis van onder meer bit_count.

Sneller op snelheid na een major upgrade

Vóór PostgreSQL 18 gingen planner-statistieken niet mee bij een major-versie-upgrade. Op drukke systemen kon dat aanzienlijke prestatieverliezen geven totdat ANALYZE klaar was. PostgreSQL 18 bewaart de planner-statistieken door de upgrade heen, zodat een geüpgraded cluster sneller op het verwachte prestatieniveau zit.

pg_upgrade kreeg ook aandacht: snellere upgrades van databases met veel objecten zoals tabellen en sequences, parallelle controles op basis van --jobs, en de nieuwe optie --swap, die de datadirectory's verwisselt in plaats van bestanden te kopiëren, klonen of linken.

Voor ontwikkelaars: kolommen, UUID's en RETURNING

Virtuele gegenereerde kolommen. Een gegenereerde kolom kan nu virtueel zijn: de waarde wordt berekend bij het uitvragen in plaats van opgeslagen. Virtueel is in PostgreSQL 18 de standaardoptie voor gegenereerde kolommen. Opgeslagen gegenereerde kolommen kunnen nu bovendien logisch worden gerepliceerd.

RETURNING met OLD en NEW. Bij INSERT, UPDATE, DELETE en MERGE kan de RETURNING-clausule zowel de vorige als de nieuwe waarde van een rij teruggeven.

uuidv7(). De nieuwe functie genereert willekeurige UUID's die op tijdstempel geordend zijn, wat volgens de aankondiging betere indexering, leesprestaties en cachestrategieën oplevert dan volledig willekeurige UUID's. Daarnaast is uuidv4() toegevoegd als alias voor gen_random_uuid().

Temporele constraints. PRIMARY KEY- en UNIQUE-constraints ondersteunen de clausule WITHOUT OVERLAPS, en FOREIGN KEY-constraints kennen een PERIOD-clausule: constraints over bereiken, afgedwongen door de database.

Verder maakt CREATE FOREIGN TABLE ... LIKE het mogelijk een vreemde tabel te definiëren op basis van de structuur van een lokale tabel.

Tekst en collaties

De release voegt de collatie PG_UNICODE_FAST toe, met volledige Unicode-semantiek voor hoofdletterconversie en snellere vergelijkingen. Dat werkt door in upper en lower en in de nieuwe functie casefold voor hoofdletterongevoelige vergelijkingen. LIKE werkt nu ook op tekst met een niet-deterministische collatie.

Een wijziging met gevolgen voor beheer: full-text search gebruikt nu de standaard-collatieprovider van het cluster in plaats van altijd libc. De aankondiging waarschuwt dat alle full-text-search- en pg_trgm-indexen daardoor mogelijk opnieuw moeten worden opgebouwd na pg_upgrade.

Authenticatie en beveiliging

  • OAuth 2.0. Het nieuwe authenticatiemechanisme oauth laat gebruikers inloggen via OAuth 2.0-mechanismen die door PostgreSQL-extensies worden ondersteund, wat koppeling met single-sign-on-systemen vereenvoudigt.
  • md5 afgebouwd. Wachtwoordauthenticatie met md5 is verouderd (deprecated) en wordt in een toekomstige major release verwijderd. Volgens de releasenotes geven CREATE ROLE en ALTER ROLE nu een waarschuwing bij het zetten van een md5-wachtwoord; die is uit te zetten met md5_password_warnings = off. De aanbevolen vervanging is SCRAM. Het migratierecept uit de documentatie: password_encryption = 'scram-sha-256' zetten in postgresql.conf, alle gebruikers een nieuw wachtwoord laten instellen en de methode in pg_hba.conf op scram-sha-256 zetten.
  • SCRAM-passthrough wordt ondersteund voor postgres_fdw en dblink bij het authenticeren bij externe PostgreSQL-instanties.
  • TLS en FIPS. De nieuwe parameter ssl_tls13_ciphers configureert de TLS 1.3-ciphersuites aan serverzijde; de release bevat validatie voor FIPS-modus.
  • pgcrypto ondersteunt SHA-2 voor wachtwoordhashing.

Twee upgradepunten om vooraf te kennen

Ten eerste zet initdb paginachecksums nu standaard aan. pg_upgrade vereist dat oud en nieuw cluster dezelfde checksum-instelling hebben; wie een cluster zonder checksums upgradet, maakt het nieuwe cluster daarom aan met de nieuwe initdb-optie --no-data-checksums. Ten tweede geldt de md5-deprecatie: omgevingen die nog md5 in pg_hba.conf gebruiken, hebben met de waarschuwingen bij CREATE ROLE/ALTER ROLE een concrete aanleiding om naar SCRAM over te stappen.

Replicatie, vacuum en observability

Bij logische replicatie worden schrijfconflicten nu gerapporteerd in het logboek en in de view pg_stat_subscription_stats. CREATE SUBSCRIPTION gebruikt standaard parallelle streaming bij het toepassen van transacties, en pg_createsubscriber kreeg de optie --all om in één keer logische replica's van alle databases in een instantie te maken. Inactieve replicatieslots kunnen automatisch ongeldig worden gemaakt via de parameter idle_replication_slot_timeout, zodat een publisher niet onbeperkt WAL-bestanden vasthoudt.

Vacuum bevriest tijdens reguliere runs proactief meer pagina's, wat overhead vermindert en helpt in situaties die anders een agressieve vacuum vereisen. EXPLAIN ANALYZE toont nu automatisch hoeveel buffers zijn benaderd en hoeveel index-lookups een indexscan heeft gedaan; EXPLAIN ANALYZE VERBOSE bevat CPU-, WAL- en gemiddelde leesstatistieken. pg_stat_all_tables bevat meer informatie over de tijd besteed aan vacuum en verwante bewerkingen, en er zijn statistieken per verbinding over I/O- en WAL-gebruik.

Wire protocol 3.2

PostgreSQL 18 introduceert versie 3.2 van het wire protocol, de eerste nieuwe protocolversie sinds PostgreSQL 7.4 (2003). libpq blijft standaard versie 3.0 gebruiken terwijl clients (drivers, poolers, proxy's) ondersteuning voor de nieuwe versie toevoegen. Volgens de releasenotes kreeg libpq daarvoor de functie PQfullProtocolVersion() en nieuwe verbindingsparameters en omgevingsvariabelen voor de minimaal en maximaal acceptabele protocolversie. Voor bestaande applicaties verandert er zonder expliciete actie niets.

Samengevat

PostgreSQL 18 heeft een duidelijke hoofdlijn (asynchrone I/O met io_method) en een lange staart van verbeteringen die in dagelijks gebruik zichtbaar worden: indexen die vaker bruikbaar zijn, upgrades die hun statistieken behouden, uuidv7() als tijdgeordende sleutel, en een authenticatielaag die richting OAuth en SCRAM beweegt. De punten om vooraf te toetsen zijn de standaard-checksums bij initdb, mogelijke herindexatie van full-text-search- en pg_trgm-indexen en de md5-deprecatie.

Bronnen

Over de auteur

Mohamed Zagoudi

Freelance systeembeheerder & ICT-coördinator

Dit artikel is gebaseerd op eigen praktijkervaring in ICT-beheer en automatisering en bevat geen verwijzingen naar specifieke klanten.

Vragen over dit onderwerp?

Stuur me gerust een bericht. Ik reageer zelf.