QAUP_Management/doc/work/数据库合并执行指南_20250115.md

180 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 数据库合并执行指南
## 概述
本指南帮助您将CollisionAvoidanceSystem的空间数据表安全地合并到QAUP-Management数据库中。
## 前提条件
- PostgreSQL 13+ 数据库
- 具有管理员权限的数据库用户
- QAUP-Management项目已正常运行
## 执行步骤
### 步骤1数据库备份必须
```bash
# 备份QAUP数据库
pg_dump -h localhost -U your_username -d qaup > backup_$(date +%Y%m%d_%H%M%S).sql
```
### 步骤2连接数据库
```bash
# 连接到QAUP数据库
psql -h localhost -U your_username -d qaup
```
### 步骤3执行迁移脚本
```sql
-- 在psql命令行中执行
\i sql/unified_database_migration.sql
```
### 步骤4验证结果
执行脚本后,您应该看到以下输出:
```
==============================================
数据库迁移完成!
已成功合并CollisionAvoidanceSystem的空间数据表到QAUP-Management数据库
新增表vehicle_locations, airport_areas, vehicle_trajectories, spatial_rules, rule_violation_events
新增视图vehicle_complete_info, vehicle_status_summary
已启用PostGIS扩展支持空间数据操作
==============================================
```
### 步骤5功能测试
```sql
-- 1. 测试PostGIS功能
SELECT PostGIS_Version();
-- 2. 检查新表
\dt vehicle_*
\dt airport_*
\dt spatial_*
-- 3. 测试空间查询
SELECT area_id, name, ST_AsText(boundary)
FROM airport_areas
LIMIT 1;
-- 4. 测试业务视图
SELECT * FROM vehicle_complete_info LIMIT 5;
```
## 合并后的数据库结构
### 原有表QAUP-Management
- `sys_vehicle_info` - 车辆基础信息
- `sys_driver_info` - 驾驶员信息
- `sys_vehicle_type` - 车辆类型
### 新增表来自CollisionAvoidanceSystem
- `vehicle_locations` - 车辆实时位置支持PostGIS空间查询
- `airport_areas` - 机场区域空间数据
- `vehicle_trajectories` - 车辆历史轨迹
- `spatial_rules` - 空间安全规则引擎
- `rule_violation_events` - 规则违反事件记录
### 新增视图
- `vehicle_complete_info` - 车辆完整信息(基础信息+最新位置)
- `vehicle_status_summary` - 车辆实时状态统计
## 数据关联关系
车辆信息通过`vehicle_id`字段关联:
```sql
-- 基础信息表sys_vehicle_info.vehicle_id (bigint)
-- 位置数据表vehicle_locations.vehicle_id (varchar)
-- 关联方式:通过类型转换进行关联
```
## 常用查询示例
### 1. 查询车辆完整信息
```sql
SELECT
license_plate_number,
brand,
owning_unit,
speed,
ST_AsText(location) as current_position,
last_location_time
FROM vehicle_complete_info
WHERE license_plate_number = '京A12345';
```
### 2. 查询区域内的车辆
```sql
SELECT vl.vehicle_id, vl.speed, ST_AsText(vl.location)
FROM vehicle_locations vl
JOIN airport_areas aa ON ST_Within(vl.location, aa.boundary)
WHERE aa.area_id = 'RUNWAY_01'
AND vl.timestamp > NOW() - INTERVAL '10 minutes';
```
### 3. 查询规则违反事件
```sql
SELECT
event_id,
rule_id,
subject_id,
violation_type,
severity,
ST_AsText(location) as violation_location,
detected_at
FROM rule_violation_events
WHERE detected_at > NOW() - INTERVAL '1 hour'
ORDER BY detected_at DESC;
```
## 注意事项
1. **数据类型差异**原QAUP的`vehicle_id`是bigint新表中是varchar通过视图进行类型转换关联
2. **空间坐标系**所有空间数据使用WGS84坐标系SRID: 4326
3. **性能优化**已创建适当的空间索引GIST和常规索引
4. **时区处理**:新表使用`TIMESTAMP WITH TIME ZONE`,注意时区一致性
## 故障排除
### 问题1PostGIS扩展安装失败
```sql
-- 检查PostgreSQL版本和PostGIS可用性
SELECT version();
SELECT name, default_version FROM pg_available_extensions WHERE name = 'postgis';
```
### 问题2权限不足
确保数据库用户具有以下权限:
- CREATE EXTENSION
- CREATE TABLE
- CREATE INDEX
- CREATE TRIGGER
### 问题3表已存在
脚本使用`CREATE TABLE IF NOT EXISTS`,可以安全重复执行。
## 回滚方案
如果需要回滚,执行以下脚本:
```sql
-- 删除新增的表和视图
DROP VIEW IF EXISTS vehicle_complete_info;
DROP VIEW IF EXISTS vehicle_status_summary;
DROP TABLE IF EXISTS rule_violation_events;
DROP TABLE IF EXISTS spatial_rules;
DROP TABLE IF EXISTS vehicle_trajectories;
DROP TABLE IF EXISTS airport_areas;
DROP TABLE IF EXISTS vehicle_locations;
-- 可选移除PostGIS扩展谨慎操作
-- DROP EXTENSION IF EXISTS postgis CASCADE;
```
## 技术支持
如遇问题,请检查:
1. PostgreSQL日志文件
2. 数据库连接参数
3. 用户权限设置
4. PostGIS扩展安装状态