From d28787a8ee27ef9745f4d358a25d5b806a1ab2a5 Mon Sep 17 00:00:00 2001 From: Celes Renata Date: Thu, 16 Apr 2026 05:16:18 +0000 Subject: [PATCH] fix: add unique constraint on saved_queries.name to prevent duplicates The migration ran on every deploy, inserting duplicate queries each time (96 instead of 12). Added UNIQUE constraint on name and changed ON CONFLICT to reference it. Cleaned up 84 duplicates in DB. --- infra/migrations/021_seed_saved_queries.sql | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/infra/migrations/021_seed_saved_queries.sql b/infra/migrations/021_seed_saved_queries.sql index c06bc63..d03b44c 100644 --- a/infra/migrations/021_seed_saved_queries.sql +++ b/infra/migrations/021_seed_saved_queries.sql @@ -1,4 +1,11 @@ -- Seed pre-built saved queries for the SQL Explorer +-- Add unique constraint on name to prevent duplicates on re-run +DO $$ BEGIN + IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'saved_queries_name_key') THEN + ALTER TABLE saved_queries ADD CONSTRAINT saved_queries_name_key UNIQUE (name); + END IF; +END $$; + INSERT INTO saved_queries (name, description, sql_text) VALUES ('Company Overview', 'All tracked companies with sector and status', 'SELECT ticker, legal_name, sector, active, created_at FROM companies ORDER BY ticker'), @@ -35,4 +42,4 @@ INSERT INTO saved_queries (name, description, sql_text) VALUES ('Source Coverage Matrix', 'Active sources per company', 'SELECT c.ticker, c.legal_name, count(*) FILTER (WHERE s.source_type = ''market_api'') AS market, count(*) FILTER (WHERE s.source_type = ''news_api'') AS news, count(*) FILTER (WHERE s.source_type = ''filings_api'') AS filings, count(*) AS total FROM companies c LEFT JOIN sources s ON c.id = s.company_id AND s.active = TRUE WHERE c.active = TRUE GROUP BY c.ticker, c.legal_name ORDER BY c.ticker') -ON CONFLICT DO NOTHING; +ON CONFLICT (name) DO NOTHING;