Skip to main content

Database Setup

PostgreSQL configuration for Argus.

Requirements

  • PostgreSQL 14 or higher
  • Recommended: 1GB+ RAM for the database

Installation

Ubuntu/Debian

sudo apt update
sudo apt install postgresql postgresql-contrib

macOS

brew install postgresql@14
brew services start postgresql@14

Create Database

# Switch to postgres user
sudo -u postgres psql

# Create database and user
CREATE DATABASE argus;
CREATE USER argus_user WITH ENCRYPTED PASSWORD 'your_password';
GRANT ALL PRIVILEGES ON DATABASE argus TO argus_user;
\q

Connection String

Add to your .env:

DATABASE_URL=postgresql://argus_user:your_password@localhost:5432/argus

Run Migrations

npm run db:migrate

Seed Data (Optional)

Populate with starter sources:

npm run db:seed

Schema Overview

Tables

TableDescription
sourcesRSS feed configurations
articlesIngested articles
briefingsGenerated briefings
source_listsUser-created source groups
verificationsArticle verification data

Key Indexes

-- Full-text search
CREATE INDEX articles_fts_idx ON articles USING GIN (to_tsvector('english', title || ' ' || content));

-- Time-based queries
CREATE INDEX articles_published_idx ON articles (published_at DESC);

-- Domain filtering
CREATE INDEX articles_domain_idx ON articles (domain);

Maintenance

Vacuum

Run regularly to reclaim space:

sudo -u postgres vacuumdb --analyze argus

Monitor Size

SELECT pg_size_pretty(pg_database_size('argus'));

Prune Old Articles

Keep last 90 days:

DELETE FROM articles WHERE published_at < NOW() - INTERVAL '90 days';

Backup & Restore

Backup

pg_dump argus > argus_backup.sql

Restore

psql argus < argus_backup.sql

Performance Tuning

For production, edit postgresql.conf:

# Memory
shared_buffers = 256MB
work_mem = 16MB
maintenance_work_mem = 128MB

# Connections
max_connections = 50

# Logging
log_min_duration_statement = 1000 # Log slow queries > 1s