trying to rework database migrations

This commit is contained in:
2026-02-05 11:42:04 -06:00
parent 3b14c65998
commit 343488b3eb
83 changed files with 5793 additions and 876 deletions

View File

@@ -0,0 +1,61 @@
-- Migration: Add rule association to event table
-- This enables events to be directly associated with specific rules,
-- improving query performance and enabling rule-specific event filtering.
-- Add rule and rule_ref columns to event table
ALTER TABLE event
ADD COLUMN rule BIGINT,
ADD COLUMN rule_ref TEXT;
-- Add foreign key constraint
ALTER TABLE event
ADD CONSTRAINT event_rule_fkey
FOREIGN KEY (rule) REFERENCES rule(id) ON DELETE SET NULL;
-- Add indexes for efficient querying
CREATE INDEX idx_event_rule ON event(rule);
CREATE INDEX idx_event_rule_ref ON event(rule_ref);
CREATE INDEX idx_event_rule_created ON event(rule, created DESC);
CREATE INDEX idx_event_trigger_rule ON event(trigger, rule);
-- Add comments
COMMENT ON COLUMN event.rule IS
'Optional reference to the specific rule that generated this event. Used by sensors that emit events for specific rule instances (e.g., timer sensors with multiple interval rules).';
COMMENT ON COLUMN event.rule_ref IS
'Human-readable reference to the rule (e.g., "core.echo_every_second"). Denormalized for query convenience.';
-- Update the notify trigger to include rule information if present
CREATE OR REPLACE FUNCTION notify_event_created()
RETURNS TRIGGER AS $$
DECLARE
payload JSONB;
BEGIN
-- Build JSON payload with event details
payload := jsonb_build_object(
'entity_type', 'event',
'entity_id', NEW.id,
'timestamp', NOW(),
'data', jsonb_build_object(
'id', NEW.id,
'trigger', NEW.trigger,
'trigger_ref', NEW.trigger_ref,
'rule', NEW.rule,
'rule_ref', NEW.rule_ref,
'source', NEW.source,
'source_ref', NEW.source_ref,
'payload', NEW.payload,
'created', NEW.created
)
);
-- Send notification to the event_created channel
PERFORM pg_notify('event_created', payload::text);
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-- Add comment on updated function
COMMENT ON FUNCTION notify_event_created() IS
'Sends PostgreSQL NOTIFY for event creation with optional rule association';