// 功能:独立创建用户设备分组表及产品归组字段,不迁移其他业务表;版本:1.0.0。 package main // migrateDeviceGroups 创建分组资料并补充产品归组字段,重复执行不清空现有数据。 func migrateDeviceGroups() error { return migrateClientColumns([]string{ `CREATE TABLE IF NOT EXISTS user_device_group ( id bigserial PRIMARY KEY, identity varchar(36) NOT NULL UNIQUE, created_at timestamptz NOT NULL, updated_at timestamptz NOT NULL, deleted_at timestamptz, status integer NOT NULL DEFAULT 1 CHECK (status IN (1,3)), user_account_id bigint NOT NULL REFERENCES user_account(id), name varchar(32) NOT NULL, request_no varchar(36) NOT NULL, sort_no integer NOT NULL DEFAULT 0, UNIQUE(user_account_id, request_no) )`, `COMMENT ON TABLE user_device_group IS '用户本人设备展示分组;不授予设备控制、共享或物联网权限'`, `COMMENT ON COLUMN user_device_group.id IS '数据库自增内部主键'`, `COMMENT ON COLUMN user_device_group.identity IS '对外业务UUID标识'`, `COMMENT ON COLUMN user_device_group.created_at IS '分组创建时间'`, `COMMENT ON COLUMN user_device_group.updated_at IS '分组最后修改时间'`, `COMMENT ON COLUMN user_device_group.deleted_at IS '软删除时间;当前删除操作使用状态归档'`, `COMMENT ON COLUMN user_device_group.status IS '状态:1=启用,3=已归档'`, `COMMENT ON COLUMN user_device_group.user_account_id IS '分组所属用户内部主键,仅本人可读写'`, `COMMENT ON COLUMN user_device_group.name IS '用户自定义分组名称,最多32字'`, `COMMENT ON COLUMN user_device_group.request_no IS '客户端新增请求UUID,同一用户内唯一且归档后不复用'`, `COMMENT ON COLUMN user_device_group.sort_no IS '同一用户内显示顺序,数值越小越靠前'`, `CREATE UNIQUE INDEX IF NOT EXISTS idx_device_group_active_name ON user_device_group(user_account_id,name) WHERE status=1 AND deleted_at IS NULL`, `CREATE INDEX IF NOT EXISTS idx_device_group_user_sort ON user_device_group(user_account_id,status,sort_no,id)`, `ALTER TABLE product_info ADD COLUMN IF NOT EXISTS device_group_id bigint NOT NULL DEFAULT 0`, `COMMENT ON COLUMN product_info.device_group_id IS '当前用户设备分组内部主键;0表示未分组,产品归属变化时必须清空'`, `CREATE INDEX IF NOT EXISTS idx_product_device_group ON product_info(user_account_id,device_group_id) WHERE device_group_id <> 0`, }) }