Merge branch 'migration-fixes' into 'main'

Migration script fixes & improvements

See merge request signald/signald-go!11
This commit is contained in:
Andrew Ferrazzutti 2022-08-12 19:42:07 +00:00
commit 8a91346777

View file

@ -60,7 +60,7 @@ var (
}
return nil
},
RunE: func(cmd *cobra.Command, args []string) error {
RunE: func(cmd *cobra.Command, args []string) (err error) {
source, err := sql.Open("sqlite3", sqlitePath)
if err != nil {
return err
@ -93,83 +93,44 @@ var (
}
log.Println("created schema")
if err := moveAccounts(source, dest); err != nil {
log.Println("error moving accounts table")
return err
}
log.Println("moved accounts table")
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 := moveRecipients(source, dest); err != nil {
log.Println("error moving recipients table")
return err
migrate := func(fn func(*sql.DB, *sql.DB) error, targetName string) {
if err = fn(source, dest); err != nil {
log.Println("error moving", targetName)
panic(err)
}
log.Println("moved", targetName)
}
log.Println("moved recipients table")
defer func() {
if r := recover(); r != nil && r != err {
// If r is something other than the error returned via the named return, re-panic it
panic(r)
}
}()
if err := movePrekeys(source, dest); err != nil {
log.Println("error moving prekeys table")
return err
}
log.Println("moved prekeys table")
if err := moveSessions(source, dest); err != nil {
log.Println("error moving sessions table")
return err
}
log.Println("moved sessions table")
if err := moveSignedPrekeys(source, dest); err != nil {
log.Println("error moving signed prekeys table")
return err
}
log.Println("moved signed prekeys table")
if err := moveIdentityKeys(source, dest); err != nil {
log.Println("error moving identity keys table")
return err
}
log.Println("moved identity keys table")
if err := moveAccountData(source, dest); err != nil {
log.Println("error moving account data")
return err
}
log.Println("moved account data table")
if err := movePendingAccountData(source, dest); err != nil {
log.Println("error moving pending account data tabe")
return err
}
log.Println("moved pending account data table")
if err := moveSenderKeys(source, dest); err != nil {
log.Println("error moving sender keys table")
return err
}
log.Println("moved sender keys table")
if err := moveSenderKeyShared(source, dest); err != nil {
log.Println("error moving sender key shared table")
return err
}
log.Println("moved sender key shared table")
if err := moveGroups(source, dest); err != nil {
log.Println("error moving groups table")
return err
}
log.Println("moved groups table")
if err := moveGroupCredentials(source, dest); err != nil {
log.Println("error moving group credentials table")
return err
}
log.Println("moved group credentials table")
if err := moveContacts(source, dest); err != nil {
log.Println("error moving group credentials table")
return err
}
log.Println("moved contacts table")
migrate(moveAccounts, "accounts table")
migrate(moveRecipients, "recipients table")
migrate(movePrekeys, "prekeys table")
migrate(moveSessions, "sessions table")
migrate(moveSignedPrekeys, "signed prekeys table")
migrate(moveIdentityKeys, "identity keys table")
migrate(moveAccountData, "account data")
migrate(movePendingAccountData, "pending account data table")
migrate(moveSenderKeys, "sender keys table")
migrate(moveSenderKeyShared, "sender key shared table")
migrate(moveGroups, "groups table")
migrate(moveGroupCredentials, "group credentials table")
migrate(moveContacts, "contacts table")
if err := moveProfileKeys(source, dest); err != nil {
log.Println("error moving profile keys table")
@ -199,6 +160,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 +215,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 {
@ -614,7 +581,9 @@ func moveGroupCredentials(source *sql.DB, dest *sql.DB) error {
}
func moveContacts(source *sql.DB, dest *sql.DB) error {
rows, err := source.Query("SELECT account_uuid, recipient, name, color, profile_key, message_expiration_time, inbox_position FROM contacts")
rows, err := source.Query("SELECT account_uuid, recipient, name, color, profile_key, message_expiration_time, inbox_position FROM contacts" +
" WHERE account_uuid IN (SELECT DISTINCT uuid FROM accounts)",
)
if err != nil {
return err
}