Released: 28 Oct 2026
AIDB 7.9.0 adds support for WarehousePG 7. Some AIDB features aren't supported or work differently on WarehousePG. See AIDB on WarehousePG.
This release also includes the following enhancements, changes, and bug fixes:
| Type | Description |
|---|---|
| Enhancement | WarehousePG 7 support: AIDB runs on WarehousePG 7, installed on the coordinator and every segment host. Most features are supported. Table pipelines in Live or Background mode, agent memory, and OTel export and storage aren't. See AIDB on WarehousePG. |
| Enhancement | External telemetry ingest: The aidb_otel.ingest_* functions store OTLP traces, logs, and metrics from agents outside AIDB, in JSON or binary protobuf. Only members of the new aidb_otel_writer role can run them. See Receiving telemetry from external agents. |
| Enhancement | OTLP/HTTP receiver: The edb-endpoints server can accept OTLP/HTTP telemetry from external agents and store it in aidb_otel. It is off by default. See OTLP/HTTP receiver. |
| Enhancement | OAuth for the MCP server and OTLP receiver: MCP clients can sign in through your identity provider, and OTLP senders can send a bearer token instead of a password. Requires PostgreSQL 18 and a validator module. See Authenticating with OAuth. |
| Enhancement | Telemetry provenance: Every aidb_otel row records its source (internal or external) and the principal that wrote it. aidb_otel.traces also records span_start_time and span_end_time for externally sent spans. See Common columns. |
| Enhancement | OAuth bearer tokens for the OTLP receiver: Senders can authenticate with a token from your identity provider instead of a password. See OAuth. |
| Enhancement | Multiple databases for the MCP endpoint: One endpoint can serve several databases, each at /mcp/<database>. The first database listed stays the default at /mcp. See Serving multiple databases. |
| Change | Endpoint settings: edb.endpoints_host, edb.endpoints_database, edb.endpoints_tls_cert, edb.endpoints_tls_key, edb.endpoints_command_path, edb.endpoints_restart_max, and edb.endpoints_restart_window_secs now apply to every server the endpoint process runs. The edb.endpoints_mcp_command_path and edb.endpoints_mcp_restart_* settings are deprecated and still take precedence when set. See Configuring the endpoint. |
| Change | MCP endpoint password check: The endpoint refuses connections that pg_hba.conf admits without checking a password, such as trust or peer, and no longer runs on PostgreSQL 14 or 15. See Upgrading from 7.8.0. |
| Change | MCP database setting: edb.endpoints_mcp_database is now an identifier list, so an unquoted name folds to lowercase. See Upgrading from 7.8.0. |
| Change | Endpoint supervisor name: The supervisor background worker is now named aidb endpoints supervisor, which is its backend_type in pg_stat_activity and its log prefix. Update monitoring queries and log filters that match aidb mcp endpoint supervisor. See Operating the endpoint. |
| Enhancement | Telemetry documentation: The observability reference is now a single page that documents every attribute AIDB sets, who can read the aidb_otel tables, and why AIDB reports through logs instead of span events. The OpenTelemetry conventions deprecated span events, so the events array of every span is empty. See Schemas. |
| Change | Attribute version: Every signal now carries aidb.otel_schema_version = 2. Data without it uses version 1 attributes. Update consumers that match version 1 attributes. See Traced attributes. |
| Change | Duplicate spans: aidb_otel.traces stores a span once per writer. A span sent again by the same writer is ignored. |
| Change | Existing telemetry rows: Rows stored before the upgrade are labeled internal, even though earlier releases let any member of aidb_users write them directly. See Upgrading from 7.8.0. |
| Bug fix | Remote MCP clients: A client that reaches the endpoint on a non-loopback host by its hostname no longer gets 403. See Serving remote clients. |
| Bug fix | TLS certificate renewal: pg_reload_conf() now loads a renewed certificate and key at the same paths without restarting the endpoint, and a failed reload keeps the previous pair serving. See Serving remote clients. |
| Enhancement | Agent plugins: aidb.create_agent_plugin(), aidb.update_agent_plugin(), and aidb.delete_agent_plugin() manage reusable plugins that are stored in aidb.agent_plugins_registry. aidb.create_agent() and aidb.update_agent() take a new plugins argument. See Agents. |
| Enhancement | Semantic knowledge base context: aidb.update_semantic_kb_context() stores your own description of a knowledge base, and aidb.process_semantic_kb_context() distills it into relationship and column comment proposals that stay proposed until a person approves them. Background knowledge bases distill context in their worker. Set aidb.semkb_context_model and aidb.semkb_context_timeout_ms with ALTER DATABASE. See Semantic knowledge bases. |
| Enhancement | Semantic knowledge base plugins: Each semantic knowledge base publishes a managed agent plugin named semkb_<kb_name> with three read-only SQL tools for search, join paths, and join suggestions. aidb.list_semantic_kbs() reports its plugin_name. See Semantic knowledge bases. |
| Enhancement | Semantic knowledge base query history filter: aidb.update_semantic_kb_history_filter() excludes roles from a knowledge base's query history. AIDB skips statements from the listed roles and their members, and removes rows they already wrote. See Semantic knowledge bases. |
| Change | Agent memory functions require a scope: aidb.memory_add(TEXT, TEXT) and aidb.memory_search(TEXT, INT) are removed. The new aidb.memory_add() and aidb.memory_search() require namespace and actor_id. Update callers. See Upgrading from 7.8.0. |
| Enhancement | Governance decision evidence: A purpose_decision span lists the relations that a governed statement named, in aidb.agent.decision.referenced_relations, and their total. When PostgreSQL raises a privilege denial (SQLSTATE 42501), the span also records aidb.agent.decision.denial_class, aidb.agent.decision.denial_funcname, aidb.agent.decision.denial_message, and db.response.status_code. See Decision records. |
| Change | Purpose functions run as the caller: aidb.create_purpose(), aidb.update_purpose(), and aidb.delete_purpose() are now SECURITY INVOKER. The aidb_governance role can read all columns of the purpose registry. See Purposes. |
| Bug fix | Agent session compaction: Compaction caps the output of the summary model, treats a summary that the model cut off as a failure instead of saving it, and retries a limited number of times. If every retry fails, the session history stays as it was. A failed compaction attempt no longer appears in restored history. |
| Bug fix | Tool history after compaction or reload: For Anthropic models whose thinking mode is unset, disabled, or adaptive, agents keep the retained tool calls and results as native tool history after a compaction or a session reload. With manual extended thinking, AIDB still replays them as text. |
| Bug fix | Anthropic tool_use ids: Agents keep the tool_use id when they replay earlier turns, because Anthropic uses it to pair a result with its call. If an adapter rejects a tool history before it sends a request, the task now fails at once instead of retrying. |
| Bug fix | Tool argument schemas: The input schema of native and SQL tools now sets additionalProperties to false, so it matches the arguments that tool validation accepts. Schemas of MCP tools are unchanged. |
| Bug fix | Telemetry in read-only transactions: An instrumented call in a read-only transaction, such as BEGIN READ ONLY, a role pinned with default_transaction_read_only, or a hot standby, no longer fails with SQLSTATE 25006. AIDB doesn't store those spans. It logs one LOG line per batch with the signal, the record count, the operation names, and the trace and span ids, and never the payload. See Read-only transactions. |
Upgrading from 7.8.0
- MCP server connections must check a password. Before you upgrade, change the
pg_hba.conflines that match the endpoint's connections to a password method such asscram-sha-256, or every tool call fails. The endpoint also no longer runs on PostgreSQL 14 or 15. See Passwords are always checked. edb.endpoints_mcp_databaseis now an identifier list. An unquoted name with uppercase letters folds to lowercase, a name with a space or a non-ASCII letter must be double-quoted, and a name with a comma splits into two. See Upgrading from 7.8.0.- The supervisor has a new name. Update monitoring queries and log filters that match
aidb mcp endpoint supervisortoaidb endpoints supervisor. See Logging. - Three
edb.endpoints_mcp_*settings are deprecated. Replaceedb.endpoints_mcp_command_path,edb.endpoints_mcp_restart_max, andedb.endpoints_mcp_restart_window_secswithedb.endpoints_command_path,edb.endpoints_restart_max, andedb.endpoints_restart_window_secs. A value that's still set takes precedence, and the supervisor logs a warning. See Deprecated settings. - The MCP host and database settings now default to empty. They fall back to
edb.endpoints_hostandedb.endpoints_database. A value you already set keeps working. See MCP settings. edb.endpoints_mcp_enablednow takes effect on reload. Turning the endpoint on from fully off still needs a restart, and the new master switchedb.endpoints_enableddisables every server when it'soff. See Configuring the endpoint.- Telemetry rows written before the upgrade are labeled
internaland have noprincipal. AIDB can't tell which of them members ofaidb_userswrote directly, so don't treatsource = 'internal'as proof for rows older than this upgrade. - Launching
edb-endpointsyourself. The binary now serves the OTLP receiver by default, so a command that worked before, such asedb-endpoints --pg-host /tmp --pg-dbname aidb, fails without--otlp-pg-dbname. Add--no-otlpto keep it MCP-only, or--otlp-pg-dbname=<database>to serve telemetry too. Endpoints that the supervisor starts need no change. The unprefixed--listen-host,--listen-port,--tls-cert,--tls-key, and--pg-dbnameflags are deprecated in favor of their--mcp-*forms. See Launchingedb-endpointsyourself. - Agent memory function calls.
aidb.memory_add(TEXT, TEXT)andaidb.memory_search(TEXT, INT)are dropped, and the upgrade doesn't keep a compatible overload. Update calls to passnamespaceandactor_id, for exampleaidb.memory_search(namespace, actor_id, query). The upgrade doesn't cascade to objects that depend on the old functions, so update or drop those objects first.