Database Setup
Quick Start
1. Install And Run PostgreSQL
macOS:
brew install postgresql@15
brew services start postgresql@15
Ubuntu/Debian:
sudo apt update
sudo apt install postgresql postgresql-contrib
sudo systemctl start postgresql
Docker:
docker run --name trahn-postgres \
-e POSTGRES_PASSWORD=your_password \
-p 5432:5432 \
-d postgres:15
2. Create Database and Schema
# Connect as postgres user
psql -U postgres
# Create database
CREATE DATABASE trahn_grid_trader;
# Exit psql
\q
# Run schema
psql -U postgres -d trahn_grid_trader -f db/schema.sql
3. Configure .env
Add to your .env file:
DB_HOST=localhost
DB_PORT=5432
DB_NAME=trahn_grid_trader
DB_USER=postgres
DB_PASSWORD=your_secure_password_here
4. Test Connection
make dev
# Verify "[DB] Connection successful" appears in the output
Schema Overview
Tables
-
price_history - ETH price data points
- Timestamp-indexed for fast queries
- Organized by trading day (12:00 EST boundary)
-
trade_history - Executed trades
- Buy/sell records with full details
- Paper trade flag for simulation tracking
-
support_resistance_history - S/R levels over time
- Historical record of Dune API fetches
- Tracks when grid was recalculated
-
grid_state - Current grid configuration
- Grid levels stored as JSONB
- State tracking for bot restarts
Indexes
- All tables indexed on
timestampfor time-series queries trading_dayindexed for day-based queries- Optimized for append-heavy workloads
Maintenance
View Data
-- Recent prices
SELECT * FROM price_history ORDER BY timestamp DESC LIMIT 10;
-- Recent trades
SELECT * FROM trade_history ORDER BY timestamp DESC LIMIT 10;
-- S/R history
SELECT * FROM support_resistance_history ORDER BY timestamp DESC LIMIT 10;
-- Latest S/R (using view)
SELECT * FROM latest_support_resistance;
Cleanup Old Data (optional)
-- Delete price data older than 90 days
DELETE FROM price_history WHERE timestamp < NOW() - INTERVAL '90 days';
-- Keep all trade history (don't delete)
Troubleshooting
Connection Failed
- Check PostgreSQL is running:
pg_isready - Verify credentials in
.env - Check firewall/network settings
Schema Errors
- Drop and recreate:
DROP DATABASE trahn_grid_trader; CREATE DATABASE trahn_grid_trader; - Re-run schema.sql
Performance
- If queries slow, add more indexes
- Consider partitioning price_history by month (for large datasets)