# 数据库初始化与权限(归档) 本项目的 schema 初始化已从历史的 `init.sql` 拆分为“基础设施初始化(DB/User)”与“schema 初始化(DDL/DML)”两部分: - **基础设施初始化(DB/User)**:通常由 DBA/平台完成,适用于首次部署或新环境准备。 - **schema 初始化(DDL/DML)**:适用于开发/测试环境的可重复重建,见 `sql/schema_post_init.sql`,并由 `scripts/db/rebuild_iam_db.sh` 一键执行。 ## 1) 创建用户与数据库(首次环境准备) 在具有足够权限的数据库账号下执行: ```sql CREATE USER iam_service_user WITH PASSWORD 'iam_service_password'; CREATE DATABASE iam_service_db OWNER iam_service_user; GRANT ALL PRIVILEGES ON DATABASE iam_service_db TO iam_service_user; ``` 注意事项: - 生产环境不要在仓库内硬编码密码;应由密钥管理系统注入并轮换。 - 如果需要启用扩展(如 `uuid-ossp`),请确认应用用户是否有权限,或由 DBA 预先安装。 ## 2) schema 重建(开发/CI) 推荐使用一键脚本(会 DROP 并重建表结构): ```bash export DATABASE_URL='postgres://iam_service_user:***@host:5432/iam_service_db' BACKUP=1 ./scripts/db/rebuild_iam_db.sh ``` 脚本会按顺序执行: - `sql/drop_iam_schema.sql` - `sql/schema_post_init.sql` - `sql/verify_iam_schema.sql` ## 3) 常见问题 ### 3.1 `.env` 配了 DATABASE_URL 但脚本报 “DATABASE_URL is required” `.env` 只是“文件”,不会自动变成进程环境变量。`cargo run` 会通过 `dotenvy` 加载 `.env`,但 bash 脚本默认不会。 解决方式: - 直接 `export DATABASE_URL=...` 后再执行脚本;或 - 保持 `.env` 存在于项目根目录,脚本会自动读取其中的 `DATABASE_URL`。 ### 3.2 执行脚本报 “psql: 未找到命令” 原因:系统未安装 PostgreSQL 客户端工具(`psql`/`pg_dump`),或不在 `PATH` 中。 安装方式: - Ubuntu/Debian: ```bash sudo apt-get update && sudo apt-get install -y postgresql-client ``` - RHEL/CentOS/Fedora: ```bash sudo dnf install -y postgresql ``` - Alpine: ```bash sudo apk add postgresql-client ``` - macOS(Homebrew): ```bash brew install libpq brew link --force libpq ``` 验证方式: ```bash psql --version ``` 安装完成后重新执行: ```bash BACKUP=1 ./scripts/db/rebuild_iam_db.sh ```