
Extrae una porción de tu base de datos de producción para reproducir errores localmente. Apunta dbslice a un registro, sigue las claves foráneas y te proporciona un subconjunto completo e importable.
Extrae subconjuntos mínimos de bases de datos, referencialmente íntegros, para desarrollo local y depuración.
Copiar una base de datos de producción completa a tu máquina es inviable. Pero reproducir un error a menudo requiere tener los datos exactos que lo causaron. dbslice resuelve esto extrayendo solo los registros que necesitas, siguiendo las relaciones de clave foránea para garantizar la integridad referencial.
# Instalación global
uv tool install dbslice # o: pip install dbslice
# Extrae un pedido y todos los registros relacionados
dbslice extract postgres://localhost/myapp --seed "orders.id=12345" > subset.sql
# Importa en la base de datos local
psql -d localdb < subset.sql
| Base de datos | Estado |
|---|---|
| PostgreSQL | Compatibilidad total |
| MySQL | Planificado (aún no implementado) |
| SQLite | Planificado (aún no implementado) |
# Instalar con uv (recomendado)
uv add dbslice
# Probar sin instalar
uvx dbslice --help
# O con pip
pip install dbslice
# Extraer por clave primaria
dbslice extract postgres://user:pass@host:5432/db --seed "orders.id=12345"
# Extraer con cláusula WHERE
dbslice extract postgres://localhost/db --seed "orders:status='failed' AND created_at > '2024-01-01'"
# Múltiples semillas
dbslice extract postgres://localhost/db \
--seed "orders.id=100" \
--seed "orders.id=101"
# Limitar profundidad (por defecto: 3)
dbslice extract postgres://... --seed "orders.id=1" --depth 2
# Dirección: up (solo padres), down (solo hijos), both (por defecto)
dbslice extract postgres://... --seed "orders.id=1" --direction up
# Anonimizar automáticamente campos sensibles detectados
dbslice extract postgres://... --seed "users.id=1" --anonymize
# Enmascarar campos adicionales
dbslice extract postgres://... --seed "users.id=1" --anonymize --redact "audit_logs.ip_address"
Mapea columnas visualmente, aplica perfiles de cumplimiento y genera una configuración lista para usar, todo desde una interfaz web local.
dbslice map postgres://localhost/myapp
# Puerto personalizado
dbslice map postgres://localhost/myapp --port 8888
# También funciona con uvx (sin instalación)
uvx dbslice map postgres://localhost/myapp
| Mapea columnas a reglas de anonimización | Genera y exporta configuración |
![]() |
![]() |
Se ejecuta en 127.0.0.1:9473 con un token de sesión de un solo uso — ningún dato sale de tu máquina. Aplica perfiles GDPR, HIPAA o PCI-DSS con un clic, revisa qué se enmascara y luego descarga el YAML.
# HIPAA Safe Harbor — enmascara automáticamente los 18 tipos de identificadores
dbslice extract postgres://... --seed "patients.id=1" --compliance hipaa --compliance-strict
# Múltiples perfiles + manifiesto de auditoría
dbslice extract postgres://... --seed "users.id=1" --compliance gdpr --compliance pci-dss -f subset.sql
# Produce subset.sql + subset.manifest.json
# SQL (por defecto)
dbslice extract postgres://... --seed "orders.id=1" --output sql
# Fixtures JSON
dbslice extract postgres://... --seed "orders.id=1" --output json --out-file fixtures/
# CSV
dbslice extract postgres://... --seed "orders.id=1" --output csv --out-file data/
Para relaciones no definidas en el esquema de la base de datos (GenericForeignKeys de Django, relaciones implícitas):
# dbslice.yaml
database:
url: postgres://localhost:5432/myapp
virtual_foreign_keys:
- source_table: notifications
source_columns: [object_id]
target_table: orders
description: "FK genérica a pedidos mediante ContentType"
- source_table: audit_log
source_columns: [user_id]
target_table: users
description: "FK implícita sin restricción en BD"
dbslice extract --config dbslice.yaml --seed "users.id=1"
dbslice inspect postgres://localhost/myapp
# Generar configuración desde la base de datos
dbslice init postgres://localhost/myapp --out-file dbslice.yaml
# Usar configuración
dbslice extract --config dbslice.yaml --seed "orders.id=12345"