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

4.6 KiB
Raw Permalink Blame History

数据库合并执行指南

概述

本指南帮助您将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;

注意事项

  1. 数据类型差异原QAUP的vehicle_id是bigint新表中是varchar通过视图进行类型转换关联

  2. 空间坐标系所有空间数据使用WGS84坐标系SRID: 4326

  3. 性能优化已创建适当的空间索引GIST和常规索引

  4. 时区处理:新表使用TIMESTAMP WITH TIME ZONE,注意时区一致性

故障排除

问题1PostGIS扩展安装失败

-- 检查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;

技术支持

如遇问题,请检查:

  1. PostgreSQL日志文件
  2. 数据库连接参数
  3. 用户权限设置
  4. PostGIS扩展安装状态