From f15260d1cab57ef3e18d288a927c9c14f57d2db1 Mon Sep 17 00:00:00 2001 From: Andrew Ferrazzutti Date: Thu, 11 Aug 2022 10:37:39 -0400 Subject: [PATCH] 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. --- cmd/signaldctl/cmd/db/migrate.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/cmd/signaldctl/cmd/db/migrate.go b/cmd/signaldctl/cmd/db/migrate.go index 122e499..416ca3f 100644 --- a/cmd/signaldctl/cmd/db/migrate.go +++ b/cmd/signaldctl/cmd/db/migrate.go @@ -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 {