Базы и файлы данных

DBReduce

От дампа рабочей базы к отчёту об ошибке, который можно приложить. Сократить базу PostgreSQL до нескольких строк и таблиц, на которых тест по-прежнему падает.

Релиз
v0.5.1, 31 окт. 2026 г.
Где работает
Python 3.10–3.15; PostgreSQL 13–18 с подходящими pg_dump, pg_restore и psql
Лицензия
Apache-2.0

Как это выглядит

dbreduce reduce \
  --database postgresql://localhost/app_bug \
  --oracle 'uv run pytest tests/test_checkout.py::test_negative_total' \
  --match-stdout 'AssertionError: negative total' \
  --confirm 3
Пример из README: проверяющая команда pytest с отбором по сообщению assertion и тройным подтверждением. Записываются dbreduce.min.sql и dbreduce-report.json; существующие файлы не перезаписываются.
Wagtail #9208
Rows:             150,706 -> 3
Tables:           48 -> 1
Failure identity: preserved
Fresh SQL restore: PASS
Результат из отчёта проверки проекта на практике: пример ошибки Wagtail уменьшен на PostgreSQL 17 проверяющей командой приложения с дополнительным сокращением схемы.

Что делает

Укажите DBReduce базу PostgreSQL и команду, которая завершается с ошибкой из-за дефекта. Программа удаляет строки с учётом внешних ключей и заданных вами связей, сохраняя только варианты с той же ошибкой. При необходимости она удаляет и целые таблицы. Результат — небольшой SQL-файл, воспроизводящий дефект.

Для кого

  • Разработчикам, которым нужен минимальный пример ошибки, зависящей от данных.
  • Сопровождающим проекты, которым сообщают об ошибках, возникающих только на чужой базе.

Ограничения

  • Проверяющая команда работает с временной копией, но SQL-функции, триггеры и внешние сервисы всё ещё могут иметь побочные эффекты. Используйте доверенные команды и дампы.
  • Нужна роль базы данных с CREATEDB.
  • DBReduce не обещает глобальный минимум; отчёт сообщает, когда нельзя утверждать локальную несократимость.

Типичные сценарии

Уменьшить пример с ошибкой

Укажите копию базы и тестовую команду. Опознавайте нужную ошибку по выводу или результату JSON, чтобы посторонний сбой не засчитался.

Передать пример для воспроизведения

На выходе получаются dbreduce.min.sql и отчёт с количеством строк и временем выполнения, без исходного вывода теста.

Установка

Последний стабильный релиз v0.5.1, опубликован 31 окт. 2026 г.. Примечания к релизу для v0.5.1. Данные о релизах проверены 2 нояб. 2026 г. по GitHub Releases.

Установка из PyPI

uv tool install dbreduce

Страница пакета: pypi.org/project/dbreduce/

Первый запуск

  1. Установите консольную программу отдельно:

    uv tool install dbreduce
    dbreduce --help
  2. Убедитесь, что тест получает URL базы из DATABASE_URL или DBREDUCE_DATABASE_URL.

  3. Запустите dbreduce reduce с условием, опознающим нужную ошибку, и приложите dbreduce.min.sql к сообщению об ошибке.

Платформы и как они проверены

  • PostgreSQL 13–18Собирается и проходит автоматические проверки в CI

    По умолчанию используется изоляция снимком; экспериментальный режим клонирования требует PostgreSQL 15+.

  • Python 3.10–3.15Собирается и проходит автоматические проверки в CI

    Устанавливается как отдельная программа; приложение может быть написано на любом языке.

Вопросы и сообщения об ошибках — в трекер задач проекта. О проблемах безопасности сообщайте так, как описано в его политике безопасности.