Inventario uses Django’s ORM with support for PostgreSQL in production and SQLite for development. Database configuration is managed through environment variables.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/margnes22/inventario-render/llms.txt
Use this file to discover all available pages before exploring further.
Database Configuration
PostgreSQL with dj-database-url
The database is configured usingdj-database-url for easy environment-based setup:
- Environment variable:
DATABASE_URL - Connection pooling:
conn_max_age=600(10 minutes) - Fallback: SQLite at
db.sqlite3ifDATABASE_URLnot set
Database URL Format
PostgreSQL connection string format:postgresql://- Database engineusername:password- Credentialshost:port- Database server locationdatabase_name- Database name
SQLite Fallback (Development)
WhenDATABASE_URL is not set, Inventario uses SQLite:
db.sqlite3 in project root
Database Setup
Development Setup
For local development with SQLite:Production Setup (PostgreSQL)
-
Provision PostgreSQL database
On Railway:
On Render:Manual setup:
-
Set environment variable
-
Run migrations
Migrations
Django migrations track database schema changes.Running Migrations
Apply pending migrations:build.sh script automatically runs migrations on deployment:
Creating Migrations
After changing models, create migrations:migrations/ directory.
Always commit migration files to version control. They ensure database schema stays in sync across environments.
Checking Migration Status
View applied and pending migrations:Rolling Back Migrations
Rollback to a specific migration:Database Applications
Inventario includes these database-backed applications:- applications.usuarios - User management
- applications.cuentas - Account management with custom user model
- applications.proveedores - Supplier records
- applications.productos - Product inventory
- applications.clientes - Customer records
- applications.ventas - Sales transactions
- applications.reportes - Report data
- applications.compras - Purchase orders
- applications.configuracion - System configuration
- applications.devoluciones - Return/refund records
Custom User Model
Inventario uses a custom user model:applications.cuentas.models and extends Django’s authentication.
Changing
AUTH_USER_MODEL after initial migrations is extremely difficult. This must be set before first migration.Connection Pooling
- Reduces connection overhead
- Improves response times
- Prevents connection exhaustion
- Database connection limits
- Application server count
- Expected concurrent users
max_connections / (workers * servers) ≈ 600 seconds
Database Backups
PostgreSQL Backups
Create a backup:DATABASE_URL:
Restore from Backup
Automated Backups
On Railway:- Configure automatic backups in Railway dashboard
- Backups are taken daily by default
- Enable automatic backups in database settings
- Choose retention period
Database Management
Django Database Shell
Open PostgreSQL shell through Django:DATABASE_URL automatically.
Inspecting the Database
View all tables:Django Shell
Interact with models in Python:Database Optimization
Indexing
Django automatically creates indexes for:- Primary keys
- Foreign keys
- Fields with
unique=True - Fields with
db_index=True
Query Optimization
Useselect_related() for foreign keys:
prefetch_related() for many-to-many:
Database Monitoring
Monitor these metrics:- Connection count
- Query execution time
- Slow queries
- Database size
- Index usage
Troubleshooting
”No such table” Error
Migrations haven’t been applied:Connection Refused
CheckDATABASE_URL is correct:
Authentication Failed
Verify credentials inDATABASE_URL:
- Username and password are correct
- User has access to the database
- Database exists
Too Many Connections
Reduceconn_max_age or increase PostgreSQL max_connections:
Migration Conflicts
If multiple developers create migrations simultaneously:Database Locked (SQLite)
SQLite locks the entire database for writes. Switch to PostgreSQL for production:Data Import/Export
Export Data (JSON)
Import Data
Migration from SQLite to PostgreSQL
To migrate from development SQLite to production PostgreSQL:-
Export data from SQLite
-
Configure PostgreSQL
-
Run migrations
-
Import data
-
Verify data