Base de Datos¶
El Sistema A3 utiliza PostgreSQL 12.3+ como sistema de gestión de base de datos. Esta guía te ayudará a configurar la base de datos para desarrollo local.
Instalación de PostgreSQL¶
Windows¶
- Descarga el instalador desde postgresql.org
- Ejecuta el instalador y sigue el asistente
- Anota el usuario (por defecto:
postgres) y la contraseña que establezcas - El puerto por defecto es
5432
macOS¶
Usando Homebrew:
Linux (Ubuntu/Debian)¶
sudo apt-get update
sudo apt-get install postgresql-12 postgresql-contrib
sudo systemctl start postgresql
sudo systemctl enable postgresql
Crear la Base de Datos¶
1. Acceder a PostgreSQL¶
2. Crear la Base de Datos¶
Una vez dentro del shell de PostgreSQL:
3. Crear un Usuario (Opcional)¶
Si prefieres usar un usuario específico en lugar de postgres:
-- Crear usuario
CREATE USER usuario_a3 WITH PASSWORD 'password_seguro';
-- Dar permisos
GRANT ALL PRIVILEGES ON DATABASE sistema_a3 TO usuario_a3;
-- Hacer al usuario dueño de la base de datos
ALTER DATABASE sistema_a3 OWNER TO usuario_a3;
Configurar Django¶
1. Actualizar .env¶
Asegúrate de que tu archivo .env tenga la configuración correcta:
DB_NAME=sistema_a3
DB_USER=postgres # o el usuario que creaste
DB_PASSWORD=tu_contraseña
DB_HOST=localhost
DB_PORT=5432
2. Ejecutar Migraciones¶
Con el entorno virtual activado y las variables configuradas:
# Ver las migraciones disponibles
python manage.py showmigrations
# Ejecutar todas las migraciones
python manage.py migrate
Migraciones exitosas
Deberías ver algo como:
3. Crear Superusuario¶
Para acceder al panel de administración de Django:
Te pedirá:
- Username: Tu nombre de usuario (ej: admin)
- Email: Tu correo electrónico
- Password: Una contraseña segura
Panel de administración
Una vez creado, podrás acceder a /admin/ con estas credenciales.
Cargar Datos Iniciales (Opcional)¶
Si existen fixtures con datos de prueba:
Verificar la Conexión¶
Para verificar que Django puede conectarse correctamente a la base de datos:
from django.db import connection
# Intentar una consulta simple
cursor = connection.cursor()
cursor.execute("SELECT version();")
print(cursor.fetchone())
Ejecutar el Servidor¶
Si todo está configurado correctamente:
Deberías ver:
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
November 21, 2024 - 13:00:00
Django version 3.2, using settings 'a3ceros.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
Accede a: http://localhost:8000/
Comandos Útiles¶
Gestión de Migraciones¶
# Ver estado de migraciones
python manage.py showmigrations
# Crear nuevas migraciones después de cambios en modelos
python manage.py makemigrations
# Aplicar migraciones
python manage.py migrate
# Revertir a una migración específica
python manage.py migrate nombre_app 0001
# Ver SQL de una migración sin ejecutarla
python manage.py sqlmigrate nombre_app 0001
Gestión de Base de Datos¶
# Abrir shell de Django
python manage.py shell
# Abrir shell de base de datos
python manage.py dbshell
# Crear backup de la base de datos (PostgreSQL)
pg_dump -U postgres sistema_a3 > backup.sql
# Restaurar backup
psql -U postgres sistema_a3 < backup.sql
Estructura de la Base de Datos¶
El Sistema A3 tiene múltiples apps Django, cada una con sus tablas:
- auth: Autenticación y permisos
- users: Perfiles de usuario
- inventario: Casas y propiedades
- apartados: Ventas y apartados
- clientes: Clientes y prospectos
- tickets: Tickets y acuerdos
- comprobaciones: Gastos y provisiones
- ch: Recursos humanos
- anexos: Archivos adjuntos
- reportes: Reportes generados
- Y más...
Para ver el esquema completo, consulta la documentación de base de datos.
Problemas Comunes¶
Error: "FATAL: password authentication failed"¶
Solución: Verifica que el usuario y contraseña en .env sean correctos. Prueba conectarte directamente con psql:
Error: "django.db.utils.OperationalError: could not connect"¶
Solución: 1. Verifica que PostgreSQL esté corriendo:
# Windows
services.msc # Buscar PostgreSQL
# Linux
sudo systemctl status postgresql
# macOS
brew services list
Error: "FATAL: database 'sistema_a3' does not exist"¶
Solución: Crea la base de datos como se indica en la sección Crear la Base de Datos.
Error en migraciones¶
Solución: Si hay conflictos de migraciones:
# Ver migraciones en conflicto
python manage.py showmigrations
# Hacer una migración falsa (fake) si ya existe en BD
python manage.py migrate --fake nombre_app numero_migracion
Rendimiento y Optimización¶
Índices¶
Django crea automáticamente índices para:
- Claves primarias
- Foreign keys
- Campos con db_index=True
Conexiones Persistentes¶
En producción, se usan conexiones persistentes configuradas en settings.py:
Pooling de Conexiones¶
Para producción con alta carga, considera usar pgBouncer para pooling de conexiones.
Backup y Restauración¶
Backup Automático¶
Para backups automáticos en producción (Heroku):
# Crear backup
heroku pg:backups:capture --app aterceros
# Descargar backup
heroku pg:backups:download --app aterceros
# Programar backups automáticos
heroku pg:backups:schedule DATABASE_URL --at '02:00 America/Mexico_City' --app aterceros
Backup Local¶
# Backup completo
pg_dump -U postgres -F c sistema_a3 > backup_$(date +%Y%m%d).dump
# Restaurar
pg_restore -U postgres -d sistema_a3 backup_20241121.dump
Siguientes Pasos¶
Con la base de datos configurada:
- Despliegue: Aprende cómo hacer deploy en Heroku
- Arquitectura: Entiende la estructura de las apps Django
- Modelos: Explora los modelos de datos
¿Base de datos lista? ¡El sistema debería estar funcionando! Ejecuta python manage.py runserver para probarlo.