re-uploading work
This commit is contained in:
61
migrations/20260130000001_add_rule_to_event.sql
Normal file
61
migrations/20260130000001_add_rule_to_event.sql
Normal 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';
|
||||
Reference in New Issue
Block a user