-- ============================================================ -- 002_config.sql — 配置表初始化 -- ============================================================ -- Docker Compose 首次启动时在 001_init.sql 之后自动执行 -- 挂载路径:./data/init-db:/docker-entrypoint-initdb.d -- 执行顺序:按文件名排序(001 → 002) -- ============================================================ -- ============================================================ -- 1. monitored_symbols — 监控交易对配置 -- ============================================================ -- 用途:声明数据采集模块需要订阅哪些交易对的 K 线流 -- 消费方:WebSocket 行情采集服务启动时读取此表决定订阅列表 CREATE TABLE IF NOT EXISTS monitored_symbols ( id SERIAL PRIMARY KEY, -- ---- 标识维度(与 klines 表对齐) ---- exchange TEXT NOT NULL, -- 交易所:binance / okx / bybit symbol TEXT NOT NULL, -- 交易对:BTCUSDT / ETHUSDT interval TEXT NOT NULL, -- K 线周期:1m / 5m / 15m / 1h / 4h / 1d -- ---- 控制字段 ---- enabled BOOLEAN NOT NULL DEFAULT TRUE, -- 是否启用采集 priority SMALLINT NOT NULL DEFAULT 0, -- 优先级(数值越大越优先,用于限频时取舍) -- ---- 备注 ---- label TEXT, -- 人类可读标签,如 "BTC/USDT 1分钟线" notes TEXT, -- 备注说明 -- ---- 元数据 ---- created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), -- 同一 (exchange, symbol, interval) 组合不可重复 UNIQUE (exchange, symbol, interval) ); -- 索引:按启用状态快速筛选 CREATE INDEX IF NOT EXISTS idx_monitored_symbols_enabled ON monitored_symbols (enabled, exchange, priority DESC); -- 索引:按交易对查找所有周期 CREATE INDEX IF NOT EXISTS idx_monitored_symbols_symbol ON monitored_symbols (symbol, interval); -- ============================================================ -- 2. exchange_config — 交易所连接配置 -- ============================================================ -- 用途:存储各交易所的 API 端点、限频参数等连接级配置 -- ⚠️ 安全提醒:API Key/Secret 不应明文存储于此表, -- 建议通过环境变量或 Vault 注入,此表仅存非敏感参数 CREATE TABLE IF NOT EXISTS exchange_config ( id SERIAL PRIMARY KEY, -- ---- 交易所标识 ---- exchange TEXT NOT NULL UNIQUE, -- 交易所:binance / okx / bybit -- ---- 连接参数 ---- rest_url TEXT, -- REST API 基础 URL(留空则用 SDK 默认值) ws_url TEXT, -- WebSocket 基础 URL(留空则用 SDK 默认值) ws_ping_interval_ms INTEGER NOT NULL DEFAULT 30000, -- 心跳间隔(毫秒) -- ---- 限频控制 ---- rate_limit_per_sec REAL NOT NULL DEFAULT 20.0, -- 每秒最大请求数 max_reconnect_attempts INT NOT NULL DEFAULT 10, -- 最大重连次数 reconnect_delay_ms INT NOT NULL DEFAULT 3000, -- 重连延迟基数(指数退避) -- ---- 开关 ---- enabled BOOLEAN NOT NULL DEFAULT TRUE, -- 是否启用该交易所 -- ---- 备注 ---- notes TEXT, -- ---- 元数据 ---- created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); -- ============================================================ -- 3. app_config — 全局应用配置(Key-Value) -- ============================================================ -- 用途:存储不适合硬编码的运行时参数,如批量写入阈值 CREATE TABLE IF NOT EXISTS app_config ( id SERIAL PRIMARY KEY, key TEXT NOT NULL UNIQUE, -- 配置键 value TEXT NOT NULL, -- 配置值(统一存为文本,消费方自行解析类型) description TEXT, -- 说明 updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); -- 默认配置项(仅首次插入,已存在则跳过) INSERT INTO app_config (key, value, description) VALUES ('batch_size', '500', '批量写入缓冲区条数阈值'), ('flush_interval_ms', '1000', '缓冲区最大等待时间(毫秒)'), ('log_level', 'info', '日志级别:trace / debug / info / warn / error'), ('redis_publish_enabled', 'true', '是否启用 Redis 发布') ON CONFLICT (key) DO NOTHING; -- ============================================================ -- 4. 预置种子数据 -- ============================================================ -- 预置 Binance 主力交易对监控配置(仅首次插入) INSERT INTO monitored_symbols (exchange, symbol, interval, enabled, priority, label) VALUES -- Binance 主力交易对 — 1m ('binance', 'BTCUSDT', '1m', TRUE, 10, 'BTC/USDT 1分钟线'), ('binance', 'ETHUSDT', '1m', TRUE, 9, 'ETH/USDT 1分钟线'), ('binance', 'SOLUSDT', '1m', TRUE, 8, 'SOL/USDT 1分钟线'), ('binance', 'BNBUSDT', '1m', TRUE, 7, 'BNB/USDT 1分钟线'), -- Binance 主力交易对 — 1h(策略用) ('binance', 'BTCUSDT', '1h', TRUE, 10, 'BTC/USDT 1小时线'), ('binance', 'ETHUSDT', '1h', TRUE, 9, 'ETH/USDT 1小时线'), ('binance', 'SOLUSDT', '1h', TRUE, 8, 'SOL/USDT 1小时线'), -- Binance 主力交易对 — 1d(日线) ('binance', 'BTCUSDT', '1d', TRUE, 10, 'BTC/USDT 日线'), ('binance', 'ETHUSDT', '1d', TRUE, 9, 'ETH/USDT 日线') ON CONFLICT (exchange, symbol, interval) DO NOTHING; -- 预置交易所默认连接配置(仅首次插入) INSERT INTO exchange_config (exchange, rate_limit_per_sec, notes) VALUES ('binance', 20.0, 'Binance 现货 — 默认权重限频 1200/min'), ('okx', 10.0, 'OKX 现货 — 默认限频 10/s'), ('bybit', 10.0, 'Bybit 现货 — 默认限频 10/s') ON CONFLICT (exchange) DO NOTHING; -- ============================================================ -- 初始化完成 -- ============================================================ DO $$ BEGIN RAISE NOTICE '002_config.sql — Config tables initialized.'; RAISE NOTICE 'Tables: monitored_symbols, exchange_config, app_config'; RAISE NOTICE 'Seed data: 9 symbols (Binance), 3 exchanges'; END $$;