2.3 KiB
2.3 KiB
数据库初始化与权限(归档)
本项目的 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) 创建用户与数据库(首次环境准备)
在具有足够权限的数据库账号下执行:
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 并重建表结构):
export DATABASE_URL='postgres://iam_service_user:***@host:5432/iam_service_db'
BACKUP=1 ./scripts/db/rebuild_iam_db.sh
脚本会按顺序执行:
sql/drop_iam_schema.sqlsql/schema_post_init.sqlsql/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:
sudo apt-get update && sudo apt-get install -y postgresql-client
- RHEL/CentOS/Fedora:
sudo dnf install -y postgresql
- Alpine:
sudo apk add postgresql-client
- macOS(Homebrew):
brew install libpq
brew link --force libpq
验证方式:
psql --version
安装完成后重新执行:
BACKUP=1 ./scripts/db/rebuild_iam_db.sh