Это не ошибка
По крайней мере, не в вашем коде. Это ошибка в вашем процессе . Ваш менеджер проекта должен быть гораздо более обеспокоен вашим процессом, чем вашим кодом.
Как вы справляетесь с этим?
Проще говоря, не позволяя инженерам изменять производственные или общие базы данных для разработки .
Предполагая, что это общая база данных разработки:
В идеале, если это вообще возможно, избегать общей базы данных . Вместо этого имейте базы данных для разработчика, которые являются недолговечными. Это должно быть автоматизировано с помощью сценариев, в противном случае стоимость тестирования становится слишком большой, и есть стимул не тестировать вещи. Вы можете иметь эти базы данных либо на рабочей станции разработчика, либо на центральном сервере.
Если по какой-то причине вам абсолютно НЕОБХОДИМО иметь общую базу данных, вам следует использовать фиксаторы - по сути, то, что устанавливает базу данных в известное исправное состояние каждый раз, когда вам нужно ее использовать. Это позволяет избежать укусов разработчиков от изменений других людей.
Если вам нужно применить постоянные изменения к базе данных, вы должны зафиксировать их в вашем контроле исходного кода . Настройте свою базу данных таким образом, чтобы разработчики не имели разрешения на запись в нее напрямую, а также имели программу, которая извлекает изменения из системы контроля версий и применяет их.
Наконец, из вашего описания того, как вы отлаживаете вещи, похоже, что вы не используете CI . Используйте CI . Это немного затрудняет настройку, но в долгосрочной перспективе это сэкономит ОЧЕНЬ много времени, не говоря уже о том, чтобы помешать вам беспокоиться о невоспроизводимых ошибках базы данных. Вам останется только беспокоиться о heisenbugs сейчас!
Предполагая, что это производственная база данных:
Если ваши разработчики меняют производственные базы данных, многие вещи идут ужасно неправильно, даже если изменения абсолютно правильные.
Разработчики никогда не должны получать доступ к производственным базам данных . Там нет абсолютно никаких причин, и так много вещей, которые могут пойти очень- очень неправильно.
Если вам нужно что-то исправить в производственной базе данных, сначала создайте резервную копию, восстановите ее в другом (разрабатываемом) экземпляре, а затем поэкспериментируйте с этой базой данных разработки. Как только вы решите, что у вас есть готовое исправление (с контролем исходного кода!), Вы снова делаете восстановление, применяете исправление и видите результат. Затем, после резервного копирования данных (и, в идеале, предотвращения одновременных обновлений), вы исправляете производственный экземпляр, в идеале с помощью программного патча.
Если вам нужно что-то проверить в производственной базе данных ... нет, нет. Какие бы тесты вам ни понадобилось, вы должны делать их в экземпляре разработки. Если вам нужны данные для проведения тестов, вы получите эти данные там.