PostgreSQL

PostgreSQL is the recommended database for production Memori deployments. Full concurrent write support, connection pooling, and cloud-ready.

Install

Install
pip install memori psycopg

Quick Start

PostgreSQL Connection
from memori import Memori
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine(
    "postgresql+psycopg://user:password@localhost:5432/memori_db",
    pool_pre_ping=True
)
SessionLocal = sessionmaker(bind=engine)

mem = Memori(conn=SessionLocal)
mem.config.storage.build()

Cloud Providers

ProviderConnection Format
Neonpostgresql+psycopg://...@*.neon.tech/...
Supabasepostgresql+psycopg://...@*.supabase.co/...
AWS RDSpostgresql+psycopg://...@*.rds.amazonaws.com/...
AWS Aurorapostgresql+psycopg://...@*.rds.amazonaws.com/...
Google Cloud SQLpostgresql+psycopg://...@*.cloudsql/...
Azure Databasepostgresql+psycopg://...@*.postgres.database.azure.com/...

For TypeScript, append ?sslmode=require to DATABASE_CONNECTION_STRING for cloud-hosted PostgreSQL (Neon, Supabase, AWS RDS).

SSL Connections (Python)

For cloud-hosted PostgreSQL, use SSL:

engine = create_engine(
    "postgresql+psycopg://user:password@host:5432/memori_db"
    "?sslmode=require",
    pool_pre_ping=True
)
ModeDescription
requireSSL required, no certificate verification
verify-caSSL + verify server certificate
verify-fullSSL + verify certificate + hostname

Complete Example

Complete Example
import os
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from memori import Memori
from openai import OpenAI

engine = create_engine(
    os.getenv("DATABASE_URL"),
    pool_pre_ping=True,
    pool_size=10,
    max_overflow=20,
    pool_recycle=300
)
SessionLocal = sessionmaker(bind=engine)

client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
mem = Memori(conn=SessionLocal).llm.register(client)
mem.attribution(entity_id="user_123", process_id="my_agent")
mem.config.storage.build()

response = client.chat.completions.create(
    model="gpt-4.1-mini",
    messages=[{"role": "user", "content": "I'm a senior engineer at Google."}]
)
print(response.choices[0].message.content)

mem.augmentation.wait()
facts = mem.recall("job title and company")
print(facts)

Notes (TypeScript)

  • Pass a factory function: conn: () => pool. Memori never closes the pool — you own its lifecycle and call pool.end() when you're done.
  • Use a pg.Pool, not a pg.Client — a pool safely handles the concurrent reads, writes, and background augmentation that Memori performs.
  • Set DATABASE_CONNECTION_STRING in your .env file.