018_group_keys_pool.sql 1.9 KB

12345678910111213141516171819202122232425262728293031
  1. -- Migration 018: 分组-Key 号池(一对多关系)
  2. -- 一个分组可以有多个key,形成号池
  3. SET search_path TO crawl;
  4. -- 分组-Key关联表
  5. CREATE TABLE IF NOT EXISTS group_keys (
  6. id BIGSERIAL PRIMARY KEY,
  7. group_id BIGINT NOT NULL REFERENCES model_groups(id) ON DELETE CASCADE,
  8. api_key_id BIGINT NOT NULL REFERENCES api_keys(id) ON DELETE CASCADE,
  9. priority INT NOT NULL DEFAULT 0, -- 优先级(越大越高)
  10. weight INT NOT NULL DEFAULT 1, -- 权重(负载均衡用)
  11. is_active BOOLEAN NOT NULL DEFAULT TRUE, -- 是否启用
  12. status VARCHAR(20) NOT NULL DEFAULT 'active', -- active/rate_limited/banned/failed
  13. status_msg TEXT, -- 状态说明
  14. last_used_at TIMESTAMPTZ, -- 最后使用时间
  15. total_tokens BIGINT NOT NULL DEFAULT 0, -- 该key在该分组下使用的token总数
  16. request_count BIGINT NOT NULL DEFAULT 0, -- 请求次数
  17. error_count BIGINT NOT NULL DEFAULT 0, -- 错误次数
  18. created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  19. updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  20. UNIQUE(group_id, api_key_id) -- 同一分组不能重复添加同一个key
  21. );
  22. CREATE INDEX IF NOT EXISTS idx_group_keys_group ON group_keys(group_id);
  23. CREATE INDEX IF NOT EXISTS idx_group_keys_key ON group_keys(api_key_id);
  24. CREATE INDEX IF NOT EXISTS idx_group_keys_status ON group_keys(status);
  25. COMMENT ON TABLE group_keys IS '分组-Key号池关系表,一个分组可以有多个key';
  26. COMMENT ON COLUMN group_keys.priority IS '优先级,数值越大越优先使用';
  27. COMMENT ON COLUMN group_keys.weight IS '权重,用于加权负载均衡';
  28. COMMENT ON COLUMN group_keys.status IS '状态: active=正常, rate_limited=限流, banned=禁用, failed=失败';