Merge branch 'migration-fixes' into 'main'
Migration script fixes & improvements See merge request signald/signald-go!11
This commit is contained in:
commit
8a91346777
1 changed files with 45 additions and 76 deletions
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue