package db import ( "context" "embed" "fmt" "path" "sort" "github.com/jackc/pgx/v5/pgxpool" ) //go:embed migrations/*.sql var migrationsFS embed.FS func Migrate(pool *pgxpool.Pool) error { files, err := migrationsFS.ReadDir("migrations") if err != nil { return fmt.Errorf("read migrations dir: %w", err) } sort.Slice(files, func(i, j int) bool { return files[i].Name() < files[j].Name() }) for _, f := range files { if path.Ext(f.Name()) != ".sql" { continue } data, err := migrationsFS.ReadFile("migrations/" + f.Name()) if err != nil { return fmt.Errorf("read migration %s: %w", f.Name(), err) } if _, err := pool.Exec(context.Background(), string(data)); err != nil { return fmt.Errorf("run migration %s: %w", f.Name(), err) } } return nil }