Postgres for Agent

Store agent sessions and history in PostgreSQL with PostgresDb.

PostgresDb stores an Agent's sessions and run history in PostgreSQL.

Usage

Start in a virtual environment.

Install dependencies:

uv pip install agno openai ddgs sqlalchemy "psycopg[binary]"

Export your OpenAI API key:

export OPENAI_API_KEY="your_openai_api_key_here"

Run PostgreSQL

Install Docker Desktop, then start PostgreSQL with pgvector on port 5532:

docker run -d \
  -e POSTGRES_DB=ai \
  -e POSTGRES_USER=ai \
  -e POSTGRES_PASSWORD=ai \
  -e PGDATA=/var/lib/postgresql \
  -v pgvolume:/var/lib/postgresql \
  -p 5532:5432 \
  --name pgvector \
  agnohq/pgvector:18
postgres_for_agent.py
from agno.agent import Agent
from agno.db.postgres import PostgresDb
from agno.tools.websearch import WebSearchTools

db_url = "postgresql+psycopg://ai:ai@localhost:5532/ai"

db = PostgresDb(db_url=db_url)

agent = Agent(
    db=db,
    tools=[WebSearchTools()],
    add_history_to_context=True,
)
agent.print_response("How many people live in Canada?")
agent.print_response("What is their national anthem called?")

Run the example

Save the code as postgres_for_agent.py, start the database described above, and run:

python postgres_for_agent.py

Parameters

ParameterTypeDefaultDescription
idOptional[str]-The ID of the database instance. UUID by default.
db_urlOptional[str]-The database URL to connect to.
db_engineOptional[Engine]-The SQLAlchemy database engine to use.
db_schemaOptional[str]-The database schema to use.
session_tableOptional[str]-Name of the table to store Agent, Team and Workflow sessions.
runs_tableOptional[str]-Name of the table to store the runs of each session.
memory_tableOptional[str]-Name of the table to store memories.
metrics_tableOptional[str]-Name of the table to store metrics.
eval_tableOptional[str]-Name of the table to store evaluation runs data.
knowledge_tableOptional[str]-Name of the table to store knowledge content.
traces_tableOptional[str]-Name of the table to store traces.
spans_tableOptional[str]-Name of the table to store spans.
versions_tableOptional[str]-Name of the table to store schema versions.
components_tableOptional[str]-Name of the table to store components.
component_configs_tableOptional[str]-Name of the table to store component configurations.
component_links_tableOptional[str]-Name of the table to store links between components.
learnings_tableOptional[str]-Name of the table to store learnings.
schedules_tableOptional[str]-Name of the table to store cron schedules.
schedule_runs_tableOptional[str]-Name of the table to store schedule run history.
job_tableOptional[str]-Name of the table to store durable background run jobs.
approvals_tableOptional[str]-Name of the table to store human approval requests.
auth_tokens_tableOptional[str]-Name of the table to store OAuth tokens for external services.
service_accounts_tableOptional[str]-Name of the table to store service accounts.
mcp_oauth_clients_tableOptional[str]-Name of the table to store MCP OAuth client registrations.
mcp_oauth_transactions_tableOptional[str]-Name of the table to store MCP OAuth transactions.
mcp_oauth_codes_tableOptional[str]-Name of the table to store MCP OAuth authorization codes.
mcp_oauth_refresh_tokens_tableOptional[str]-Name of the table to store MCP OAuth refresh tokens.
mcp_oauth_keys_tableOptional[str]-Name of the table to store MCP OAuth signing keys.
create_schemaboolTrueWhether to create the database schema if it doesn't exist. Set to False when the schema is managed externally.