Files

172 lines
3.1 KiB
Markdown
Raw Permalink Normal View History

# PostgreSQL Setup
This guide covers optional PostgreSQL database configuration.
## When to Use PostgreSQL
PostgreSQL is recommended for:
- Large datasets (millions of trades)
- Multiple users
- Advanced queries
- Production deployments
- High-performance requirements
## Installation
### Install PostgreSQL
**Fedora/Bluefin**:
```bash
sudo dnf install postgresql postgresql-server
sudo postgresql-setup --initdb
sudo systemctl enable postgresql
sudo systemctl start postgresql
```
**Ubuntu/Debian**:
```bash
sudo apt-get install postgresql postgresql-contrib
sudo systemctl enable postgresql
sudo systemctl start postgresql
```
## Database Setup
### Create Database
```bash
sudo -u postgres psql
```
```sql
CREATE DATABASE crypto_trader;
CREATE USER crypto_trader_user WITH PASSWORD 'your_password';
GRANT ALL PRIVILEGES ON DATABASE crypto_trader TO crypto_trader_user;
\q
```
### Configure Connection
Update `config.yaml`:
```yaml
database:
type: postgresql
host: localhost
port: 5432
database: crypto_trader
user: crypto_trader_user
password: ${DB_PASSWORD} # Use environment variable
```
### Set Environment Variable
```bash
export DB_PASSWORD='your_password'
```
Or add to `~/.bashrc`:
```bash
echo 'export DB_PASSWORD="your_password"' >> ~/.bashrc
```
## Migration from SQLite
### Export from SQLite
```bash
sqlite3 trading.db .dump > dump.sql
```
### Import to PostgreSQL
```bash
psql -U crypto_trader_user -d crypto_trader -f dump.sql
```
## Performance Tuning
### PostgreSQL Configuration
Edit `/etc/postgresql/*/main/postgresql.conf`:
```ini
shared_buffers = 256MB
effective_cache_size = 1GB
maintenance_work_mem = 64MB
checkpoint_completion_target = 0.9
wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 200
work_mem = 4MB
min_wal_size = 1GB
max_wal_size = 4GB
```
### Indexes
Key indexes are created automatically. For custom queries, add indexes:
```sql
CREATE INDEX idx_trades_symbol_date ON trades(symbol, executed_at);
CREATE INDEX idx_market_data_symbol_timeframe ON market_data(symbol, timeframe, timestamp);
```
## Backup and Recovery
### Backup
```bash
pg_dump -U crypto_trader_user crypto_trader > backup.sql
```
### Restore
```bash
psql -U crypto_trader_user crypto_trader < backup.sql
```
### Automated Backups
Set up cron job:
```bash
0 2 * * * pg_dump -U crypto_trader_user crypto_trader > /backup/crypto_trader_$(date +\%Y\%m\%d).sql
```
## Security
### Connection Security
- Use strong passwords
- Restrict network access
- Use SSL connections for remote access
- Regular security updates
### User Permissions
- Use dedicated database user
- Grant only necessary permissions
- Don't use superuser for application
## Troubleshooting
**Connection refused?**
- Check PostgreSQL is running: `sudo systemctl status postgresql`
- Verify connection settings
- Check firewall rules
**Authentication failed?**
- Verify username and password
- Check `pg_hba.conf` configuration
- Review PostgreSQL logs
**Performance issues?**
- Check PostgreSQL configuration
- Review query performance
- Add appropriate indexes
- Monitor resource usage