Initial commit
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
-- MeshRay 数据库迁移脚本
|
||||
-- 功能:为 devices 表添加增强模式支持字段
|
||||
-- 创建时间:2026-03-25
|
||||
-- 关联任务:P0-2 - SwitchMode 功能实现
|
||||
|
||||
-- ============================================================
|
||||
-- 1. 添加 Endpoint 字段(用于保存原始公网地址)
|
||||
-- ============================================================
|
||||
-- 说明:
|
||||
-- - 原生模式:Endpoint 保存设备的真实公网地址(host:port)
|
||||
-- - 增强模式:当需要回退到原生模式时,从 Endpoint 恢复原始地址
|
||||
-- - 格式:"192.168.1.100:51820" 或 "[::1]:51820"
|
||||
-- - 最大长度:255 (IPv6) + 1 (冒号) + 5 (端口) = 261
|
||||
ALTER TABLE devices ADD COLUMN endpoint VARCHAR(261) DEFAULT '';
|
||||
|
||||
-- ============================================================
|
||||
-- 2. 添加 IsRelayCapable 字段(是否可作为 Mesh 中继节点)
|
||||
-- ============================================================
|
||||
-- 说明:
|
||||
-- - true: 该设备可以作为中继节点,帮助其他设备转发数据
|
||||
-- - false: 该设备仅作为普通终端设备
|
||||
-- - 默认值:false(所有新设备默认为普通设备)
|
||||
ALTER TABLE devices ADD COLUMN is_relay_capable BOOLEAN DEFAULT FALSE;
|
||||
|
||||
-- ============================================================
|
||||
-- 3. 验证迁移结果
|
||||
-- ============================================================
|
||||
-- 检查新增字段是否存在
|
||||
SELECT
|
||||
COLUMN_NAME,
|
||||
DATA_TYPE,
|
||||
IS_NULLABLE,
|
||||
COLUMN_DEFAULT
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_NAME = 'devices'
|
||||
AND COLUMN_NAME IN ('endpoint', 'is_relay_capable');
|
||||
|
||||
-- 统计现有设备数量
|
||||
SELECT
|
||||
COUNT(*) AS total_devices,
|
||||
SUM(CASE WHEN endpoint != '' THEN 1 ELSE 0 END) AS devices_with_endpoint,
|
||||
SUM(CASE WHEN is_relay_capable = TRUE THEN 1 ELSE 0 END) AS relay_capable_devices
|
||||
FROM devices;
|
||||
|
||||
-- ============================================================
|
||||
-- 4. 回滚脚本(如果需要撤销迁移)
|
||||
-- ============================================================
|
||||
/*
|
||||
-- ⚠️ 警告:执行回滚将删除新增字段,请谨慎操作!
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
ALTER TABLE devices DROP COLUMN endpoint;
|
||||
ALTER TABLE devices DROP COLUMN is_relay_capable;
|
||||
|
||||
COMMIT;
|
||||
*/
|
||||
|
||||
-- ============================================================
|
||||
-- 5. 备注
|
||||
-- ============================================================
|
||||
/*
|
||||
设计决策:
|
||||
1. endpoint 使用 VARCHAR(261) 而不是 TEXT
|
||||
- 理由:固定最大长度,查询性能更好
|
||||
- 261 = 255 (IPv6 最大长度) + 1 (冒号) + 5 (端口号最大值 65535)
|
||||
|
||||
2. is_relay_capable 使用 BOOLEAN 而不是 INT
|
||||
- 理由:语义更清晰,GORM 自动映射为 bool 类型
|
||||
|
||||
3. 默认值设置:
|
||||
- endpoint: '' (空字符串) - 避免 NULL 判断
|
||||
- is_relay_capable: FALSE - 默认不作为中继节点
|
||||
|
||||
4. 索引策略:
|
||||
- 暂时不为 endpoint 添加索引
|
||||
- 理由:主要用于配置存储,不用于频繁查询
|
||||
*/
|
||||
Reference in New Issue
Block a user