# PostgreSQL 部署脚本

本目录提供在测试/预发布环境快速拉起 PostgreSQL 的脚本，复用线上同名数据库与账号，方便迁移/恢复。

## 目录结构

- `create_databases.sql`：创建四个业务库与对应角色（可多次执行，存在则跳过）。
- `bootstrap.ps1`：PowerShell 包装脚本，调用 `psql` 执行 SQL。

## 前置条件

1. 已安装 PostgreSQL 12+，并能以管理员身份访问（默认使用 `postgres`）。
2. 本地已配置 `psql` 可执行命令。

## 使用方法

```powershell
cd deploy/postgres
.\bootstrap.ps1 `
  -Host 120.53.222.17 `
  -Port 5432 `
  -AdminUser postgres `
  -AdminPassword "超级管理员密码"
```

脚本会：

1. 创建/更新以下角色与库：
   - `app_user` / `takeout_app_db`
   - `identity_user` / `takeout_identity_db`
   - `dictionary_user` / `takeout_dictionary_db`
   - `hangfire_user` / `takeout_hangfire_db`
2. 为库设置 COMMENT，授予 Schema `public` 的 CRUD 权限。
3. 输出执行日志，失败时终止。

## 自定义

- 如需修改密码或新增库，编辑 `create_databases.sql` 后重新运行脚本。
- 若在本地拉起测试库，可把 `Host` 指向 `localhost`，其余参数保持一致。

## 常见问题

| 问题 | 处理方式 |
| --- | --- |
| `psql : command not found` | 确认 PostgreSQL bin 目录已加入 PATH。 |
| `permission denied to create database` | 改用具有 `CREATEDB` 权限的管理员执行脚本。 |
| 需要删除库 | 先 `DROP DATABASE xxx`，再运行脚本重新创建。 |
