Сегодня утром немножко сломался скриптик, импортирующий в базу записи, приезжающие от партнёра. Скриптик рабочий, трудится уже много месяцев. Да и сломался он не совсем – не может добавить в таблицу некоторые отдельные записи. Остальные успешно добавляет, а эти никак.
Попытался вручную – натурально не добавляется. “Unique constraint (foo.bar) violated, пошли все нафиг” – говорит сервер. Ищу запись по ID – нет такой. Внимательно приглядываюсь к описанию violated constraint и обнаруживаю, что это про уникальность имени, а не ID. Ищу запись по такому имени – а её тоже нет. Но новая не добавляется. Чертовщина какая-то.
А разгадка оказалась проста. Можно предлагать в качестве задания на собеседовании DBA :)
Имя оказалось длиннее, чем колонка в таблице. И при попытке добавления благополучно обрезалось, а в обрезанном виде оно в базе уже было, и новая запись не добавлялась. А при поиске данные из базы сравнивались с полным именем, и естественно, такого имени не находилось.