Database Deployment
Reportr uses PostgreSQL with Prisma ORM for data persistence. This guide covers production database setup, migrations, and best practices.Database Requirements
PostgreSQL Version
- Minimum: PostgreSQL 12
- Recommended: PostgreSQL 14 or higher
- Compatibility: Tested with PostgreSQL 12-16
Connection Pooling
Required for serverless environments (Vercel, AWS Lambda):- PgBouncer - Connection pooler for PostgreSQL
- Supabase Pooler - Built-in connection pooling
- Neon - Automatic connection pooling
Database Providers
Choose a PostgreSQL provider based on your needs:Vercel Postgres
Pros: Deep Vercel integration, automatic pooling, simple setupCons: More expensive, limited to Vercel ecosystemPricing: 0.02/GB transferredBest for: Vercel-first deployments
Neon
Pros: Serverless, autoscaling, generous free tier, branchingCons: Newer platform, limited regionsPricing: Free tier (0.5GB), $20/month for proBest for: Development and small-medium production
Supabase
Pros: Free tier (500MB), real-time features, backupsCons: Requires manual pooling configurationPricing: Free tier available, $25/month for proBest for: Projects needing real-time features
Railway
Pros: Simple setup, automatic backups, fair pricingCons: Less specialized for serverlessPricing: $5/month base + usageBest for: Developers wanting simplicity
Database Schema
Core Models
Reportr’s Prisma schema includes:Key Features
- User white-labeling:
companyName,primaryColor,logo - Google API tokens: Encrypted storage for OAuth tokens
- Report data: JSON fields for flexible data storage
- AI insights: Structured AI-generated insights with metadata
- Subscription management: PayPal integration for billing
Setup Instructions
1. Create Database
- Vercel Postgres
- Neon
- Supabase
- Railway
POSTGRES_URL and other connection variables.2. Configure Environment Variables
Set in your deployment platform (Vercel, etc.):Use
DATABASE_URL for migrations and PRISMA_DATABASE_URL for runtime queries.3. Run Migrations
Verify database
4. Seed Initial Data (Optional)
- Sample app settings
- Default email templates
- Test user (in development)
Prisma Configuration
Connection Datasource
Inprisma/schema.prisma:
Client Configuration
Using Prisma Client
In your application code:Database Migrations
Creating Migrations
Migration Strategy
Development
Development
Use
prisma migrate dev to:- Create migration files
- Apply to development database
- Regenerate Prisma Client
Staging
Staging
Use
prisma migrate deploy to:- Apply pending migrations
- Skip migration generation
- Safe for CI/CD pipelines
Production
Production
Use
prisma migrate deploy with:- Automatic backups before migration
- Rollback plan prepared
- Monitor for issues post-migration
Rollback Strategy
Prisma doesn’t have built-in rollback. Options:- Database snapshots: Take snapshot before migration
- Manual rollback: Write down migration SQL to revert
- Restore from backup: Use provider’s backup system
Performance Optimization
Indexes
Key indexes defined in schema:Connection Pooling
Configure PgBouncer for optimal performance:pgbouncer=true: Enable PgBouncer modeconnection_limit=1: Limit connections per serverless functionpool_timeout=10: Timeout for acquiring connection (seconds)
Query Optimization
- Use select to limit fields
- Use include carefully
- Paginate large queries
Backup Strategy
Automated Backups
- Vercel Postgres
- Neon
- Supabase
- Railway
- Automatic: Daily backups (retained 7 days)
- Point-in-time recovery: Available on Pro plan
- Configuration: No setup required
Manual Backup
Monitoring & Maintenance
Database Monitoring
Monitor these metrics:- Connection count: Should stay below max connections
- Query performance: Slow queries > 1 second
- Database size: Monitor growth for cost planning
- Error rate: Connection errors, timeouts
Prisma Logging
Enable query logging in development:Database Maintenance
Regular tasks:- Vacuum: Reclaim storage (automatic in most providers)
- Analyze: Update query planner statistics
- Reindex: Rebuild indexes if performance degrades
Security Best Practices
Troubleshooting
Connection pool exhausted
Connection pool exhausted
Error:
Can't reach database serverSolution:- Enable connection pooling with PgBouncer
- Set
connection_limit=1in connection string - Reduce concurrent function executions
Prisma Client not found
Prisma Client not found
Error:
@prisma/client did not initialize yetSolution:Migration conflicts
Migration conflicts
Error:
Migration failed to applySolution:Slow queries
Slow queries
Issue: Queries taking > 1 secondSolution:
- Add indexes for frequently queried fields
- Use
selectto limit returned fields - Implement pagination for large datasets
- Use database query analyzer
Cost Estimation
Monthly Database Costs
- Small (< 100 users)
- Medium (100-1000 users)
- Large (1000+ users)
- Neon: Free tier (0.5GB)
- Supabase: Free tier (500MB)
- Railway: ~$5-10/month
- Vercel Postgres: ~$10-20/month
Next Steps
Environment Variables
Configure all required environment variables
Vercel Deployment
Deploy your application to Vercel