To nie jest błąd
Przynajmniej nie w twoim kodzie. To błąd w twoim procesie . Kierownik projektu powinien bardziej martwić się procesem niż kodem.
Jak sobie z tym radzisz?
Po prostu, nie pozwalając inżynierom zmieniać produkcji lub współużytkowanych baz danych programowania .
Zakładając, że jest to wspólna baza danych programowania:
Najlepiej, jeśli to w ogóle możliwe, przede wszystkim unikaj posiadania wspólnej bazy danych . Zamiast tego mają krótkotrwałe bazy danych dla programistów. Powinno to zostać zautomatyzowane za pomocą skryptów, w przeciwnym razie koszt testowania stanie się zbyt duży, a zachęta do nie testowania rzeczy. Możesz mieć te bazy danych na stacji roboczej dewelopera lub na centralnym serwerze.
Jeśli z jakiegoś powodu absolutnie MUSISZ mieć współużytkowaną bazę danych, powinieneś używać urządzeń - w zasadzie czegoś, co ustawia bazę danych w dobrze znany stan za każdym razem, gdy musisz z niej korzystać. Zapobiega to ugryzieniu programistów przez zmiany innych osób.
Jeśli chcesz zastosować trwałe zmiany w bazie danych, powinieneś je zatwierdzić pod kontrolą źródła . Skonfiguruj bazę danych w taki sposób, aby deweloperzy nie mieli uprawnień do pisania bezpośrednio do niej, i mieć program, który pobiera zmiany z kontroli źródła i stosuje je.
Wreszcie z opisu sposobu debugowania rzeczy wynika, że nie używasz CI . Użyj CI . Jest to trochę kłopotliwe w konfiguracji, ale na dłuższą metę pozwoli zaoszczędzić TAK dużo czasu, nie wspominając już o powstrzymaniu cię od martwienia się o nie powtarzalne błędy bazy danych. Teraz będziesz musiał się tylko martwić o heisenbugs !
Zakładając, że jest to produkcyjna baza danych:
Jeśli twoi twórcy zmieniają produkcyjne bazy danych, wiele rzeczy poszło strasznie źle, nawet jeśli zmiany są absolutnie poprawne.
Programiści nigdy nie powinni uzyskiwać dostępu do baz danych produkcji . Nie ma absolutnie żadnego powodu, a tak wiele rzeczy może pójść bardzo źle.
Jeśli chcesz naprawić coś w produkcyjnej bazie danych, najpierw wykonaj kopię zapasową, przywróć tę kopię zapasową w innej instancji (programistycznej), a następnie obejrzyj tę programistyczną bazę danych. Gdy uważasz, że masz gotową poprawkę (na kontroli źródła!), Ponownie wykonaj przywracanie, zastosuj poprawkę i zobacz wynik. Następnie, po ponownym utworzeniu kopii zapasowej (i idealnie zapobiegając jednoczesnym aktualizacjom), naprawiasz instancję produkcyjną, najlepiej za pomocą poprawki oprogramowania.
Jeśli musisz coś przetestować w produkcyjnej bazie danych ... nie, nie musisz. Niezależnie od tego, jakie testy musisz wykonać, powinieneś je wykonać w instancji programistycznej. Jeśli potrzebujesz danych do przeprowadzenia testów, znajdziesz je tam.