落地埋点 ingest/数据看板、首页宫格 CMS 与测评上下架;含账号引导、问答流式与免责声明去重,以及 review P1 审计同事务修复。 Co-authored-by: Cursor <cursoragent@cursor.com>
30 lines
1.4 KiB
SQL
30 lines
1.4 KiB
SQL
-- Ops-B analytics (ECR-007)
|
|
|
|
CREATE TABLE IF NOT EXISTS analytics_sessions (
|
|
session_id varchar(64) PRIMARY KEY,
|
|
device_key varchar(128) NOT NULL,
|
|
user_id uuid NULL REFERENCES users(id),
|
|
started_at timestamptz NOT NULL DEFAULT now(),
|
|
ended_at timestamptz NULL,
|
|
exit_page text NULL,
|
|
duration_ms int NULL
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_analytics_sessions_started ON analytics_sessions(started_at DESC);
|
|
CREATE INDEX IF NOT EXISTS idx_analytics_sessions_user ON analytics_sessions(user_id);
|
|
CREATE INDEX IF NOT EXISTS idx_analytics_sessions_device ON analytics_sessions(device_key);
|
|
|
|
CREATE TABLE IF NOT EXISTS analytics_events (
|
|
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
session_id varchar(64) NOT NULL REFERENCES analytics_sessions(session_id),
|
|
user_id uuid NULL REFERENCES users(id),
|
|
name varchar(64) NOT NULL,
|
|
page_path text NULL,
|
|
props jsonb NOT NULL DEFAULT '{}',
|
|
client_ts timestamptz NOT NULL,
|
|
received_at timestamptz NOT NULL DEFAULT now()
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_analytics_events_received ON analytics_events(received_at DESC);
|
|
CREATE INDEX IF NOT EXISTS idx_analytics_events_name_day ON analytics_events(name, ((received_at AT TIME ZONE 'UTC')::date));
|
|
CREATE INDEX IF NOT EXISTS idx_analytics_events_page ON analytics_events(page_path) WHERE page_path IS NOT NULL;
|
|
CREATE INDEX IF NOT EXISTS idx_analytics_events_session ON analytics_events(session_id);
|