-- Migration: Add Instrument Metadata Columns -- Date: 2026-02-11 -- Description: Adds classification and trading specification columns to meta.exchanges and meta.instruments -- ============================================================================ -- 1. Add columns to meta.exchanges -- ============================================================================ -- Trading specifications ALTER TABLE meta.exchanges ADD COLUMN IF NOT EXISTS default_tick_size DOUBLE PRECISION; ALTER TABLE meta.exchanges ADD COLUMN IF NOT EXISTS default_tick_value DOUBLE PRECISION; ALTER TABLE meta.exchanges ADD COLUMN IF NOT EXISTS default_extended_hours BOOLEAN DEFAULT false; -- Geographic info ALTER TABLE meta.exchanges ADD COLUMN IF NOT EXISTS country VARCHAR(3); COMMENT ON COLUMN meta.exchanges.default_tick_size IS 'Default minimum price increment (e.g., 0.01 for stocks)'; COMMENT ON COLUMN meta.exchanges.default_tick_value IS 'Default value per tick in currency (0.01 for stocks = 1 cent per share)'; COMMENT ON COLUMN meta.exchanges.default_extended_hours IS 'Default for whether instruments support pre/post market trading'; COMMENT ON COLUMN meta.exchanges.country IS 'ISO 3166-1 alpha-3 country code (USA, GBR, JPN)'; -- ============================================================================ -- 2. Add columns to meta.instruments -- ============================================================================ -- Basic info ALTER TABLE meta.instruments ADD COLUMN IF NOT EXISTS description VARCHAR(255); ALTER TABLE meta.instruments ADD COLUMN IF NOT EXISTS country VARCHAR(3); -- Trading specifications ALTER TABLE meta.instruments ADD COLUMN IF NOT EXISTS extended_hours BOOLEAN; -- Company/Fund classification ALTER TABLE meta.instruments ADD COLUMN IF NOT EXISTS sector VARCHAR(50); ALTER TABLE meta.instruments ADD COLUMN IF NOT EXISTS industry VARCHAR(100); ALTER TABLE meta.instruments ADD COLUMN IF NOT EXISTS category VARCHAR(50); ALTER TABLE meta.instruments ADD COLUMN IF NOT EXISTS subcategory VARCHAR(50); ALTER TABLE meta.instruments ADD COLUMN IF NOT EXISTS asset_class VARCHAR(30); ALTER TABLE meta.instruments ADD COLUMN IF NOT EXISTS geography VARCHAR(30); -- ETF-specific ALTER TABLE meta.instruments ADD COLUMN IF NOT EXISTS underlying VARCHAR(30); COMMENT ON COLUMN meta.instruments.description IS 'Full name/description of the instrument'; COMMENT ON COLUMN meta.instruments.country IS 'ISO 3166-1 alpha-3 country code (overrides exchange default)'; COMMENT ON COLUMN meta.instruments.extended_hours IS 'Override exchange default for pre/post market trading'; COMMENT ON COLUMN meta.instruments.sector IS 'GICS sector (e.g., Technology, Financials)'; COMMENT ON COLUMN meta.instruments.industry IS 'GICS industry (e.g., Software-Application)'; COMMENT ON COLUMN meta.instruments.category IS 'Custom categorization (e.g., Sector ETF, Broad Market)'; COMMENT ON COLUMN meta.instruments.subcategory IS 'Custom sub-categorization (e.g., S&P 500, Technology)'; COMMENT ON COLUMN meta.instruments.asset_class IS 'Asset class (Equity, Fixed Income, Commodity, Currency)'; COMMENT ON COLUMN meta.instruments.geography IS 'Geographic focus (US, International, Emerging)'; COMMENT ON COLUMN meta.instruments.underlying IS 'Underlying symbol for ETFs/derivatives (e.g., SPX, NDX)'; -- ============================================================================ -- 3. Update existing exchange data -- ============================================================================ -- Update NYSE if it exists UPDATE meta.exchanges SET default_tick_size = 0.01, default_tick_value = 0.01, default_extended_hours = true, country = 'USA' WHERE id = 'NYSE'; -- Update CME if it exists UPDATE meta.exchanges SET country = 'USA', default_extended_hours = true WHERE id = 'CME'; -- Add NASDAQ if it doesn't exist INSERT INTO meta.exchanges ( id, name, timezone, currency, default_sec_type, default_tick_size, default_tick_value, default_extended_hours, country ) SELECT 'NASDAQ', 'NASDAQ Stock Market', 'America/New_York', 'USD', 'STK', 0.01, 0.01, true, 'USA' WHERE NOT EXISTS (SELECT 1 FROM meta.exchanges WHERE id = 'NASDAQ'); -- ============================================================================ -- Migration Complete -- ============================================================================ -- Verify the changes SELECT 'meta.exchanges columns:' as info; SELECT column_name, data_type, character_maximum_length FROM information_schema.columns WHERE table_schema = 'meta' AND table_name = 'exchanges' ORDER BY ordinal_position; SELECT 'meta.instruments columns:' as info; SELECT column_name, data_type, character_maximum_length FROM information_schema.columns WHERE table_schema = 'meta' AND table_name = 'instruments' ORDER BY ordinal_position;