
Извлеките фрагмент вашей рабочей базы данных для локального воспроизведения ошибок. Укажите dbslice на запись, он проследует по внешним ключам и предоставит вам полное, готовое к импорту подмножество.
Извлекайте минимальные, сохраняющие ссылочную целостность подмножества базы данных для локальной разработки и отладки.
Копирование целой продукционной базы данных на вашу машину нецелесообразно. Но для воспроизведения ошибки часто требуются именно те данные, которые её вызвали. dbslice решает эту задачу, извлекая только необходимые записи и следуя внешним ключам для обеспечения ссылочной целостности.
# Установка глобально
uv tool install dbslice # или: pip install dbslice
# Извлечение заказа и всех связанных записей
dbslice extract postgres://localhost/myapp --seed "orders.id=12345" > subset.sql
# Импорт в локальную базу данных
psql -d localdb < subset.sql
| База данных | Статус |
|---|---|
| PostgreSQL | Полностью поддерживается |
| MySQL | Запланировано (ещё не реализовано) |
| SQLite | Запланировано (ещё не реализовано) |
# Установка с помощью uv (рекомендуется)
uv add dbslice
# Попробовать без установки
uvx dbslice --help
# Или с помощью pip
pip install dbslice
# Извлечение по первичному ключу
dbslice extract postgres://user:pass@host:5432/db --seed "orders.id=12345"
# Извлечение с условием WHERE
dbslice extract postgres://localhost/db --seed "orders:status='failed' AND created_at > '2024-01-01'"
# Несколько записей-затравок
dbslice extract postgres://localhost/db \
--seed "orders.id=100" \
--seed "orders.id=101"
# Ограничение глубины (по умолчанию: 3)
dbslice extract postgres://... --seed "orders.id=1" --depth 2
# Направление: up (только родители), down (только дочерние), both (по умолчанию)
dbslice extract postgres://... --seed "orders.id=1" --direction up
# Автоматическая анонимизация обнаруженных конфиденциальных полей
dbslice extract postgres://... --seed "users.id=1" --anonymize
# Редактирование дополнительных полей
dbslice extract postgres://... --seed "users.id=1" --anonymize --redact "audit_logs.ip_address"
Визуально сопоставьте столбцы, примените профили соответствия и сгенерируйте готовую к использованию конфигурацию — всё в локальном браузере.
dbslice map postgres://localhost/myapp
# Пользовательский порт
dbslice map postgres://localhost/myapp --port 8888
# Также работает с uvx (не требуется установка)
uvx dbslice map postgres://localhost/myapp
| Сопоставление столбцов с правилами анонимизации | Генерация и экспорт конфигурации |
![]() | ![]() |
Работает на 127.0.0.1:9473 с одноразовым токеном сессии — данные не покидают вашу машину. Примените профили GDPR, HIPAA или PCI-DSS одним кликом, просмотрите, что будет скрыто, затем скачайте YAML.
# HIPAA Safe Harbor — автоматически маскирует все 18 типов идентификаторов
dbslice extract postgres://... --seed "patients.id=1" --compliance hipaa --compliance-strict
# Несколько профилей + манифест аудита
dbslice extract postgres://... --seed "users.id=1" --compliance gdpr --compliance pci-dss -f subset.sql
# Создаёт subset.sql + subset.manifest.json
# SQL (по умолчанию)
dbslice extract postgres://... --seed "orders.id=1" --output sql
# 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/
Для связей, не определённых в схеме базы данных (Django GenericForeignKeys, неявные связи):
# dbslice.yaml
database:
url: postgres://localhost:5432/myapp
virtual_foreign_keys:
- source_table: notifications
source_columns: [object_id]
target_table: orders
description: "Generic FK to orders via ContentType"
- source_table: audit_log
source_columns: [user_id]
target_table: users
description: "Implicit FK without DB constraint"
dbslice extract --config dbslice.yaml --seed "users.id=1"
dbslice inspect postgres://localhost/myapp
# Генерация конфигурации из базы данных
dbslice init postgres://localhost/myapp --out-file dbslice.yaml
# Использование конфигурации
dbslice extract --config dbslice.yaml --seed "orders.id=12345"
dbslice — это лёгкий вариант на Python без конфигурации: установка и извлечение менее чем за минуту.
git clone https://github.com/nabroleonx/dbslice.git
cd dbslice
uv sync --dev
uv run pytest
MIT
| Характеристика | dbslice | Jailer | Greenmask | slice-db |
|---|
| Язык | Python | Java | Go | Ruby |
| Конфигурация | Без конфигурации | Требуется файл модели | Требуется конфигурация | YAML вручную |
| Время настройки | Секунды | Часы | Среднее | Среднее |
| Анонимизация | Встроенная (Faker) | На основе плагинов | Продвинутые преобразователи | Недоступно |
| Профили соответствия | GDPR, HIPAA, PCI-DSS | Нет | Нет | Нет |
| Графический интерфейс сопоставления столбцов | Встроенный (локальный) | Нет | Нет | Нет |
| Сканирование PII-значений | Двухфазное (до/после маскирования) | Нет | Нет | Нет |
| Подмножество | Обход FK | Обход FK | Ограничено | Обход FK |
| Форматы вывода | SQL, JSON, CSV | SQL, XML, CSV | SQL | Только SQL |
| Обработка циклов | Автоматическая | Ручная настройка | N/A | Вручную |
| Поточная обработка | Встроенная | Настраиваемая | Встроенная | Недоступно |
| Поддержка | Активная | Активная | Активная | Не поддерживается |