Saltar a contenido

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

  1. Descarga el instalador desde postgresql.org
  2. Ejecuta el instalador y sigue el asistente
  3. Anota el usuario (por defecto: postgres) y la contraseña que establezcas
  4. El puerto por defecto es 5432

macOS

Usando Homebrew:

brew install postgresql@12
brew services start postgresql@12

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

psql -U postgres
psql postgres

2. Crear la Base de Datos

Una vez dentro del shell de PostgreSQL:

-- Crear la base de datos
CREATE DATABASE sistema_a3;

-- Verificar que se creó
\l

-- Salir
\q

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:

Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying users.0001_initial... OK
  ...

3. Crear Superusuario

Para acceder al panel de administración de Django:

python manage.py createsuperuser

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:

# Cargar datos de ejemplo
python manage.py loaddata nombre_del_fixture.json

Verificar la Conexión

Para verificar que Django puede conectarse correctamente a la base de datos:

python manage.py shell
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:

python manage.py runserver

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:

psql -U postgres -d sistema_a3 -h localhost

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
2. Verifica que el puerto 5432 no esté bloqueado

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:

DATABASES = {
    'default': {
        'CONN_MAX_AGE': 600,  # 10 minutos
    }
}

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:

  1. Despliegue: Aprende cómo hacer deploy en Heroku
  2. Arquitectura: Entiende la estructura de las apps Django
  3. Modelos: Explora los modelos de datos

¿Base de datos lista? ¡El sistema debería estar funcionando! Ejecuta python manage.py runserver para probarlo.