Files
urbanLifeline/urbanLifelineServ/.bin/database/postgres/sql/README_INIT.md
2025-12-02 14:59:34 +08:00

6.8 KiB
Raw Blame History

数据库初始化说明

概述

本目录包含城市生命线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 - 一键执行所有建表和初始化脚本

使用方法

方式一:使用总入口脚本(推荐)

# 进入 PostgreSQL 命令行
psql -U postgres

# 执行总初始化脚本
\i /path/to/urbanLifelineServ/.bin/database/postgres/sql/initAll.sql

方式二:分步执行

第一步:创建表结构

# 创建数据库
\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

第二步:初始化基础数据

# 按顺序执行初始化脚本
\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 验证初始化是否成功:

-- 检查表是否创建成功
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+

重置数据库

如需重新初始化数据库,可以执行以下操作:

-- 删除所有 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: 不需要,这些表的数据在系统运行时动态产生

联系支持

如有问题,请联系技术支持团队。