
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"
| Característica | dbslice | Jailer | Greenmask | slice-db |
|---|---|---|---|---|
| Lenguaje | Python | Java | Go | Ruby |
| Configuración | Sin configuración | Requiere archivo de modelo | Configuración requerida | YAML manual |
| Tiempo de configuración | Segundos | Horas | Medio | Medio |
| Anonimización | Integrada (Faker) | Basada en plugins | Transformadores avanzados | No disponible |
| Perfiles de cumplimiento | GDPR, HIPAA, PCI-DSS | Ninguno | Ninguno | Ninguno |
| Interfaz de mapeo de columnas | Integrada (local) | Ninguna | Ninguna | Ninguna |
| Escaneo de valores PII | Dos fases (pre/post máscara) | Ninguno | Ninguno | Ninguno |
| Subconjunto | Recorrido FK | Recorrido FK | Limitado | Recorrido FK |
| Formatos de salida | SQL, JSON, CSV | SQL, XML, CSV | SQL | Solo SQL |
| Manejo de ciclos | Automático | Configuración manual | N/A | Manual |
| Streaming | Integrado | Configurable | Integrado | No disponible |
| Mantenimiento | Activo | Activo | Activo | Sin mantenimiento |
dbslice es la opción ligera y sin configuración en Python: instala y extrae en menos de un minuto.
git clone https://github.com/nabroleonx/dbslice.git
cd dbslice
uv sync --dev
uv run pytest
MIT