91 lines
2.3 KiB
Markdown
91 lines
2.3 KiB
Markdown
# 数据库初始化与权限(归档)
|
||
|
||
本项目的 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
|
||
```
|