修复软删除和唯一索引同时存在的bug
This commit is contained in:
@@ -309,6 +309,78 @@ func (ps *PostgresStorage) creatingUniqueIndex(ctx context.Context) error {
|
||||
return fmt.Errorf("为 pig_nutrient_requirements 创建部分唯一索引失败: %w", err)
|
||||
}
|
||||
logger.Debug("成功为 pig_nutrient_requirements 创建部分唯一索引 (或已存在)")
|
||||
|
||||
// 为 users 表创建部分唯一索引
|
||||
logger.Debug("正在为 users 表创建部分唯一索引")
|
||||
partialIndexSQL = "CREATE UNIQUE INDEX IF NOT EXISTS idx_users_unique_username_when_not_deleted ON users (username) WHERE deleted_at IS NULL;"
|
||||
if err := ps.db.WithContext(storageCtx).Exec(partialIndexSQL).Error; err != nil {
|
||||
logger.Errorw("为 users 创建部分唯一索引失败", "error", err)
|
||||
return fmt.Errorf("为 users 创建部分唯一索引失败: %w", err)
|
||||
}
|
||||
logger.Debug("成功为 users 创建部分唯一索引 (或已存在)")
|
||||
|
||||
// 为 area_controllers 表创建部分唯一索引 (Name)
|
||||
logger.Debug("正在为 area_controllers 表创建部分唯一索引 (Name)")
|
||||
partialIndexSQL = "CREATE UNIQUE INDEX IF NOT EXISTS idx_area_controllers_unique_name_when_not_deleted ON area_controllers (name) WHERE deleted_at IS NULL;"
|
||||
if err := ps.db.WithContext(storageCtx).Exec(partialIndexSQL).Error; err != nil {
|
||||
logger.Errorw("为 area_controllers 创建部分唯一索引 (Name) 失败", "error", err)
|
||||
return fmt.Errorf("为 area_controllers 创建部分唯一索引 (Name) 失败: %w", err)
|
||||
}
|
||||
logger.Debug("成功为 area_controllers 创建部分唯一索引 (Name) (或已存在)")
|
||||
|
||||
// 为 area_controllers 表创建部分唯一索引 (NetworkID)
|
||||
logger.Debug("正在为 area_controllers 表创建部分唯一索引 (NetworkID)")
|
||||
partialIndexSQL = "CREATE UNIQUE INDEX IF NOT EXISTS idx_area_controllers_unique_network_id_when_not_deleted ON area_controllers (network_id) WHERE deleted_at IS NULL;"
|
||||
if err := ps.db.WithContext(storageCtx).Exec(partialIndexSQL).Error; err != nil {
|
||||
logger.Errorw("为 area_controllers 创建部分唯一索引 (NetworkID) 失败", "error", err)
|
||||
return fmt.Errorf("为 area_controllers 创建部分唯一索引 (NetworkID) 失败: %w", err)
|
||||
}
|
||||
logger.Debug("成功为 area_controllers 创建部分唯一索引 (NetworkID) (或已存在)")
|
||||
|
||||
// 为 device_templates 表创建部分唯一索引
|
||||
logger.Debug("正在为 device_templates 表创建部分唯一索引")
|
||||
partialIndexSQL = "CREATE UNIQUE INDEX IF NOT EXISTS idx_device_templates_unique_name_when_not_deleted ON device_templates (name) WHERE deleted_at IS NULL;"
|
||||
if err := ps.db.WithContext(storageCtx).Exec(partialIndexSQL).Error; err != nil {
|
||||
logger.Errorw("为 device_templates 创建部分唯一索引失败", "error", err)
|
||||
return fmt.Errorf("为 device_templates 创建部分唯一索引失败: %w", err)
|
||||
}
|
||||
logger.Debug("成功为 device_templates 创建部分唯一索引 (或已存在)")
|
||||
|
||||
// 为 pig_batches 表创建部分唯一索引
|
||||
logger.Debug("正在为 pig_batches 表创建部分唯一索引")
|
||||
partialIndexSQL = "CREATE UNIQUE INDEX IF NOT EXISTS idx_pig_batches_unique_batch_number_when_not_deleted ON pig_batches (batch_number) WHERE deleted_at IS NULL;"
|
||||
if err := ps.db.WithContext(storageCtx).Exec(partialIndexSQL).Error; err != nil {
|
||||
logger.Errorw("为 pig_batches 创建部分唯一索引失败", "error", err)
|
||||
return fmt.Errorf("为 pig_batches 创建部分唯一索引失败: %w", err)
|
||||
}
|
||||
logger.Debug("成功为 pig_batches 创建部分唯一索引 (或已存在)")
|
||||
|
||||
// 为 pig_houses 表创建部分唯一索引
|
||||
logger.Debug("正在为 pig_houses 表创建部分唯一索引")
|
||||
partialIndexSQL = "CREATE UNIQUE INDEX IF NOT EXISTS idx_pig_houses_unique_name_when_not_deleted ON pig_houses (name) WHERE deleted_at IS NULL;"
|
||||
if err := ps.db.WithContext(storageCtx).Exec(partialIndexSQL).Error; err != nil {
|
||||
logger.Errorw("为 pig_houses 创建部分唯一索引失败", "error", err)
|
||||
return fmt.Errorf("为 pig_houses 创建部分唯一索引失败: %w", err)
|
||||
}
|
||||
logger.Debug("成功为 pig_houses 创建部分唯一索引 (或已存在)")
|
||||
|
||||
// 为 raw_materials 表创建部分唯一索引
|
||||
logger.Debug("正在为 raw_materials 表创建部分唯一索引")
|
||||
partialIndexSQL = "CREATE UNIQUE INDEX IF NOT EXISTS idx_raw_materials_unique_name_when_not_deleted ON raw_materials (name) WHERE deleted_at IS NULL;"
|
||||
if err := ps.db.WithContext(storageCtx).Exec(partialIndexSQL).Error; err != nil {
|
||||
logger.Errorw("为 raw_materials 创建部分唯一索引失败", "error", err)
|
||||
return fmt.Errorf("为 raw_materials 创建部分唯一索引失败: %w", err)
|
||||
}
|
||||
logger.Debug("成功为 raw_materials 创建部分唯一索引 (或已存在)")
|
||||
|
||||
// 为 nutrients 表创建部分唯一索引
|
||||
logger.Debug("正在为 nutrients 表创建部分唯一索引")
|
||||
partialIndexSQL = "CREATE UNIQUE INDEX IF NOT EXISTS idx_nutrients_unique_name_when_not_deleted ON nutrients (name) WHERE deleted_at IS NULL;"
|
||||
if err := ps.db.WithContext(storageCtx).Exec(partialIndexSQL).Error; err != nil {
|
||||
logger.Errorw("为 nutrients 创建部分唯一索引失败", "error", err)
|
||||
return fmt.Errorf("为 nutrients 创建部分唯一索引失败: %w", err)
|
||||
}
|
||||
logger.Debug("成功为 nutrients 创建部分唯一索引 (或已存在)")
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user