# 数据库合并执行指南 ## 概述 本指南帮助您将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扩展安装状态