Exact-first readiness

Exact-first readiness keeps the PostgreSQL table authoritative while a derived vector index is planned, built, cancelled, retried, or replaced. Registration commits only after pgContext can execute a complete exact dense-vector scan over the caller’s current visible rows. Index work changes cost, never membership or final exact ordering.

This surface is Experimental. The current implementation requires at least one registered dense vector(n) binding; additional filter and payload bindings may be normalized for future composition, but the public exact-first search and advisor consume dense bindings. Lexical, fuzzy, sparse, binary, and composite apply adapters remain deferred. The advisor currently freezes exact-only, HNSW, or IVFFlat plans.

Lifecycle

Readiness has five stable labels:

  • exact_only: exact search is complete and no current optimization exists.
  • building: exact search remains available while a fenced job is active.
  • indexed: a live, valid, structurally verified current index is published.
  • stale: relation, key, column, type, typmod, or collation identity drifted.
  • degraded: exact search remains available after optimization failure or cancellation.

recommend_only and exact_only never create an index. enqueue creates a fenced operational job. A controller must claim it, run the returned reviewed CREATE INDEX CONCURRENTLY as a top-level PostgreSQL statement, and then call publish_exact_first_build. apply_foreground uses non-concurrent CREATE INDEX in the calling transaction and therefore suits only explicitly reviewed maintenance windows.

SELECT * FROM pgcontext.register_exact_first(
  'products', 'public.products',
  jsonb_build_object(
    'version', 'exact_first_registration_v1',
    'key_column', 'id',
    'bindings', jsonb_build_array(jsonb_build_object(
      'name', 'embedding', 'column', 'embedding', 'kind', 'dense',
      'dimensions', 768, 'metric', 'cosine'
    ))
  )
);

SELECT * FROM pgcontext.exact_first_search(
  'products', 'embedding', $1::pgcontext.vector, 20
);

exact_first_search returns the native real distance and uses a deterministic source-key tie break. It remains the complete exact oracle in all readiness states. A published ANN index is available to compatible ordinary PostgreSQL ordered scans; the Experimental API does not silently substitute an approximate result for this exact oracle.

The controller protocol is exact_first_advisorapply_exact_first_plan(..., 'enqueue')claim_exact_first_build → top-level DDL → publish_exact_first_build. Heartbeat before the 60-second lease expires. Cancellation is cooperative; an expired cancel_requested lease is finalized on the next claim. Failed or cancelled plans may be requeued at most three attempts with retry_exact_first_build.

Bounds and durability

The P14 manifest freezes 256 inspected columns and indexes, 1 MiB registration JSON, 256 KiB objectives JSON, 16,384 JSON iterator nodes, depth 64, 128-byte names, 64 KiB generated DDL, 16 immutable plan revisions, 16 retained optimization targets, three attempts, and a 60-second lease. JSON raw bytes, nodes, and depth are admitted before serde allocation. The required 10M IVFFlat verification queries use the existing hard maximum of 10,000,000 posting visits; ordinary sessions retain their configured/default budget.

Logical registrations and immutable plans participate in extension configuration dump. Operational jobs, leases, invalid samples, and optimization targets do not; after logical restore the exact path remains authoritative and optimization is rebuilt or revalidated. HNSW and IVFFlat indexes remain normal PostgreSQL derived indexes and follow PostgreSQL physical backup/WAL behavior.

All source scans execute as the invoker, preserving MVCC, ACL, and RLS. Catalog functions authorize SESSION_USER through collection ownership and use a pinned search path. Source-key and registered-column OID, attnum, type, typmod, and collation drift fail closed instead of rebinding.

Certification status

The retained gate runs exact queries during a genuine top-level concurrent build while COPY, insert, update, key update, and delete execute, then compares the published index with the exact oracle and exercises replay, cancellation, restart, lease expiry, retry, and non-superuser operation. Both frozen ten-million-row lanes preserve bit-exact membership/scores, 100% top-10 recall, and exceed the 5,000-row/s build floor (PG17: 34,682; PG18: 33,253), but miss the 250 ms building-query p95, 100 ms indexed-query p95, and 2 GiB temp ceilings (PG17: 7.850 s / 490 ms / 12.81 GB; PG18: 6.894 s / 468 ms / 13.74 GB). Stable promotion is therefore a measured no-go and the capability remains Experimental.

The RLS lane compares the complete returned key sequence with the exact policy-visible oracle before reporting success. Publication establishes structural index validity only. The target’s recall_bps remains null; the retained certification workload measures recall against the exact oracle as a separate Stable-promotion gate.