v0.1.8: Named Graphs And Production Release Hardening
v0.1.8 adds named graph administration, graph-scoped catalogs, hosted
maintenance jobs, relationship creation, and stricter query-surface boundaries.
pgGraph can now keep multiple registered graph definitions in the same
extension schema, apply graph-specific grants and quotas, scope builds and sync
replay to the selected graph, and expose enough runtime state for operators to
load, unload, inspect, and maintain those graphs without falling back to raw
catalog writes.
This release also expands the mutable GQL write surface with registered
relationship creation and row hydration, while keeping PostgreSQL source tables
authoritative for graph mutations. Capability checks for openCypher and
SQL/PGQ are now explicit, so unsupported syntax is rejected with clearer
compatibility guidance instead of drifting into partial behavior.
The final release candidate hardens restricted-role SQL behavior, refreshes the
Rust and pgrx release toolchain, and documents the full release handoff from
gate evidence through signed tags and package publishing.
Highlights
- Added a durable named-graph catalog with graph creation, selection,
description, residency, grants, quotas, and metadata inspection APIs. - Scoped node registrations, relationship registrations, filter columns, build
jobs, maintenance jobs, sync policies, and sync replay by graph identity. - Added runtime graph loading and unloading controls so operators can manage
selected graphs and inspect active runtime state. - Added graph grants and quota policy enforcement for visibility, build,
sync, mutation, and administration paths. - Added hosted sync-policy jobs, hosted due-job runners, and an internal due
job worker so scheduled maintenance can run through graph-scoped job state. - Added graph-aware discovery and direct identity lookups for registered
labels and relationships. - Added GQL
CREATEsupport for registered relationships, including source-row
inserts, transaction-local visibility, and hydrated relationship rows in
query results. - Added graph-scoped projection and sync behavior so replay, dirty-range
ingest, copy-on-write compaction, and runtime selection ignore unrelated
graph state. - Added explicit openCypher and SQL/PGQ capability boundaries with clearer
unsupported-feature reporting and compatibility corpus coverage. - Hardened named-graph catalog access so internal graph catalogs are mediated
through SQL APIs and caller-role visibility checks. - Hardened restricted-role graph access so selected-graph metadata, sync status,
and runtime state can be resolved through controlled definer boundaries while
preserving caller-role graph grants and PostgreSQL source-table ACL/RLS
checks. - Refreshed the release toolchain to Rust 1.96 and pgrx 0.19.1, with matching
Docker, Nix, Cargo, installation, and PGXN source-build documentation. - Added a contributor release-gate checklist that records required gates,
environment prerequisites, opt-in gates, evidence capture, signed tagging,
package validation, and prepare/publish ordering.
Named Graph Administration
Named graphs move pgGraph beyond one implicit default graph. Operators can
create graph definitions, select the active graph for a role, list graph
metadata, configure residency, grant graph-level capabilities, and set build or
storage quotas. Registration APIs now attach tables, relationships, filter
columns, sync policies, and build state to a graph ID, while existing default
graph behavior remains available for simple installs.
The graph-scoped catalog layer also changes runtime behavior. Build operations,
auto-discovery, traversal, GQL queries, sync replay, projection ingest, and
maintenance jobs now resolve the caller's selected graph and reject access when
the role lacks the required graph privilege. Runtime status APIs report graph
identity and residency state so loaded graph engines are no longer treated as a
single global slot.
Hosted Maintenance And Sync
v0.1.8 adds graph-scoped job tables and scheduler entry points for hosted
maintenance. Sync policies can create due jobs, due-job runners can claim and
execute graph work, and Docker installs continue to schedule
graph.run_scheduled_maintenance() through pg_cron. The same job model can
be used by external schedulers in non-Docker deployments.
Build jobs and maintenance jobs now include graph identity, advisory-lock
coverage was updated for graph-scoped work, and sync replay ignores source
changes that belong to other registered graphs. Projection maintenance paths
also preserve graph scope when ingesting dirty ranges or compacting
copy-on-write state.
GQL And Compatibility
The GQL mutable write path can now create registered relationships. Relationship
creation resolves mapped endpoint rows, inserts through PostgreSQL DML, exposes
transaction-local changes to subsequent graph reads, and returns hydrated
relationship records. Direct identity lookups support the new row hydration
paths without making graph artifacts a second source of truth.
The release also makes compatibility boundaries more explicit. The openCypher
preview accepts only the subset that maps cleanly to pgGraph's GQL IR, and the
SQL/PGQ adapter documents supported typed-hook behavior separately from
PostgreSQL's future SQL parser integration. Unsupported features now fail with
clearer errors and capability metadata.
Compatibility
The named-graph catalog adds new extension-owned tables and changes the shape
of several internal administration paths. Existing single-graph installs should
continue to use the default graph, but development databases created from older
alpha catalog layouts should be recreated before testing this release.
Source tables remain the source of truth. Graph artifacts, projection segments,
sync state, and runtime engines are still derived from PostgreSQL tables and
graph registration metadata.
v0.1.8 raises the source-build baseline to Rust 1.96 and pgrx 0.19.1.
PostgreSQL 14 through 18 remain the supported PostgreSQL majors, with
PostgreSQL 17 as the default release-gate target.
Release Validation
The production release candidate completed the full PostgreSQL 17 release gate,
including docs drift, dependency freshness remediation, formatting, clippy,
Rust docs and doctests, unit tests, pgrx SQL tests, cargo-deny, fuzz compile,
projection seed corpora, package validation, fresh install smoke,
SQL metadata audit, SQLSTATE/ACL boundary tests, backup/restore,
lock-regression gates, concurrency stress, synthetic release fixture,
Docker/playground validation, pgbench sync stress, GQL write lifecycle gates,
named-graph heavy gates, cross-backend durable projection checks, projection
recovery, transaction-delta lifecycle, and write predicate re-check races.
The playground release gate now treats nondeterministic demo sample hashes as
row-count assertions while retaining stable checksums for deterministic results.
This keeps the gate focused on product regressions instead of component-id or
sample-order drift across fresh builds.