turash/bugulma/backend/migrations/postgres/022_enhance_timeline_items.up.sql

38 lines
2.0 KiB
SQL
Executable File

-- Enhance timeline_items table with rich historical data fields
-- Adds time ranges, categorization, importance, and related data arrays
-- Add time range columns
ALTER TABLE timeline_items ADD COLUMN IF NOT EXISTS time_from TIMESTAMP;
ALTER TABLE timeline_items ADD COLUMN IF NOT EXISTS time_to TIMESTAMP;
-- Add categorization columns
ALTER TABLE timeline_items ADD COLUMN IF NOT EXISTS category VARCHAR(50);
ALTER TABLE timeline_items ADD COLUMN IF NOT EXISTS kind VARCHAR(20);
ALTER TABLE timeline_items ADD COLUMN IF NOT EXISTS is_historical BOOLEAN;
ALTER TABLE timeline_items ADD COLUMN IF NOT EXISTS heritage BOOLEAN;
-- Add importance column
ALTER TABLE timeline_items ADD COLUMN IF NOT EXISTS importance INTEGER DEFAULT 1;
-- Add summary column (separate from content)
ALTER TABLE timeline_items ADD COLUMN IF NOT EXISTS summary TEXT;
-- Add JSONB columns for arrays
ALTER TABLE timeline_items ADD COLUMN IF NOT EXISTS locations JSONB DEFAULT '[]'::jsonb;
ALTER TABLE timeline_items ADD COLUMN IF NOT EXISTS actors JSONB DEFAULT '[]'::jsonb;
ALTER TABLE timeline_items ADD COLUMN IF NOT EXISTS related JSONB DEFAULT '[]'::jsonb;
ALTER TABLE timeline_items ADD COLUMN IF NOT EXISTS tags JSONB DEFAULT '[]'::jsonb;
-- Add indexes for commonly queried fields
CREATE INDEX IF NOT EXISTS idx_timeline_items_category ON timeline_items(category);
CREATE INDEX IF NOT EXISTS idx_timeline_items_kind ON timeline_items(kind);
CREATE INDEX IF NOT EXISTS idx_timeline_items_is_historical ON timeline_items(is_historical);
CREATE INDEX IF NOT EXISTS idx_timeline_items_importance ON timeline_items(importance);
CREATE INDEX IF NOT EXISTS idx_timeline_items_time_from ON timeline_items(time_from);
CREATE INDEX IF NOT EXISTS idx_timeline_items_time_to ON timeline_items(time_to);
-- Add GIN indexes for JSONB array columns
CREATE INDEX IF NOT EXISTS idx_timeline_items_locations ON timeline_items USING GIN(locations);
CREATE INDEX IF NOT EXISTS idx_timeline_items_actors ON timeline_items USING GIN(actors);
CREATE INDEX IF NOT EXISTS idx_timeline_items_tags ON timeline_items USING GIN(tags);