|
|
@@ -83,12 +83,26 @@ func initModels() error {
|
|
|
return err
|
|
|
}
|
|
|
}
|
|
|
+ if err := dropLegacyForeignKeys(); err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
if err := pruneOrphanedClientInbounds(); err != nil {
|
|
|
return err
|
|
|
}
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
+func dropLegacyForeignKeys() error {
|
|
|
+ if !IsPostgres() {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+ if err := db.Exec("ALTER TABLE client_traffics DROP CONSTRAINT IF EXISTS fk_inbounds_client_stats").Error; err != nil {
|
|
|
+ log.Printf("Error dropping legacy foreign key fk_inbounds_client_stats: %v", err)
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
func pruneOrphanedClientInbounds() error {
|
|
|
res := db.Exec("DELETE FROM client_inbounds WHERE inbound_id NOT IN (SELECT id FROM inbounds)")
|
|
|
if res.Error != nil {
|
|
|
@@ -545,7 +559,7 @@ func InitDB(dbPath string) error {
|
|
|
} else {
|
|
|
gormLogger = logger.Discard
|
|
|
}
|
|
|
- c := &gorm.Config{Logger: gormLogger}
|
|
|
+ c := &gorm.Config{Logger: gormLogger, DisableForeignKeyConstraintWhenMigrating: true}
|
|
|
|
|
|
var err error
|
|
|
switch config.GetDBKind() {
|