Contents
Industry Analysis: Database Policy for Agentic AI
Status: living document — continuously updated
Last updated: 2026-08-10
Cadence: append dated entries; keep executive snapshot current
Executive snapshot (2026-08)
| Trend | Evidence | Implication for pg_policy |
|---|---|---|
| Agents get production DB credentials | Supabase Agents positioning; Neon Data API + RLS; multiple “safe SQL agent” posts | RLS alone is necessary but insufficient |
| Policy languages converge on Cedar-like readability | Cedar in AgentCore; Dogwood extends Cedar | APL should feel Cedar/Dogwood-familiar, SQL-native packaging |
| Temporal agent policy is newly mainstream | AWS Dogwood (2026) | Session event store inside Postgres is a differentiator |
| Gateways emerge in front of SQL | Datapace and similar control planes | Offer SQL-callable evaluate API for gateways and in-DB use |
| Extension distribution modernizing | PGXN v2, OCI trunks, CloudNativePG extension volumes | Ship classic PGXN first; track OCI later |
| ReBAC + ABAC hybrids | OpenFGA conditions; Oso local SQL | Support attributes now; relationships next |
| Observability of authz decisions | AuthZEN; decision logs in SaaS authz | First-class decision_log table |
| MCP servers reimplement policy in-process | safe-postgres-mcp, pgguard, postgres-mcp | Packs + evaluate() as shared PDP |
| Frameworks persist state in Postgres | LangGraph PostgresSaver | Same cluster should hold agent policy |
| High-risk AI logging (EU AI Act Art. 12) | Aug 2026 enforcement milestone widely cited | decision_log + acting_for + sessions |
| Multi-tenant RAG ≠ tool authz | ACM Securing the Agent (2026) | Plane B beside RLS |
Market segments
A. AI app platforms (Supabase, Neon, Firebase rivals)
Need: multi-tenant RLS + agent roles + easy policy recipes.
pg_policy wedge: agent/tool policies + examples that compose with RLS.
B. Enterprise agent platforms (Bedrock AgentCore, Azure AI, Vertex)
Need: Cedar/Dogwood-compatible governance, audit, temporal.
pg_policy wedge: Postgres-resident evaluation for data tools; export/import Cedar subset (roadmap).
C. MCP / tool gateway vendors
Need: per-tool authorize() with obligations.
pg_policy wedge: single evaluate() returning AuthZEN-like decisions.
D. Regulated industries (fintech, health, public sector)
Need: evidence of control, break-glass, retention.
pg_policy wedge: immutable-ish decision logs; log_only → enforce promotion.
Competitive landscape
| Player | Layer | Overlap | Gap we fill |
|---|---|---|---|
| Postgres RLS | DB | Row authz | No tools/temporal/guidance |
| OPA/Rego | Sidecar | General policy | Not PG-native DX |
| Cedar + Dogwood | Agent runtime | Agent temporal | Not co-located with SQL/RLS |
| OpenFGA/SpiceDB | Authz service | Relationships | Separate system to operate |
| Oso Cloud | AaaS | Polar + local SQL | External dependency |
| pgauthz | In-PG authz | ABAC/CEL | Not agent/guidance specialized |
| pg_command_fw | Hook firewall | DDL blocking | No policy language |
| Commercial DB gateways | Proxy | Statement control | Vendor lock-in; not extension |
Positioning statement
pg_policy is the open-source PostgreSQL extension that adds an agentic policy language beside your data—guardrails, guidance, and session-aware limits—complementing RLS and publishing on PGXN for every Postgres.
Adoption drivers & blockers
Drivers
- Fear of autonomous
DELETE/COPY/exfil. - MCP proliferating DB tools.
- Compliance asking “show me agent controls.”
- Developer preference for SQL-adjacent config.
Blockers
- Extension allowlists on managed Postgres.
- Learning yet another policy dialect.
- Performance anxiety on evaluate() hot paths.
- Confusion with RLS.
Mitigations
- Pure SQL v0.1 install path.
- Familiar permit/forbid/guide lexicon.
- Benchmarks + IR caching roadmap.
- Docs that teach “RLS for rows, pg_policy for agent actions.”
Pricing / OSS strategy (pre-marketplace)
- Core OSS (PostgreSQL License): language, evaluate, event log, RLS helpers.
- Later commercial-adjacent (optional, not now): hosted policy studio, cross-cluster packs—only if community thrives; keep extension useful alone.
- PGXN as primary discovery; GitHub as collaboration hub.
Dated research log
2026-08-10 — Initial sweep
Completed landscape of Cedar, Rego, CEL, Polar, Zanzibar/OpenFGA, Dogwood, RLS, pgauthz, pg_cel, pg_command_fw, PGXN packaging constraints, and agent DB access literature (Supabase, Neon, Datapace, datamcp).
Decision: proceed with APL inside pg_policy, SQL-first MVP, Dogwood-inspired temporal + Sentinel-inspired graded modes (enforce/log/guide).
2026-08-10 — Managed provider distribution paths
| Provider | Model | Path for pg_policy |
|---|---|---|
| Self-hosted / PGXN | Install any extension | Primary day-1 channel |
| AWS RDS / Aurora | Curated extension list + rds.allowed_extensions |
Must be accepted by AWS into supported extensions; SQL-only helps review |
| Neon | Strict allow-list; request via support/Discord; no arbitrary C uploads; pg_tle not supported | Need Neon “request an extension”; popularity + safety story matter |
| Supabase | Allow-list (~64+); request process | Same: community traction → vendor packaging |
| Aiven / Crunchy / Timescale | Vendor-curated | Partner after OSS proof |
| CloudNativePG + OCI trunks | Emerging PGXN v2 / ImageVolume pattern | Medium-term binary distribution |
Strategic implication: SQL/PL/pgSQL v0.1 maximizes reviewability for allow-lists. Avoid requiring shared_preload_libraries until hook-based firewalls are optional. Track Trusted Language Extensions (pg_tle) only where hosts support it (RDS has been a notable TLE venue; Neon currently does not).
2026-08-10 — AuthZEN mapping sketch
OpenID AuthZEN Authorization API 1.0 standardizes PEP↔PDP JSON:
| AuthZEN | pg_policy.evaluate |
|---|---|
subject.type / subject.id |
p_principal_type / p_principal_id |
action.name (plus properties) |
p_action_type + p_action_id (split for tool taxonomy) |
resource.type / resource.id |
p_resource_type / p_resource_id |
context |
p_context jsonb |
decision boolean |
allowed |
| context/obligations in richer PDPs | obligations array (guidance) |
Roadmap: optional thin HTTP PDP that translates AuthZEN → SQL evaluate() so MCP gateways can treat Postgres as a standards-shaped PDP without learning APL first.
2026-08-10 — MCP Postgres tool ecosystem
The MCP Postgres landscape validates pg_policy’s wedge:
| Observation | Evidence | Product implication |
|---|---|---|
Reference @modelcontextprotocol/server-postgres deprecated / unsafe |
Documented COMMIT; DROP… bypasses; still widely downloaded historically |
Host-side regex is insufficient; engine + policy needed |
| Safe MCP servers re-implement policy in Node | safe-postgres-mcp, pgguard-mcp, postgres-mcp (Crystal DBA), etc. |
Duplicated allowlists, row caps, audit logs outside the DB |
| Common tools | query / execute_sql, list_tables, describe_table, explain_query, sample_rows |
First-class APL action ids for these tool names |
| Common guardrails | READ ONLY tx, statement_timeout, max_rows, single-statement, AST parse | Map to context keys + guide obligations (max_rows) + forbid DDL |
| Audit of denials | pgguard records refusals | Aligns with decision_log |
| RLS + SET ROLE / JWT claims | pgguard / Supabase patterns | Keep RLS complement docs central |
Wedge narrative for MCP authors: stop hard-coding row caps and tool allowlists in every MCP server—call pg_policy.evaluate so policy lives next to RLS and survives gateway swaps.
Suggested starter policy pack (roadmap example):
forbid principal agent "*" action tool "execute_sql"
when { context.statement_type in ["DROP","TRUNCATE","ALTER","CREATE","GRANT","REVOKE"] }
guide principal agent "*" action tool "execute_sql"
max_rows 500
advice "Prefer explain_query for large scans"
2026-08-10 — Use cases, packs, and “works for all”
Published the value thesis (three-plane model), ten use cases, universal onboarding, seven SQL packs, and a Python PEP with fail-closed sentinels (acting_for/tenant_id/approved).
Regulatory angle: EU AI Act Art. 12-style trails need session correlation and human attribution — mapped to open_session + context.acting_for. Framework angle: LangGraph/CrewAI/MCP all can share one PDP because the contract is SQL.
Pack count (baseline + 6 domains) meets the 90-day “≥ 5 domains” metric.
Next analysis probes
- [x] Survey managed Postgres providers’ extension allowlist processes (initial pass: RDS, Neon, Supabase, Aiven/Crunchy, CNPG/OCI).
- [ ] Benchmark CEL vs pure SQL IR for 10k evaluate/s.
- [x] Map AuthZEN request fields to
pg_policy.evaluateJSON (sketch). - [x] Interview-style synthesis: MCP DB tool schemas (safe-postgres-mcp, pgguard, postgres-mcp, deprecated reference).
- [ ] Track PGXN v2 trunk/OCI readiness for binary distribution.
- [ ] Deep-dive
pg_tleviability as alternate packaging for RDS-class hosts. - [ ] Competitive watch: Dogwood releases, AgentCore Policy features, pgauthz CEL roadmap.
- [x] Draft reference MCP/Python middleware snippet calling
pg_policy.
Metrics to watch (project health)
| Metric | Target (90 days) |
|---|---|
| GitHub stars / meaningful issues | Community signal |
| Example policy packs | ≥ 5 domains (met: 7 files) |
| Compatible PG majors | 14–17 (then 18) |
| Time-to-first-policy from README | < 10 minutes |
| Decision log completeness | 100% of evaluate() calls |