diff --git a/backend/internal/repository/dashboard_aggregation_repo.go b/backend/internal/repository/dashboard_aggregation_repo.go index be4d4f02..d238e320 100644 --- a/backend/internal/repository/dashboard_aggregation_repo.go +++ b/backend/internal/repository/dashboard_aggregation_repo.go @@ -4,6 +4,7 @@ import ( "context" "database/sql" "fmt" + "log" "strings" "time" @@ -17,6 +18,13 @@ type dashboardAggregationRepository struct { // NewDashboardAggregationRepository 创建仪表盘预聚合仓储。 func NewDashboardAggregationRepository(sqlDB *sql.DB) service.DashboardAggregationRepository { + if sqlDB == nil { + return nil + } + if !isPostgresDriver(sqlDB) { + log.Printf("[DashboardAggregation] 检测到非 PostgreSQL 驱动,已自动禁用预聚合") + return nil + } return newDashboardAggregationRepositoryWithSQL(sqlDB) } @@ -24,6 +32,14 @@ func newDashboardAggregationRepositoryWithSQL(sqlq sqlExecutor) *dashboardAggreg return &dashboardAggregationRepository{sql: sqlq} } +func isPostgresDriver(db *sql.DB) bool { + if db == nil { + return false + } + _, ok := db.Driver().(*pq.Driver) + return ok +} + func (r *dashboardAggregationRepository) AggregateRange(ctx context.Context, start, end time.Time) error { startUTC := start.UTC() endUTC := end.UTC() diff --git a/backend/internal/service/dashboard_service.go b/backend/internal/service/dashboard_service.go index 69d251cb..9bc56c54 100644 --- a/backend/internal/service/dashboard_service.go +++ b/backend/internal/service/dashboard_service.go @@ -85,6 +85,9 @@ func NewDashboardService(usageRepo UsageLogRepository, aggRepo DashboardAggregat aggUsageDays = cfg.DashboardAgg.Retention.UsageLogsDays } } + if aggRepo == nil { + aggEnabled = false + } return &DashboardService{ usageRepo: usageRepo, aggRepo: aggRepo,