Skip to main content

PostgreSQL in OpenRAG

PostgreSQL 16 serves as the primary metadata and relational data store for OpenRAG.

Configuration

Image: postgres:16-alpine Environment Variables:
Port: 5432 (exposed to host) Volume: Persistent storage at postgres_data:/var/lib/postgresql/data

Database Schema

OpenRAG uses 5 main tables:

1. documents

Stores document metadata.
Status Values:
  • uploaded: File uploaded, queued for processing
  • processing: Currently being processed
  • processed: Successfully processed and indexed
  • failed: Processing failed

2. document_chunks

Stores text chunks extracted from documents.
Purpose: Each chunk represents a semantically coherent piece of text (typically 500-1000 characters).

3. queries

Tracks user queries and responses.

4. processing_jobs

Tracks background processing jobs.

5. collections

Manages document collections (logical grouping).

Connection Details

Driver: asyncpg (asynchronous PostgreSQL driver for Python) Connection String:
Connection Pooling: Managed by asyncpg

Initialization

Database is initialized automatically via init.sql:
Manual Initialization (if needed):

Health Check

The API includes PostgreSQL connectivity in its health check.

Common Operations

Connect to Database:
View Documents:
Count Chunks:
Processing Statistics:
Recent Queries:

Backup and Restore

Backup Database:
Restore Database:

Performance Tuning

For production, consider adjusting PostgreSQL configuration:

Migrations

Schema changes should be managed via migration files:
Execute migrations:

Monitoring

Check database size:
Active connections:

Troubleshooting

Connection Issues:
Type Casting Errors: Ensure explicit type casts in queries: