diff --git a/changes/issue-mariadb-migration b/changes/issue-mariadb-migration new file mode 100644 index 0000000000..9be496bd6d --- /dev/null +++ b/changes/issue-mariadb-migration @@ -0,0 +1 @@ +* Fix v4.7.0 migration issue with policy membership history on MariaDB. diff --git a/server/datastore/mysql/migrations/tables/20211202092042_RemovePolicyHistory.go b/server/datastore/mysql/migrations/tables/20211202092042_RemovePolicyHistory.go index dfbf59eb5d..b1288cfa88 100644 --- a/server/datastore/mysql/migrations/tables/20211202092042_RemovePolicyHistory.go +++ b/server/datastore/mysql/migrations/tables/20211202092042_RemovePolicyHistory.go @@ -2,6 +2,7 @@ package tables import ( "database/sql" + "fmt" "github.com/pkg/errors" ) @@ -16,6 +17,21 @@ func Up_20211202092042(tx *sql.Tx) error { return errors.Wrap(err, "drop view policy_membership") } + table := "policy_membership_history" + referencedTables := map[string]struct{}{ + "policies": {}, + "hosts": {}, + } + constraints, err := constraintsForTable(tx, table, referencedTables) + if err != nil { + return errors.Wrap(err, "getting references to policies and hosts table") + } + for _, ct := range constraints { + if _, err := tx.Exec(fmt.Sprintf(`ALTER TABLE policy_membership_history DROP FOREIGN KEY %s;`, ct)); err != nil { + return errors.Wrapf(err, "dropping policy_membership_history foreign keys: %s", ct) + } + } + policyMembershipTable := ` CREATE TABLE IF NOT EXISTS policy_membership ( policy_id INT UNSIGNED NOT NULL,