| 508 | } |
| 509 | |
| 510 | func (s *sqlDatabase) enableIncrementalVacuum(conn *gorm.DB, dbName string) error { |
| 511 | var autoVacuum int |
| 512 | if err := conn.Raw("PRAGMA auto_vacuum").Scan(&autoVacuum).Error; err != nil { |
| 513 | return fmt.Errorf("failed to read auto_vacuum for %s db: %w", dbName, err) |
| 514 | } |
| 515 | |
| 516 | // 2 = INCREMENTAL, already set |
| 517 | if autoVacuum == 2 { |
| 518 | return nil |
| 519 | } |
| 520 | |
| 521 | slog.InfoContext(s.ctx, "migrating database to incremental auto_vacuum", "database", dbName) |
| 522 | |
| 523 | if err := conn.Exec("PRAGMA auto_vacuum = INCREMENTAL").Error; err != nil { |
| 524 | return fmt.Errorf("failed to set auto_vacuum for %s db: %w", dbName, err) |
| 525 | } |
| 526 | // VACUUM is required to apply the auto_vacuum mode change. |
| 527 | if err := conn.Exec("VACUUM").Error; err != nil { |
| 528 | return fmt.Errorf("failed to vacuum %s db for auto_vacuum migration: %w", dbName, err) |
| 529 | } |
| 530 | |
| 531 | return nil |
| 532 | } |
| 533 | |
| 534 | func (s *sqlDatabase) ensureTemplates(migrateTemplates bool) error { |
| 535 | if !migrateTemplates { |