| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- -- ============================================================================
- -- 平台主键切换:PostgreSQL identity/serial → 应用侧雪花 ID
- --
- -- 目标库:PostgreSQL master(zsjz-ai 平台库)
- -- 执行方式:手工执行(项目无 Flyway / Liquibase);可重复执行
- --
- -- 变更后:
- -- agent.row_id 由 AgentEntity 的 IdType.ASSIGN_ID 生成
- -- case_info.id 由 CaseInfo 的 IdType.ASSIGN_ID 生成
- -- sys_user.id 由 SysUser 的 IdType.ASSIGN_ID 生成
- -- gateway_user_route.id 由 UserRouteRepository 的 IdWorker.getId() 生成
- --
- -- 存量行保留原 id;新行必须由应用显式提供 id,数据库不再有默认值/序列。
- -- 迁移前请停止 ai-server / ai-gateway,避免旧进程继续按无 id 插入。
- -- ============================================================================
- -- 1. identity 列(agent / case_info)
- ALTER TABLE IF EXISTS agent
- ALTER COLUMN row_id DROP IDENTITY IF EXISTS;
- ALTER TABLE IF EXISTS case_info
- ALTER COLUMN id DROP IDENTITY IF EXISTS;
- -- 2. serial 列(sys_user / gateway_user_route)
- ALTER TABLE IF EXISTS sys_user
- ALTER COLUMN id DROP IDENTITY IF EXISTS;
- ALTER TABLE IF EXISTS sys_user
- ALTER COLUMN id DROP DEFAULT;
- ALTER TABLE IF EXISTS gateway_user_route
- ALTER COLUMN id DROP IDENTITY IF EXISTS;
- ALTER TABLE IF EXISTS gateway_user_route
- ALTER COLUMN id DROP DEFAULT;
- -- 3. 删除遗留序列(identity 序列可能已被 DROP IDENTITY 一并删除)
- DROP SEQUENCE IF EXISTS public.dataagent_agent_row_id_seq;
- DROP SEQUENCE IF EXISTS public.case_info_id_seq;
- DROP SEQUENCE IF EXISTS public.sys_user_id_seq;
- DROP SEQUENCE IF EXISTS public.gateway_user_route_id_seq;
- -- 4. 注释同步(避免继续显示“自增”;表不存在时跳过,保证脚本可用于部分环境)
- DO $$
- BEGIN
- IF to_regclass('public.agent') IS NOT NULL THEN
- COMMENT ON COLUMN agent.row_id IS '主键 ID(MyBatis-Plus 雪花算法生成)';
- END IF;
- IF to_regclass('public.case_info') IS NOT NULL THEN
- COMMENT ON COLUMN case_info.id IS '案件 ID(MyBatis-Plus 雪花算法生成)';
- END IF;
- IF to_regclass('public.sys_user') IS NOT NULL THEN
- COMMENT ON COLUMN sys_user.id IS '用户 ID(MyBatis-Plus 雪花算法生成)';
- END IF;
- IF to_regclass('public.gateway_user_route') IS NOT NULL THEN
- COMMENT ON COLUMN gateway_user_route.id IS '路由 ID(应用侧雪花算法生成)';
- END IF;
- END $$;
- -- 5. 校验:以下应为 0 行
- SELECT c.relname AS table_name,
- a.attname AS column_name,
- a.attidentity,
- pg_get_expr(ad.adbin, ad.adrelid) AS column_default,
- pg_get_serial_sequence(format('%I.%I', n.nspname, c.relname), a.attname) AS serial_sequence
- FROM pg_attribute a
- JOIN pg_class c ON c.oid = a.attrelid
- JOIN pg_namespace n ON n.oid = c.relnamespace
- LEFT JOIN pg_attrdef ad ON ad.adrelid = a.attrelid AND ad.adnum = a.attnum
- WHERE n.nspname = 'public'
- AND c.relkind = 'r'
- AND a.attnum > 0
- AND NOT a.attisdropped
- AND (c.relname, a.attname) IN (
- ('agent', 'row_id'),
- ('case_info', 'id'),
- ('sys_user', 'id'),
- ('gateway_user_route', 'id')
- )
- AND (a.attidentity <> '' OR ad.adbin IS NOT NULL OR pg_get_serial_sequence(
- format('%I.%I', n.nspname, c.relname), a.attname) IS NOT NULL);
|