66 lines
3.0 KiB
Markdown
66 lines
3.0 KiB
Markdown
|
|
# Исправление ошибки дублирования ключей
|
|||
|
|
|
|||
|
|
## 🚨 Проблема
|
|||
|
|
Ошибка: `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. Проверьте логи в консоли браузера и сервера
|