Drop postgres schema on failed migration

If db-move fails, don't leave behind a partially-created postgres DB
that will block attempts at future migrations.

Only delete schemas created by the current db-move, lest a valid,
pre-existing postgres DB exists that shouldn't be deleted.
This commit is contained in:
Andrew Ferrazzutti 2022-08-11 10:37:39 -04:00
parent 9928e5ffc2
commit f15260d1ca

View file

@ -93,6 +93,17 @@ var (
}
log.Println("created schema")
ok := false
defer func() {
if !ok {
if err := dropSchema(dest); err != nil {
log.Println("error dropping schema in postgres after failed migration:", err)
} else {
log.Println("dropped schema in postgres after failed migration")
}
}
}()
if err := moveAccounts(source, dest); err != nil {
log.Println("error moving accounts table")
return err
@ -199,6 +210,7 @@ var (
log.Println("error deleting sqlite file")
return err
}
ok = true
log.Println("sqlite file deleted, your data is now in postgres :)")
return nil
},
@ -253,6 +265,11 @@ func createSchema(dest *sql.DB) error {
return nil
}
func dropSchema(dest *sql.DB) error {
_, err := dest.Exec("DROP OWNED BY CURRENT_ROLE CASCADE")
return err
}
func moveAccounts(source *sql.DB, dest *sql.DB) error {
rows, err := source.Query("SELECT uuid, e164, server FROM accounts")
if err != nil {