180 lines
4.6 KiB
Markdown
180 lines
4.6 KiB
Markdown
# 数据库合并执行指南
|
||
|
||
## 概述
|
||
本指南帮助您将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`,注意时区一致性
|
||
|
||
## 故障排除
|
||
|
||
### 问题1:PostGIS扩展安装失败
|
||
```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扩展安装状态 |