Database Setup
Medusa uses PostgreSQL as its primary database. This guide covers database setup, configuration, and migrations.PostgreSQL Requirements
- PostgreSQL version: 12 or higher (PostgreSQL 14+ recommended)
- Database user: Must have create privileges
- Extensions: No special extensions required by default
Database Connection
Connection URL
Medusa connects to PostgreSQL using a connection URL:[user]: Your PostgreSQL username (required)[:password]: User password (optional, prefix with:)[host]: Database host (required, e.g.,localhost)[:port]: PostgreSQL port (optional, default:5432, prefix with:)[dbname]: Database name (required)
Example Connection URLs
Creating a Database
Using PostgreSQL CLI
Using createdb Command
Medusa can automatically create the database on first run if it doesn’t exist and the user has create privileges.
Database Configuration
Basic Configuration
medusa-config.ts
Advanced Configuration
medusa-config.ts
Connection Pool Sizing
Recommended pool sizes based on your deployment:- Development:
min: 2, max: 5 - Production (single instance):
min: 2, max: 10 - Production (multiple instances):
min: 2, max: 5per instance
SSL Configuration
For production databases, enable SSL:disable: No SSLrequire: SSL required, but don’t verify certificateverify-ca: Verify server certificate against CAverify-full: Verify certificate and hostname
Database Migrations
Migrations ensure your database schema is up-to-date with your Medusa version and modules.Running Migrations
Before starting your application, run migrations:- Creates the database if it doesn’t exist
- Creates the migrations table
- Runs all pending module migrations
- Synchronizes link definitions between modules
- Executes migration scripts
Migration Options
Migration Process
Medusa uses MikroORM for migrations. The migration process:- Module Migrations: Each module maintains its own migrations
- Link Synchronization: Creates join tables for module relationships
- Migration Scripts: Custom data transformations and updates
Checking Migration Status
Migrations are tracked in themikro_orm_migrations table:
Database Schemas
By default, Medusa uses thepublic schema. You can configure a custom schema:
medusa-config.ts
Database Backup and Restore
Backup Database
Restore Database
Always test your backup and restore process before you need it in production.
Performance Optimization
Indexes
Medusa automatically creates necessary indexes through migrations. For custom optimizations:Connection Pooling
Use connection pooling for better performance:medusa-config.ts
Query Performance
Monitor slow queries:Troubleshooting
Connection Refused
- Check if PostgreSQL is running:
sudo systemctl status postgresql - Verify the host and port in
DATABASE_URL - Check firewall rules
Authentication Failed
- Verify username and password in
DATABASE_URL - Check
pg_hba.conffor authentication settings - Reset user password if needed
Database Does Not Exist
- Create the database manually
- Ensure the user has create privileges for auto-creation
- Check the database name in
DATABASE_URL
Too Many Connections
- Reduce connection pool size in
databaseDriverOptions - Increase PostgreSQL
max_connectionssetting - Use a connection pooler like PgBouncer
Migration Failures
- Check PostgreSQL logs for details
- Ensure user has necessary privileges
- Verify no concurrent migration processes
- Check for conflicting data or constraints
Production Best Practices
Security
- Use strong passwords: Generate random, complex passwords
- Limit privileges: Grant only necessary permissions
- Enable SSL: Use SSL for all connections
- Network isolation: Use private networks or VPNs
- Regular backups: Automate daily backups
Monitoring
- Connection count: Monitor active connections
- Query performance: Track slow queries
- Disk usage: Monitor database size
- Replication lag: If using replication
Maintenance
Schedule regular VACUUM and ANALYZE operations during low-traffic periods to maintain optimal performance.
Multiple Database Support
Medusa supports module-specific databases:medusa-config.ts