4.6 KiB
4.6 KiB
数据库合并执行指南
概述
本指南帮助您将CollisionAvoidanceSystem的空间数据表安全地合并到QAUP-Management数据库中。
前提条件
- PostgreSQL 13+ 数据库
- 具有管理员权限的数据库用户
- QAUP-Management项目已正常运行
执行步骤
步骤1:数据库备份(必须)
# 备份QAUP数据库
pg_dump -h localhost -U your_username -d qaup > backup_$(date +%Y%m%d_%H%M%S).sql
步骤2:连接数据库
# 连接到QAUP数据库
psql -h localhost -U your_username -d qaup
步骤3:执行迁移脚本
-- 在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:功能测试
-- 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字段关联:
-- 基础信息表:sys_vehicle_info.vehicle_id (bigint)
-- 位置数据表:vehicle_locations.vehicle_id (varchar)
-- 关联方式:通过类型转换进行关联
常用查询示例
1. 查询车辆完整信息
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. 查询区域内的车辆
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. 查询规则违反事件
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;
注意事项
-
数据类型差异:原QAUP的
vehicle_id是bigint,新表中是varchar,通过视图进行类型转换关联 -
空间坐标系:所有空间数据使用WGS84坐标系(SRID: 4326)
-
性能优化:已创建适当的空间索引(GIST)和常规索引
-
时区处理:新表使用
TIMESTAMP WITH TIME ZONE,注意时区一致性
故障排除
问题1:PostGIS扩展安装失败
-- 检查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,可以安全重复执行。
回滚方案
如果需要回滚,执行以下脚本:
-- 删除新增的表和视图
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;
技术支持
如遇问题,请检查:
- PostgreSQL日志文件
- 数据库连接参数
- 用户权限设置
- PostGIS扩展安装状态