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:
28
supabase/migrations/006_uniqueness_constraints.sql
Normal file
28
supabase/migrations/006_uniqueness_constraints.sql
Normal 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;
|
||||||
Reference in New Issue
Block a user