This candidate is for development testing and community review, pending Apache AGE PMC approval.
Performance and memory improvements
- Added PostgreSQL composite
vertexandedgetypes so queries can access IDs and properties without constructing and decoding complete agtype entities. Returning these composite types also avoids the final conversion toagtype. - Reduced entity access and comparison overhead through fixed field positions, direct binary graph-ID comparisons, and reusable comparison memory, benefiting sorting, joins, and aggregation.
- Improved variable-length traversal with flat adjacency arrays, array-based traversal stacks, compact hash tables, and batched edge lookups.
- Reduced graph-cache memory usage by storing tuple locations and fetching properties when needed. Traversals that only filter by label avoid fetching properties.
- Exposed variable-length traversal endpoints as
graphidcolumns, allowing ordinary equality joins instead of repeatedly decoding paths to match their endpoints. - Added per-graph version counters so unrelated database activity does not invalidate cached graphs. On PostgreSQL 15, this requires
shared_preload_libraries = 'age';otherwise, snapshot-based invalidation remains in use. - Added automatic vertex-ID and edge-endpoint indexes, with indexed lookups for entity existence checks, updates, and deletes. The upgrade also creates the required indexes for existing labels.
- Reduced planning overhead for containment and key-existence predicates by replacing expensive statistics evaluation with fixed selectivity estimates, trading estimation precision for lower planning cost.
- Improved CSV loading through PostgreSQL’s COPY parser, batched heap inserts, row and byte limits for flushing batches, and memory reuse between batches.
- Added specialized edge-uniqueness checks for fixed-length paths containing two, three, or four relationships, reducing overhead for common short patterns.
Cypher and graph features
- Adds
MERGEwithON CREATE SETandON MATCH SET. - Adds
reduce()list folding, including references to enclosing query values, and the predicate functionsall(),any(),none(), andsingle().
PostgreSQL and driver integration
- Adds row-level security enforcement and improves permission checks for graph reads and writes.
- Supports loading AGE through
shared_preload_librariesand adds helpers for preparing and completing PostgreSQL major-version upgrades. - Adds Python APIs for configuring existing or pooled psycopg connections and converting graph models to ordinary Python dictionaries.
- Includes Python, Node.js, JDBC, and Go driver fixes and dependency updates.
Correctness and stability
- Fixes visibility of changes across CREATE, MATCH, and chained MERGE operations.
- Corrects OPTIONAL MATCH, NULL propagation, zero-hop traversal, and read-only replica behavior.
- Fixes crashes involving generated or additional label columns, malformed CSV input, prepared statements, and value conversions.
- Addresses memory leaks, invalid memory accesses, and driver input-validation issues.
Full Changelog: PG15/v1.6.0-rc0...PG15/v1.8.0-rc0