feat(06-01): add migration 006 uniqueness constraints with safe deduplication

- DELETE duplicate budgets keeping oldest per (user_id, start_date)
- ADD CONSTRAINT budgets_user_month_unique UNIQUE (user_id, start_date)
- DELETE duplicate categories keeping oldest per (user_id, name)
- ADD CONSTRAINT categories_user_name_unique UNIQUE (user_id, name)
- Wrapped in single BEGIN/COMMIT transaction for atomicity
This commit is contained in:
2026-04-20 17:48:13 +02:00
parent 9963926971
commit 23fd3fad35

View File

@@ -0,0 +1,28 @@
-- Migration 006: Add uniqueness constraints to budgets and categories
-- Safe deduplication runs first inside the transaction before each constraint.
BEGIN;
-- Deduplicate budgets: keep the oldest row per (user_id, start_date)
DELETE FROM budgets
WHERE id NOT IN (
SELECT DISTINCT ON (user_id, start_date) id
FROM budgets
ORDER BY user_id, start_date, created_at ASC
);
ALTER TABLE budgets
ADD CONSTRAINT budgets_user_month_unique UNIQUE (user_id, start_date);
-- Deduplicate categories: keep the oldest row per (user_id, name)
DELETE FROM categories
WHERE id NOT IN (
SELECT DISTINCT ON (user_id, name) id
FROM categories
ORDER BY user_id, name, created_at ASC
);
ALTER TABLE categories
ADD CONSTRAINT categories_user_name_unique UNIQUE (user_id, name);
COMMIT;