# 数据库初始化说明 ## 概述 本目录包含城市生命线AI数智化平台的数据库初始化脚本,用于创建表结构和插入基础数据。 ## 文件说明 ### 表结构创建脚本 | 文件名 | 说明 | |--------|------| | `createDB.sql` | 创建数据库 | | `createTablePermission.sql` | 创建权限相关表(部门、角色、权限、视图、ACL等) | | `createTableUser.sql` | 创建用户相关表(用户、用户信息、登录日志) | | `createTableFile.sql` | 创建文件管理表 | | `createTableMessage.sql` | 创建消息通知表 | | `createTableLog.sql` | 创建日志表 | | `createTableConfig.sql` | 创建配置管理表 | | `createTableKnowledge.sql` | 创建知识库表 | | `createTableBidding.sql` | 创建招投标业务表 | | `createTableCustomerService.sql` | 创建智能客服表 | | `createTableAgent.sql` | 创建智能体表(暂不启用) | ### 数据初始化脚本 | 文件名 | 说明 | 是否必需 | |--------|------|----------| | `initDataPermission.sql` | 初始化权限基础数据(部门、角色、权限、视图、模块) | ✅ 必需 | | `initDataUser.sql` | 初始化用户数据(管理员账户、演示用户) | ✅ 必需 | | `initDataMessage.sql` | 初始化消息渠道配置和模板 | ✅ 必需 | | `initDataConfig.sql` | 初始化系统配置参数 | ✅ 必需 | ### 总入口脚本 - `initAll.sql` - 一键执行所有建表和初始化脚本 ## 使用方法 ### 方式一:使用总入口脚本(推荐) ```bash # 进入 PostgreSQL 命令行 psql -U postgres # 执行总初始化脚本 \i /path/to/urbanLifelineServ/.bin/database/postgres/sql/initAll.sql ``` ### 方式二:分步执行 #### 第一步:创建表结构 ```bash # 创建数据库 \i createDB.sql # 创建各模块表结构 \i createTablePermission.sql \i createTableUser.sql \i createTableFile.sql \i createTableMessage.sql \i createTableLog.sql \i createTableConfig.sql \i createTableKnowledge.sql \i createTableBidding.sql \i createTableCustomerService.sql ``` #### 第二步:初始化基础数据 ```bash # 按顺序执行初始化脚本 \i initDataPermission.sql \i initDataUser.sql \i initDataMessage.sql \i initDataConfig.sql ``` ## 初始化数据说明 ### 1. 权限基础数据 (initDataPermission.sql) **初始化内容:** - **根部门**:dept_root - **全局角色**: - 超级管理员 (role_super_admin) - 拥有所有权限 - 系统管理员 (role_system_admin) - 拥有系统管理权限 - 普通用户 (role_user) - 基础查看和操作权限 - 访客 (role_guest) - 仅查看权限 - **系统模块**: - 系统管理 (mod_system) - 文件管理 (mod_file) - 消息通知 (mod_message) - 配置管理 (mod_config) - 知识库 (mod_knowledge) - 招投标 (mod_bidding) - 智能客服 (mod_customer_service) - **系统权限**:30+ 个基础权限,涵盖用户、角色、部门、权限、文件、消息、配置管理 - **系统视图(菜单)**: - 系统管理菜单及其子菜单 - 业务管理菜单框架 ### 2. 用户数据 (initDataUser.sql) **初始化账户:** | 用户 | 账号 | 默认密码 | 角色 | 说明 | |------|------|----------|------|------| | 系统管理员 | admin | admin123 | 超级管理员 | 拥有所有权限 | | 演示用户 | demo | admin123 | 普通用户 | 用于演示和测试 | **⚠️ 安全提示:** - 生产环境部署前,必须修改默认密码 - 密码使用 bcrypt 加密存储 - 建议删除演示用户账户 ### 3. 消息渠道配置 (initDataMessage.sql) **初始化内容:** - **消息渠道**(默认禁用,需配置后启用): - 应用内消息 (app) - 默认启用 - 短信通知 (sms) - 邮件通知 (email) - 微信公众号 (wechat_official_account) - 微信小程序 (wechat_applet) - 钉钉通知 (dingtalk) - **消息模板**: - 用户注册欢迎 - 密码重置通知 - 系统维护通知 - 工单创建通知 - 招标公告发布 ### 4. 系统配置 (initDataConfig.sql) **初始化配置分组:** - **站点配置**:站点名称、Logo、ICP备案 - **国际化**:默认语言、时区 - **安全认证**:密码策略、JWT过期时间、会话超时、注册开关 - **存储上传**:最大上传大小、存储后端、存储路径 - **通知配置**:邮件SMTP、短信服务商 - **日志审计**:日志级别、审计日志保留天数 - **平台特性**:维护模式、ACL策略开关 ## 注意事项 1. **执行顺序**:必须按照 `initAll.sql` 中的顺序执行,先创建表结构,再插入数据 2. **依赖关系**:初始化数据脚本有依赖关系,必须按顺序执行 3. **数据库权限**:执行脚本需要具有创建数据库、创建表、插入数据的权限 4. **字符编码**:确保数据库使用 UTF-8 编码 5. **时区设置**:建议数据库时区设置为 Asia/Shanghai 或 UTC ## 验证初始化结果 执行以下 SQL 验证初始化是否成功: ```sql -- 检查表是否创建成功 SELECT schemaname, tablename FROM pg_tables WHERE schemaname IN ('sys', 'file', 'message', 'config') ORDER BY schemaname, tablename; -- 检查角色数量 SELECT COUNT(*) as role_count FROM sys.tb_sys_role WHERE deleted = false; -- 预期结果:4 -- 检查权限数量 SELECT COUNT(*) as permission_count FROM sys.tb_sys_permission WHERE deleted = false; -- 预期结果:30+ -- 检查用户数量 SELECT COUNT(*) as user_count FROM sys.tb_sys_user WHERE deleted = false; -- 预期结果:2 -- 检查消息渠道数量 SELECT COUNT(*) as channel_count FROM message.tb_message_channel WHERE deleted = false; -- 预期结果:6 -- 检查系统配置数量 SELECT COUNT(*) as config_count FROM config.tb_sys_config WHERE deleted = false; -- 预期结果:20+ ``` ## 重置数据库 如需重新初始化数据库,可以执行以下操作: ```sql -- 删除所有 schema(谨慎操作!) DROP SCHEMA IF EXISTS sys CASCADE; DROP SCHEMA IF EXISTS file CASCADE; DROP SCHEMA IF EXISTS message CASCADE; DROP SCHEMA IF EXISTS config CASCADE; DROP SCHEMA IF EXISTS knowledge CASCADE; DROP SCHEMA IF EXISTS bidding CASCADE; DROP SCHEMA IF EXISTS customer_service CASCADE; DROP SCHEMA IF EXISTS log CASCADE; -- 然后重新执行 initAll.sql \i initAll.sql ``` ## 常见问题 ### Q: 执行初始化脚本报错 "relation already exists" A: 表已存在,可以选择删除对应的表或 schema 后重新执行 ### Q: 如何修改管理员默认密码? A: 修改 `initDataUser.sql` 中的 password 字段,使用 bcrypt 加密后的密码哈希 ### Q: 如何自定义初始化数据? A: 直接修改对应的 `initData*.sql` 文件,按照现有格式添加或修改数据 ### Q: 业务表(知识库、招投标、客服)需要初始化数据吗? A: 不需要,这些表的数据在系统运行时动态产生 ## 联系支持 如有问题,请联系技术支持团队。