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.
This commit is contained in:
@@ -1,4 +1,11 @@
|
|||||||
-- Seed pre-built saved queries for the SQL Explorer
|
-- 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
|
INSERT INTO saved_queries (name, description, sql_text) VALUES
|
||||||
('Company Overview', 'All tracked companies with sector and status',
|
('Company Overview', 'All tracked companies with sector and status',
|
||||||
'SELECT ticker, legal_name, sector, active, created_at FROM companies ORDER BY ticker'),
|
'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',
|
('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')
|
'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;
|
||||||
|
|||||||
Reference in New Issue
Block a user