Mam system stojący na całkiem rozbudowanej bazie danych. Ostatnio baza była przenoszona na inny serwer i pojawiły się błędy. Błąd jak błąd - przy wykonywaniu zapytania składającego się z trzech SELECTów połączonych przez UNION pojawiło się:
Duplicate entry '12694' for key 'group_key'. Kod bledu: 1582. Nie brzmi nadzwyczajnie - wszystko wskazywało na to, że któraś z krotek zdublowała się podczas importu.
Dziwną rzeczą było jedynie to, że nigdzie nie był zadeklarowany klucz o nazwie 'group_key', a żadna krotka zawierająca '12694' zdublowana nie była. Mało tego, wszystkie SELECTy składowe wykonywały się całkowicie poprawnie. Gdzie więc tkwił błąd?
Okazało się że na nowo postawionym serwerze pod /tmp podmontowana była szesnastomegabajtowa partycja. Tabele tymczasowe (wyniki składowych SELECTów) ulegały uszkodzeniu, MySQL nie komunikował błędu zapisu (!) i powstawał błąd. Jeszcze później wyszło, że uszkodzeniu ulegał dokładnie plik indeksu - stąd błąd klucza. Zastanawiam się nad zgłoszeniem tego do autorów jako błędu serwera baz danych.
Jako bonus - kawałek kodu PHP pamiętający pierwszego autora serwisu, a wyglądający jak wyjęty żywcem z The Daily WTF!.
function setPartner()
{
$this->on = true;
$this->on = false;
}
W pliku, w którym znalazłem ten kwiatek, wszystkie odwołania do tej zmiennej były realizowane w ten sposób. Autor prawdopodobnie chciał ustawić zmienną w stan superpozycji.