PostgreSQL Setup
Requirements
- PostgreSQL 14 or higher
- Connection pooling (PgBouncer or Supabase Pooler)
- At least 1GB RAM allocated to database
Connection URLs
Deltalytix requires two connection strings:Pooled connection - Used for application queries at runtimeKey parameters:
- Port
6543- Default PgBouncer port (or your pooler port) pgbouncer=true- Enables transaction mode compatibilityconnection_limit=1- Prevents pool exhaustion in serverless environments
Direct connection - Used for migrations and schema changesKey parameters:
- Port
5432- Standard PostgreSQL port - No pooling parameters - Direct database access
If using Supabase, find these URLs in your project settings under Database > Connection String. Use “Connection pooling” for
DATABASE_URL and “Direct connection” for DIRECT_URL.Prisma Configuration
The Prisma schema is located atprisma/schema.prisma:
Connection Pooling with PgBouncer
The application uses Prisma’s PostgreSQL adapter for connection pooling:server/billing.ts
- Creates a connection pool managed by
node-postgres - Wraps the pool with Prisma’s PostgreSQL adapter
- Enables efficient connection reuse in serverless environments
Database Schema
Deltalytix maintains a comprehensive schema with the following core models:User Management
- User - User accounts linked to Supabase Auth
- DashboardLayout - Customizable dashboard configurations
- Notification - User notifications
Trading Data
- Trade - Individual trade records with P&L, images, tags
- Order - Order execution details
- Account - Trading accounts with prop firm rules
- Group - Account groupings
- Payout - Account payout tracking
- TradeAnalytics - Computed metrics (MAE, MFE, risk/reward)
- HistoricalData - Market data for analysis
Subscriptions
- Subscription - Individual user subscriptions
- TeamSubscription - Team-based subscriptions
- BusinessSubscription - Business-tier subscriptions
- SubscriptionFeedback - Cancellation feedback
Collaboration
- Team - Team structures
- TeamManager - Team access control
- TeamInvitation - Pending team invitations
- Business - Business entities
- BusinessManager - Business access control
- BusinessInvitation - Pending business invitations
Additional Features
- Mood - Daily mood tracking and journaling
- Tag - Custom trade tags
- Post - Feature requests and bug reports
- Comment - Discussion threads
- Vote - Feature voting
- Shared - Shared dashboard links
- Referral - Referral tracking
- TickDetails - Instrument tick specifications
- FinancialEvent - Economic calendar events
- Synchronization - Third-party service sync status
Running Migrations
Initial Setup
-
Install dependencies:
-
Generate Prisma Client:
-
Run migrations:
Development Workflow
Create a new migration:- Create a new migration file
- Apply it to your database
- Regenerate Prisma Client
Production Deployment
Apply pending migrations:- Applies all pending migrations
- Does not create new migrations
- Safe for CI/CD pipelines
Database Management
Prisma Studio
Launch a GUI to browse and edit data:Introspection
Pull schema changes from database:- Syncing schema from another environment
- Reverse-engineering an existing database
Schema Validation
Validate schema syntax:Format Schema
Formatschema.prisma file:
Backup and Restore
Backup Database
Restore Database
Connection Pool Settings
Recommended PgBouncer Configuration
pgbouncer.ini
Supabase Pooler
Supabase automatically configures connection pooling. Use the provided connection pooling URL from your project settings.Troubleshooting
Connection Pool Exhausted
Error:Error: Connection pool exhausted
Solution:
- Ensure
connection_limit=1inDATABASE_URL - Increase pool size in PgBouncer/Supabase settings
- Check for connection leaks (unclosed transactions)
Migration Failed
Error:Migration failed to apply
Solution:
- Verify
DIRECT_URLis set correctly (not pooled) - Check database permissions (CREATE, ALTER, DROP)
- Review migration logs:
prisma migrate status
Schema Out of Sync
Error:Prisma schema is not in sync with database
Solution:
SSL Connection Issues
Error:SSL connection failed
Solution: Add SSL parameters to connection string:
Performance Optimization
Indexes
The schema includes strategic indexes on:- Foreign keys for relationship queries
- Email addresses for user lookups
- Account numbers for trade filtering
- Date ranges for analytics queries
- Status fields for subscription checks
Query Optimization
- Use
selectto limit returned fields - Leverage
includefor efficient joins - Implement pagination with
takeandskip - Use
findUniqueinstead offindFirstwhen possible
Connection Management
- Always use connection pooling in production
- Set appropriate pool sizes based on load
- Monitor active connections
- Close connections in serverless functions (handled by Prisma adapter)
Next Steps
- Authentication Configuration - Set up user authentication
- Environment Variables - Complete environment setup
- API Documentation - Learn about available endpoints