mmap/migrations/005_init_datainfo.sql
2025-07-30 21:32:14 +08:00

59 lines
2.3 KiB
PL/PgSQL

-- Add migration script here
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
-- 数据入库记录表
CREATE TABLE IF NOT EXISTS data_ingestion (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
ingestion_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
data_time TIMESTAMP NOT NULL,
source VARCHAR(25) NOT NULL,
storage_url TEXT NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- 添加字段注释
COMMENT ON COLUMN data_ingestion.id IS '数据唯一标识符';
COMMENT ON COLUMN data_ingestion.ingestion_time IS '入库时间';
COMMENT ON COLUMN data_ingestion.data_time IS '数据表示的时间';
COMMENT ON COLUMN data_ingestion.source IS '存放源/数据来源';
COMMENT ON COLUMN data_ingestion.storage_url IS '存放URL或路径';
-- 为快速查找创建索引
CREATE INDEX IF NOT EXISTS idx_data_ingestion_ingestion_time ON data_ingestion(ingestion_time);
CREATE INDEX IF NOT EXISTS idx_data_ingestion_id_ingestion_time ON data_ingestion(id, ingestion_time);
CREATE INDEX IF NOT EXISTS idx_data_ingestion_data_time ON data_ingestion(data_time);
CREATE INDEX IF NOT EXISTS idx_data_ingestion_source ON data_ingestion(source);
-- 可选的复合索引(根据实际查询需求启用)
-- 如果经常按时间范围+来源查询,取消注释下面的索引
-- CREATE INDEX IF NOT EXISTS idx_data_ingestion_data_time_source ON data_ingestion(data_time, source);
-- CREATE INDEX IF NOT EXISTS idx_data_ingestion_source_data_time ON data_ingestion(source, data_time);
-- 创建更新时间自动更新的触发器函数
CREATE OR REPLACE FUNCTION update_updated_at_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = CURRENT_TIMESTAMP;
RETURN NEW;
END;
$$ language 'plpgsql';
-- 为表创建更新时间触发器
CREATE TRIGGER update_data_ingestion_updated_at
BEFORE UPDATE ON data_ingestion
FOR EACH ROW
EXECUTE FUNCTION update_updated_at_column();
-- 创建用于查询的视图(可选)
CREATE OR REPLACE VIEW v_data_ingestion_summary AS
SELECT
id,
source,
COUNT(*) as record_count,
MIN(data_time) as earliest_data_time,
MAX(data_time) as latest_data_time,
MIN(ingestion_time) as first_ingestion_time,
MAX(ingestion_time) as last_ingestion_time
FROM data_ingestion
GROUP BY id, source;