102 lines
3.7 KiB
Markdown
102 lines
3.7 KiB
Markdown
|
|
# Исправление проблемы с миграцией
|
|||
|
|
|
|||
|
|
## 🚨 Проблема
|
|||
|
|
Ошибка: `column "created_at" of relation "city_objects" does not exist`
|
|||
|
|
|
|||
|
|
## 🔧 Решения (по порядку приоритета):
|
|||
|
|
|
|||
|
|
### **Решение 1: Минимальная миграция**
|
|||
|
|
```bash
|
|||
|
|
node run-minimal-migration.js
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### **Решение 2: Прямое создание таблицы**
|
|||
|
|
1. Откройте pgAdmin или подключитесь к БД через psql
|
|||
|
|
2. Выполните SQL из файла `create-table-direct.sql`
|
|||
|
|
3. Или скопируйте и выполните этот код:
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
DROP TABLE IF EXISTS city_objects CASCADE;
|
|||
|
|
|
|||
|
|
CREATE TABLE city_objects (
|
|||
|
|
id SERIAL PRIMARY KEY,
|
|||
|
|
city_id INTEGER NOT NULL,
|
|||
|
|
name VARCHAR(255) NOT NULL DEFAULT '',
|
|||
|
|
model_url VARCHAR(500) NOT NULL,
|
|||
|
|
pos_x DECIMAL(15, 6) NOT NULL DEFAULT 0,
|
|||
|
|
pos_y DECIMAL(15, 6) NOT NULL DEFAULT 0,
|
|||
|
|
pos_z DECIMAL(15, 6) NOT NULL DEFAULT 0,
|
|||
|
|
rot_x DECIMAL(15, 6) NOT NULL DEFAULT 0,
|
|||
|
|
rot_y DECIMAL(15, 6) NOT NULL DEFAULT 0,
|
|||
|
|
rot_z DECIMAL(15, 6) NOT NULL DEFAULT 0,
|
|||
|
|
scale_x DECIMAL(15, 6) NOT NULL DEFAULT 1,
|
|||
|
|
scale_y DECIMAL(15, 6) NOT NULL DEFAULT 1,
|
|||
|
|
scale_z DECIMAL(15, 6) NOT NULL DEFAULT 1,
|
|||
|
|
organization_id INTEGER NOT NULL DEFAULT 2,
|
|||
|
|
rent DECIMAL(10, 2) NOT NULL DEFAULT 0,
|
|||
|
|
tax DECIMAL(10, 2) NOT NULL DEFAULT 0,
|
|||
|
|
collidable BOOLEAN NOT NULL DEFAULT false,
|
|||
|
|
interior_id INTEGER NOT NULL DEFAULT 101,
|
|||
|
|
textures VARCHAR(500) NOT NULL DEFAULT '-'
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
CREATE INDEX idx_city_objects_city_id ON city_objects(city_id);
|
|||
|
|
CREATE INDEX idx_city_objects_organization_id ON city_objects(organization_id);
|
|||
|
|
CREATE INDEX idx_city_objects_interior_id ON city_objects(interior_id);
|
|||
|
|
CREATE INDEX idx_city_objects_position ON city_objects(pos_x, pos_y, pos_z);
|
|||
|
|
CREATE INDEX idx_city_objects_collidable ON city_objects(collidable);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### **Решение 3: Проверка через редактор**
|
|||
|
|
1. Откройте редактор карт
|
|||
|
|
2. Нажмите кнопку "Проверить БД"
|
|||
|
|
3. Если таблица существует, проблема решена
|
|||
|
|
|
|||
|
|
## ✅ После создания таблицы:
|
|||
|
|
|
|||
|
|
1. **Перезапустите сервер:**
|
|||
|
|
```bash
|
|||
|
|
npm start
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **Проверьте работу редактора:**
|
|||
|
|
- Откройте редактор карт
|
|||
|
|
- Попробуйте добавить объект
|
|||
|
|
- Проверьте сохранение в БД
|
|||
|
|
|
|||
|
|
## 🔍 Диагностика:
|
|||
|
|
|
|||
|
|
### **Проверка таблицы:**
|
|||
|
|
```sql
|
|||
|
|
SELECT table_name, column_name, data_type
|
|||
|
|
FROM information_schema.columns
|
|||
|
|
WHERE table_name = 'city_objects'
|
|||
|
|
ORDER BY ordinal_position;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### **Проверка записей:**
|
|||
|
|
```sql
|
|||
|
|
SELECT COUNT(*) FROM city_objects;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 📋 Структура таблицы:
|
|||
|
|
|
|||
|
|
| Колонка | Тип | Описание |
|
|||
|
|
|---------|-----|----------|
|
|||
|
|
| id | SERIAL | Primary Key |
|
|||
|
|
| city_id | INTEGER | ID города |
|
|||
|
|
| name | VARCHAR(255) | Название объекта |
|
|||
|
|
| model_url | VARCHAR(500) | URL модели |
|
|||
|
|
| pos_x, pos_y, pos_z | DECIMAL(15,6) | Координаты |
|
|||
|
|
| rot_x, rot_y, rot_z | DECIMAL(15,6) | Поворот |
|
|||
|
|
| scale_x, scale_y, scale_z | DECIMAL(15,6) | Масштаб |
|
|||
|
|
| organization_id | INTEGER | ID организации |
|
|||
|
|
| rent | DECIMAL(10,2) | Аренда |
|
|||
|
|
| tax | DECIMAL(10,2) | Налог |
|
|||
|
|
| collidable | BOOLEAN | Коллизия |
|
|||
|
|
| interior_id | INTEGER | ID интерьера |
|
|||
|
|
| textures | VARCHAR(500) | Текстуры |
|
|||
|
|
|
|||
|
|
## 🎯 Результат:
|
|||
|
|
После выполнения любого из решений редактор карт должен работать корректно с сохранением в БД.
|