agent_expert.sql 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. -- =====================================================================
  2. -- 专家(智能体)管理:用户隔离 + 内置标记
  3. --
  4. -- 幂等脚本(可重复执行)。项目无 Flyway,按 sql/ 目录既有约定手工执行。
  5. --
  6. -- 语义:
  7. -- is_builtin = 1 内置专家:全局可见、不可编辑、不可删除
  8. -- is_builtin = 0 用户自建:仅创建者可见(user_id 过滤)、可编辑可删除
  9. -- user_id 创建者(sa-token 登录用户 ID);内置专家为 1(平台管理员)
  10. --
  11. -- 注:skills_allow_json / tools_allow_json 两列实体早已映射且对话链路可用,
  12. -- 正常部署应已存在;这里仅做兜底核对。
  13. -- =====================================================================
  14. ALTER TABLE agent ADD COLUMN IF NOT EXISTS user_id BIGINT;
  15. ALTER TABLE agent ADD COLUMN IF NOT EXISTS is_builtin SMALLINT NOT NULL DEFAULT 0;
  16. ALTER TABLE agent ADD COLUMN IF NOT EXISTS skills_allow_json TEXT;
  17. ALTER TABLE agent ADD COLUMN IF NOT EXISTS tools_allow_json TEXT;
  18. CREATE INDEX IF NOT EXISTS idx_agent_user_id ON agent(user_id);
  19. -- 存量 agent(含默认 agent row_id=1)一律视为内置、归属平台管理员
  20. UPDATE agent SET is_builtin = 1, user_id = COALESCE(user_id, 1) WHERE user_id IS NULL;
  21. -- =====================================================================
  22. -- 主键改为应用侧雪花(MyBatis-Plus ASSIGN_ID),移除 identity 序列
  23. -- =====================================================================
  24. -- 清掉重复 id 的脏行(保留 is_builtin=1 的内置行)
  25. DELETE FROM agent WHERE row_id = 1 AND is_builtin = 0;
  26. -- 存量库移除 identity/序列(幂等);新行由 AgentService.save 的雪花 ID 提供
  27. ALTER TABLE agent ALTER COLUMN row_id DROP IDENTITY IF EXISTS;
  28. ALTER TABLE agent ALTER COLUMN row_id DROP DEFAULT;
  29. DROP SEQUENCE IF EXISTS public.dataagent_agent_row_id_seq;
  30. -- 补主键:行 id 唯一是 selectById/会话绑定的前提
  31. DO $$
  32. BEGIN
  33. IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conrelid = 'agent'::regclass AND contype = 'p') THEN
  34. ALTER TABLE agent ADD CONSTRAINT agent_pkey PRIMARY KEY (row_id);
  35. END IF;
  36. END $$;