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