diff --git a/changelog.d/+migration-one-default-dashboard.fixed.md b/changelog.d/+migration-one-default-dashboard.fixed.md new file mode 100644 index 0000000000..54bd4ec8a5 --- /dev/null +++ b/changelog.d/+migration-one-default-dashboard.fixed.md @@ -0,0 +1 @@ +Ensure that each account has exactly one default dashboard \ No newline at end of file diff --git a/python/nav/models/sql/changes/sc.05.12.0001.sql b/python/nav/models/sql/changes/sc.05.12.0001.sql new file mode 100644 index 0000000000..3191494f5a --- /dev/null +++ b/python/nav/models/sql/changes/sc.05.12.0001.sql @@ -0,0 +1,20 @@ +-- This migration is to ensure that for accounts that don't have a default +-- dashboard we set a default dashboard + +-- This part finds the row with the lowest id for any account that does not +-- have a default dashboard +WITH CTE AS ( + SELECT MIN(id) as id + FROM account_dashboard a + WHERE NOT EXISTS ( + SELECT 1 + FROM account_dashboard b + WHERE a.account_id = b.account_id + AND b.is_default = TRUE + ) + GROUP BY account_id +) +-- And this part sets is_default for that row to true +UPDATE account_dashboard +SET is_default = TRUE +WHERE id IN (SELECT id FROM CTE); \ No newline at end of file diff --git a/python/nav/models/sql/changes/sc.05.12.0002.sql b/python/nav/models/sql/changes/sc.05.12.0002.sql new file mode 100644 index 0000000000..612b53f10d --- /dev/null +++ b/python/nav/models/sql/changes/sc.05.12.0002.sql @@ -0,0 +1,21 @@ +-- This migration is to ensure that for accounts that have more than one +-- default dashboard we set is_default to false for all except for one + +UPDATE account_dashboard +SET is_default = FALSE +WHERE id NOT IN ( + -- This part finds the lowest id of the default dashboards for each + -- account_id + SELECT MIN(id) + FROM account_dashboard + WHERE is_default = TRUE + GROUP BY account_id +) +AND account_id IN ( + -- This part finds all account_ids that have more than one default dashboard + SELECT account_id + FROM account_dashboard + WHERE is_default = TRUE + GROUP BY account_id + HAVING COUNT(account_id) > 1 +) \ No newline at end of file