Files
rltn/DUPLICATE_KEY_FIX.md

3.0 KiB
Raw Permalink Blame History

Исправление ошибки дублирования ключей

🚨 Проблема

Ошибка: duplicate key value violates unique constraint "city_objects_pkey"

  • Объекты загружаются из БД с существующими ID
  • При сохранении пытаемся создать объекты с теми же ID
  • Это вызывает конфликт первичных ключей

Решение

1. Исправлена логика на клиенте:

  • Если у объекта есть ID → обновляем существующий
  • Если у объекта нет ID → создаем новый
  • Добавлено логирование для отладки

2. Исправлена логика на сервере:

  • Проверка if (id && id !== null && id !== undefined)
  • Если ID есть → UPDATE (обновление)
  • Если ID нет → INSERT (создание)
  • Добавлено подробное логирование

🔧 Как это работает:

Для существующих объектов:

  1. Объект загружается из БД с ID (например, 110)
  2. Пользователь редактирует объект
  3. При сохранении отправляется ID = 110
  4. Сервер выполняет UPDATE для ID = 110
  5. Объект обновлен

Для новых объектов:

  1. Пользователь добавляет новый объект
  2. У объекта нет ID (null)
  3. При сохранении отправляется ID = null
  4. Сервер выполняет INSERT без указания ID
  5. Новый объект создан с автоматическим ID

📋 Логи для отладки:

В консоли браузера:

🔄 Начинаем сохранение объекта в БД...
📝 Обновляем объект: Название объекта
📤 Отправляем данные на сервер: { id: 110, ... }
📡 Ответ сервера: 200 OK
✅ Объект успешно сохранен в БД: { id: 110, success: true }

В консоли сервера:

🔄 Обновляем существующий объект с ID: 110
✅ Объект обновлен: { id: 110 }

🎯 Результат:

  • Существующие объекты обновляются
  • Новые объекты создаются
  • Нет конфликтов первичных ключей
  • Все операции логируются для отладки

🔍 Проверка:

  1. Добавьте объект → нажмите "Сохранить"
  2. Отредактируйте объект → нажмите "Сохранить"
  3. Перезагрузите страницу → объекты должны загрузиться
  4. Проверьте логи в консоли браузера и сервера