fanir
a7d08500f5
- database: - moved to jackc/pgx from database/sql - revised migrator and moved it into it's own package - separated ParseConfig into it's own function - config: - database config is now a DSN or URL instead of a struct - SearchPaths are now available through a function - improved help / usage output - modified data model
61 lines
1.2 KiB
Go
61 lines
1.2 KiB
Go
package migrator
|
|
|
|
import (
|
|
"github.com/golang-migrate/migrate/v4"
|
|
migratePGX "github.com/golang-migrate/migrate/v4/database/pgx"
|
|
"github.com/golang-migrate/migrate/v4/source/iofs"
|
|
"github.com/jackc/pgx/v4"
|
|
"github.com/jackc/pgx/v4/stdlib"
|
|
|
|
"git.zom.bi/fanir/feedizer/models/migrations"
|
|
)
|
|
|
|
type Migrator struct {
|
|
m *migrate.Migrate
|
|
err error
|
|
}
|
|
|
|
func (m *Migrator) Error() error { return m.err }
|
|
|
|
func New(dbConfig string) *Migrator {
|
|
source, err := iofs.New(migrations.FS, ".")
|
|
if err != nil {
|
|
return &Migrator{err: err}
|
|
}
|
|
|
|
connConfig, err := pgx.ParseConfig(dbConfig)
|
|
if err != nil {
|
|
return &Migrator{err: err}
|
|
}
|
|
connString := stdlib.RegisterConnConfig(connConfig)
|
|
|
|
var p migratePGX.Postgres
|
|
driver, err := p.Open(connString)
|
|
if err != nil {
|
|
return &Migrator{err: err}
|
|
}
|
|
|
|
m, err := migrate.NewWithInstance("iofs", source, "pgx", driver)
|
|
if err != nil {
|
|
return &Migrator{err: err}
|
|
}
|
|
|
|
return &Migrator{m: m}
|
|
}
|
|
|
|
// Migrate applies all migrations.
|
|
func (m *Migrator) Migrate() error {
|
|
if m.err == nil {
|
|
m.err = m.m.Up()
|
|
}
|
|
return m.err
|
|
}
|
|
|
|
// Purge purges the entire database by undoing all migrations.
|
|
func (m *Migrator) Purge() error {
|
|
if m.err == nil {
|
|
m.err = m.m.Down()
|
|
}
|
|
return m.err
|
|
}
|