github.com/dhax/go-base@v0.0.0-20231004214136-8be7e5c1972b/database/migrate/main.go (about)

     1  // Package migrate implements postgres migrations.
     2  package migrate
     3  
     4  import (
     5  	"log"
     6  
     7  	"github.com/dhax/go-base/database"
     8  	"github.com/go-pg/migrations"
     9  	"github.com/go-pg/pg"
    10  )
    11  
    12  // Migrate runs go-pg migrations
    13  func Migrate(args []string) {
    14  	db, err := database.DBConn()
    15  	if err != nil {
    16  		log.Fatal(err)
    17  	}
    18  
    19  	err = db.RunInTransaction(func(tx *pg.Tx) error {
    20  		oldVersion, newVersion, err := migrations.Run(tx, args...)
    21  		if err != nil {
    22  			return err
    23  		}
    24  		if newVersion != oldVersion {
    25  			log.Printf("migrated from version %d to %d\n", oldVersion, newVersion)
    26  		} else {
    27  			log.Printf("version is %d\n", oldVersion)
    28  		}
    29  		return nil
    30  	})
    31  	if err != nil {
    32  		log.Fatal(err)
    33  	}
    34  
    35  }
    36  
    37  // Reset runs reverts all migrations to version 0 and then applies all migrations to latest
    38  func Reset() {
    39  	db, err := database.DBConn()
    40  	if err != nil {
    41  		log.Fatal(err)
    42  	}
    43  
    44  	version, err := migrations.Version(db)
    45  	if err != nil {
    46  		log.Fatal(err)
    47  	}
    48  
    49  	err = db.RunInTransaction(func(tx *pg.Tx) error {
    50  		for version != 0 {
    51  			oldVersion, newVersion, err := migrations.Run(tx, "down")
    52  			if err != nil {
    53  				return err
    54  			}
    55  			log.Printf("migrated from version %d to %d\n", oldVersion, newVersion)
    56  			version = newVersion
    57  		}
    58  		return nil
    59  	})
    60  	if err != nil {
    61  		log.Fatal(err)
    62  	}
    63  }