Files
iam-service/docs/DB_PROVISIONING.md
2026-01-30 16:31:53 +08:00

2.3 KiB
Raw Blame History

数据库初始化与权限(归档)

本项目的 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.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
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
  • macOSHomebrew
brew install libpq
brew link --force libpq

验证方式:

psql --version

安装完成后重新执行:

BACKUP=1 ./scripts/db/rebuild_iam_db.sh