Skip to main content

Persistence

Codename: Oracle — Long-Term Memory. The photographic record of truth.

Data persistence services for the A.R.C. Framework.


Overview​

The persistence layer provides relational database storage with vector search capabilities for agent state and embeddings.


PostgreSQL

Status: ✅ Active Type: Relational Database with Vector Extensions


Overview​

PostgreSQL serves as the primary data store for the A.R.C. Framework, providing:

  • ACID Transactions - Reliable data persistence
  • pgvector Extension - Vector embeddings for RAG and semantic search
  • JSONB Support - Flexible schema design for agent state
  • Full-Text Search - Advanced text indexing and querying
  • Mature Ecosystem - Rich tooling for backup, replication, and monitoring

Configuration​

Environment Variables​

Copy .env.example to .env and configure:

POSTGRES_USER=arc_user
POSTGRES_PASSWORD=arc_password
POSTGRES_DB=arc_db
POSTGRES_HOST=postgres
POSTGRES_PORT=5432

Initialization​

The database is automatically initialized using init.sql on first startup. This script:

  • Sets up initial schemas
  • Installs extensions (pgvector)
  • Creates default users and permissions

Usage​

Starting PostgreSQL​

# Start with the full stack
make up-stack

# Or start PostgreSQL specifically
docker-compose -f docker-compose.stack.yml up postgres -d

Connecting to the Database​

From Host:

psql -h localhost -p 5432 -U arc_user -d arc_db

From Another Container:

psql -h postgres -p 5432 -U arc_user -d arc_db

Using Docker Exec:

docker exec -it postgres psql -U arc_user -d arc_db

Ports​

PortPurpose
5432PostgreSQL server

Data Persistence​

Data is persisted in a Docker volume:

  • Volume Name: postgres-data
  • Location: Managed by Docker

To backup the database:

docker exec postgres pg_dump -U arc_user arc_db > backup.sql

To restore:

cat backup.sql | docker exec -i postgres psql -U arc_user -d arc_db

pgvector Extension​

The pgvector extension enables vector similarity search for AI embeddings:

-- Create a table with vector column
CREATE TABLE embeddings (
id SERIAL PRIMARY KEY,
content TEXT,
embedding vector(1536) -- OpenAI embedding dimension
);

-- Create an index for fast similarity search
CREATE INDEX ON embeddings USING ivfflat (embedding vector_cosine_ops);

-- Query by similarity
SELECT content, embedding <=> '[0.1, 0.2, ...]'::vector AS distance
FROM embeddings
ORDER BY distance
LIMIT 10;

Health Check​

Check PostgreSQL health:

docker exec postgres pg_isready -U arc_user

Troubleshooting​

View Logs​

docker-compose -f docker-compose.stack.yml logs postgres

Common Issues​

  1. Connection refused: Ensure container is running and port is not blocked
  2. Authentication failed: Check username/password in .env
  3. Database does not exist: Verify POSTGRES_DB matches your connection string
  4. Permission denied: Check user has appropriate grants

Reset Database​

To completely reset the database:

# Stop and remove volumes
docker-compose -f docker-compose.stack.yml down -v

# Restart
docker-compose -f docker-compose.stack.yml up postgres -d

Alternatives​

The database is swappable. Alternative implementations:

  • MySQL - Popular, slightly different feature set
  • CockroachDB - Distributed SQL, PostgreSQL compatible
  • YugabyteDB - Distributed SQL, PostgreSQL compatible
  • TimescaleDB - Time-series optimized PostgreSQL