081_create_channels.sql 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. -- Create channels table for managing pricing channels.
  2. -- A channel groups multiple groups together and provides custom model pricing.
  3. SET LOCAL lock_timeout = '5s';
  4. SET LOCAL statement_timeout = '10min';
  5. -- 渠道表
  6. CREATE TABLE IF NOT EXISTS channels (
  7. id BIGSERIAL PRIMARY KEY,
  8. name VARCHAR(100) NOT NULL,
  9. description TEXT DEFAULT '',
  10. status VARCHAR(20) NOT NULL DEFAULT 'active',
  11. created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  12. updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
  13. );
  14. -- 渠道名称唯一索引
  15. CREATE UNIQUE INDEX IF NOT EXISTS idx_channels_name ON channels (name);
  16. CREATE INDEX IF NOT EXISTS idx_channels_status ON channels (status);
  17. -- 渠道-分组关联表(每个分组只能属于一个渠道)
  18. CREATE TABLE IF NOT EXISTS channel_groups (
  19. id BIGSERIAL PRIMARY KEY,
  20. channel_id BIGINT NOT NULL REFERENCES channels(id) ON DELETE CASCADE,
  21. group_id BIGINT NOT NULL REFERENCES groups(id) ON DELETE CASCADE,
  22. created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
  23. );
  24. CREATE UNIQUE INDEX IF NOT EXISTS idx_channel_groups_group_id ON channel_groups (group_id);
  25. CREATE INDEX IF NOT EXISTS idx_channel_groups_channel_id ON channel_groups (channel_id);
  26. -- 渠道模型定价表(一条定价可绑定多个模型)
  27. CREATE TABLE IF NOT EXISTS channel_model_pricing (
  28. id BIGSERIAL PRIMARY KEY,
  29. channel_id BIGINT NOT NULL REFERENCES channels(id) ON DELETE CASCADE,
  30. models JSONB NOT NULL DEFAULT '[]',
  31. input_price NUMERIC(20,12),
  32. output_price NUMERIC(20,12),
  33. cache_write_price NUMERIC(20,12),
  34. cache_read_price NUMERIC(20,12),
  35. image_output_price NUMERIC(20,8),
  36. created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  37. updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
  38. );
  39. CREATE INDEX IF NOT EXISTS idx_channel_model_pricing_channel_id ON channel_model_pricing (channel_id);
  40. COMMENT ON TABLE channels IS '渠道管理:关联多个分组,提供自定义模型定价';
  41. COMMENT ON TABLE channel_groups IS '渠道-分组关联表:每个分组最多属于一个渠道';
  42. COMMENT ON TABLE channel_model_pricing IS '渠道模型定价:一条定价可绑定多个模型,价格一致';
  43. COMMENT ON COLUMN channel_model_pricing.models IS '绑定的模型列表,JSON 数组,如 ["claude-opus-4-6","claude-opus-4-6-thinking"]';
  44. COMMENT ON COLUMN channel_model_pricing.input_price IS '每 token 输入价格(USD),NULL 表示使用默认';
  45. COMMENT ON COLUMN channel_model_pricing.output_price IS '每 token 输出价格(USD),NULL 表示使用默认';
  46. COMMENT ON COLUMN channel_model_pricing.cache_write_price IS '缓存写入每 token 价格,NULL 表示使用默认';
  47. COMMENT ON COLUMN channel_model_pricing.cache_read_price IS '缓存读取每 token 价格,NULL 表示使用默认';
  48. COMMENT ON COLUMN channel_model_pricing.image_output_price IS '图片输出价格(Gemini Image 等),NULL 表示使用默认';