Na een jaar van ontwikkeling is de nieuwe stabiele tak van de PostgreSQL-database Systeem (DBMS) 14 gepubliceerd. Updates voor deze nieuwe tak zullen gedurende vijf jaar tot november 2026 uitkomen.
Belangrijkste vernieuwingen:
- Ondersteuning voor toegang tot JSON-gegevens is toegevoegd met behulp van expressies die vergelijkbaar zijn met hoe met arrays wordt gewerkt: SELECT (‘{ «postgres»: { «release»: 14 }}’::jsonb)[‘postgres’][‘release’]; SELECT * FROM test WHERE details[‘attributes’][‘size’] = ‘»medium»‘;
Een vergelijkbare syntaxis is geïmplementeerd voor gegevens in sleutel/waarde-formaat, verstrekt door het hstore-type. Deze syntaxis werd oorspronkelijk geïmplementeerd met behulp van een universeel framework dat in de toekomst kan worden benut voor andere types. Voorbeeld voor het hstore-type: INSERT INTO mytable VALUES (‘a=>b, c=>d’); SELECT h[‘a’] FROM mytable; UPDATE mytable SET h[‘c’] = ‘new’;
- De typefamilie voor het definiëren van reeksen is uitgebreid met nieuwe types 'multirange', waarmee gesorteerde lijsten van niet-overlappende reeksen waarden kunnen worden aangegeven. Voor elk bestaand range-type is er een eigen multirange-type aangeboden, bijvoorbeeld, 'int4range' komt overeen met 'int4multirange', en 'daterange' met 'datemultirange'. Het gebruik van de nieuwe types vereenvoudigt het formuleren van queries die met complexe reeksen van overlappingen omgaan. SELECT ‘{[3,7), [8,9)}’::int4multirange; SELECT nummultirange(numrange(1.0, 14.0), numrange(20.0, 25.0));
- Er zijn optimalisaties doorgevoerd om de prestaties van hoogbelaste systemen die een groot aantal verbindingen verwerken te verbeteren. In sommige tests is er een tweevoudige prestatieverbetering waargenomen.
- De efficiëntie van B-tree-indexen is verhoogd en er is een probleem opgelost met het toenemen van indexen bij frequente updates van tabellen.
- Ondersteuning voor een client-side werkend (geïmplementeerd op het niveau van libpq) pipeline-modus voor het verzenden van queries is toegevoegd, wat het werk met databases dat verband houdt met het uitvoeren van een groot aantal kleine recordoperaties (INSERT/UPDATE/DELETE) aanzienlijk versnelt door de volgende query te verzenden zonder op het resultaat van de vorige te wachten. Deze modus helpt ook om het werk te versnellen bij verbindingen met hoge vertragingen in pakketlevering.
- De mogelijkheden voor gedistribueerde configuraties, inclusief meerdere... servers PostgreSQL. In de implementatie van logische replicatie is de mogelijkheid toegevoegd om transacties die in uitvoering zijn in een streamingmodus te verzenden, waardoor de prestaties van de replicatie van grote transacties aanzienlijk worden verhoogd. Daarnaast is de logische decodering van gegevens die tijdens de logische replicatie binnenkomen geoptimaliseerd.
- Het mechanisme voor het verbinden van externe tabellen via Foreign Data Wrapper (postgres_fdw) heeft ondersteuning gekregen voor parallelle verwerking van verzoeken, die momenteel alleen toepasbaar is bij verbindingen met andere PostgreSQL-servers. In postgres_fdw is ook ondersteuning toegevoegd voor het batchgewijs toevoegen van gegevens aan externe tabellen en de mogelijkheid om gepartitioneerde tabellen te importeren door de instructie 'IMPORT FOREIGN SCHEMA' aan te geven.
- Er zijn optimalisaties doorgevoerd in de implementatie van de VACUUM-operatie (opruimen en verpakken van opslag). Er is een noodmodus voor opruiming ('emergency mode') toegevoegd die onbelangrijke opruimoperaties overslaat wanneer er omstandigheden ontstaan die een ronde van transactie-id's (transaction ID wraparound) vereisen. De overhead bij het verwerken van indexen in B-Tree-formaat is verminderd. De uitvoering van de operatie 'ANALYZE', die statistieken over de database verzamelt, is aanzienlijk versneld.
- Er is een mogelijkheid toegevoegd om de compressiemethode in te stellen die wordt toegepast in het TOAST-systeem, dat verantwoordelijk is voor de opslag van grote gegevens, zoals tekstblokken of geometrische informatie. Naast de compressiemethode pglz kan nu in TOAST ook het algoritme LZ4 worden gebruikt.
- De middelen voor het monitoren van de database zijn uitgebreid. Weergaven zijn toegevoegd voor het volgen van de voortgang van 'COPY'-commando's (pg_stat_progress_copy), statistieken over replicatiesloten (pg_stat_replication_slots) en activiteiten met betrekking tot de WAL-log van transacties (pg_stat_wal). De functie compute_query_id is toegevoegd, die in verschillende subsystemen, zoals pg_stat_activity en EXPLAIN VERBOSE, het volgen van verzoeken met een unieke identificatie voor elke aanvraag mogelijk maakt.
- In de query planner zijn optimalisaties toegevoegd die de parallelle verwerking van verzoeken verbeteren en de prestaties van gelijktijdige uitvoering van sequentiële scans van records, parallelle uitvoering van verzoeken in PL/pgSQL met de commando 'RETURN QUERY' en parallelle uitvoering van verzoeken in 'REFRESH MATERIALIZED VIEW' verhogen. Voor de verbetering van de prestaties van cyclische geneste joins is ondersteuning voor extra caching geïmplementeerd.
- Voor de optimalisatie van expressies kan nu uitgebreide statistiek worden gebruikt, en voor de optimalisatie van vensterfuncties is incrementele sortering beschikbaar.
- In opgeslagen procedures die het mogelijk maken om transacties te beheren in codeblokken, is ondersteuning voor het definiëren van geretourneerde gegevens met de parameters 'OUT' geïmplementeerd.
- De functie date_bin is toegevoegd voor het afronden van timestamp-waarden volgens een opgegeven interval. SELECT date_bin('15 minutes', TIMESTAMP '2020-02-11 15:44:17', TIMESTAMP '2001-01-01'); 2020-02-11 15:30:00
- De in de SQL-standaard gedefinieerde uitdrukkingen SEARCH en CYCLE zijn toegevoegd, die het ordenen en detecteren van cycli in recursieve common table expressions (CTE) vereenvoudigen. WITH RECURSIVE search_tree(id, link, data) AS ( SELECT t.id, t.link, t.data FROM tree t UNION ALL SELECT t.id, t.link, t.data FROM tree t, search_tree st WHERE t.id = st.link ) SEARCH DEPTH FIRST BY id SET ordercol SELECT * FROM search_tree ORDER BY ordercol;
- In de psql-tool is het automatisch aanvullen van commando's met tabtoets verbeterd, de command ' \df ' heeft nu de mogelijkheid om argumenten van functies weer te geven, en de statistieken in de ' \dX ' commando zijn uitgebreid.
- De mogelijkheid is gegeven om gebruikers privileges toe te wijzen die alleen-lezen of alleen-schrijven toestaan. Privileges kunnen worden ingesteld op specifieke tabellen, weergaven en schema's met behulp van de vooraf gedefinieerde rollen pg_read_all_data en pg_write_all_data. GRANT pg_read_all_data TO user1;
- In nieuwe installaties is standaard de toepassing van wachtwoordauthenticatie met behulp van de methode SCRAM-SHA-256 in plaats van md5 gegarandeerd (de parameter 'password_encryption' in postgresql.conf wordt nu ingesteld op 'scram-sha-256').
Bron: opennet.ru
