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. Проверьте логи в консоли браузера и сервера
|