-- Database Initialization Script for BLS RCU Action Server CREATE SCHEMA IF NOT EXISTS rcu_action; CREATE TABLE IF NOT EXISTS rcu_action.rcu_action_events ( guid VARCHAR(32) NOT NULL, ts_ms BIGINT NOT NULL, write_ts_ms BIGINT NOT NULL, hotel_id INTEGER NOT NULL, room_id VARCHAR(32) NOT NULL, device_id VARCHAR(32) NOT NULL, direction VARCHAR(10) NOT NULL, cmd_word VARCHAR(10) NOT NULL, frame_id INTEGER NOT NULL, udp_raw TEXT NOT NULL, action_type VARCHAR(20) NOT NULL, sys_lock_status SMALLINT, report_count SMALLINT, dev_type SMALLINT, dev_addr SMALLINT, dev_loop INTEGER, dev_data INTEGER, fault_count SMALLINT, error_type SMALLINT, error_data SMALLINT, type_l SMALLINT, type_h SMALLINT, details JSONB, extra JSONB, PRIMARY KEY (ts_ms, guid) ) PARTITION BY RANGE (ts_ms); ALTER TABLE rcu_action.rcu_action_events ADD COLUMN IF NOT EXISTS device_id VARCHAR(32) NOT NULL DEFAULT ''; -- Indexes for performance CREATE INDEX IF NOT EXISTS idx_rcu_action_hotel_id ON rcu_action.rcu_action_events (hotel_id); CREATE INDEX IF NOT EXISTS idx_rcu_action_room_id ON rcu_action.rcu_action_events (room_id); CREATE INDEX IF NOT EXISTS idx_rcu_action_device_id ON rcu_action.rcu_action_events (device_id); CREATE INDEX IF NOT EXISTS idx_rcu_action_direction ON rcu_action.rcu_action_events (direction); CREATE INDEX IF NOT EXISTS idx_rcu_action_cmd_word ON rcu_action.rcu_action_events (cmd_word); CREATE INDEX IF NOT EXISTS idx_rcu_action_action_type ON rcu_action.rcu_action_events (action_type); -- Composite Index for typical query pattern (Hotel + Room + Time) CREATE INDEX IF NOT EXISTS idx_rcu_action_query_main ON rcu_action.rcu_action_events (hotel_id, room_id, ts_ms DESC);