153 lines
6.0 KiB
Markdown
153 lines
6.0 KiB
Markdown
# PostgreSQL 部署脚本
|
||
|
||
本目录提供在测试/预发布环境快速拉起 PostgreSQL 的脚本,复用线上同名数据库与账号,方便迁移/恢复。
|
||
|
||
## 目录结构
|
||
|
||
- `create_databases.sql`:创建四个业务库与对应角色(可多次执行,存在则跳过)。
|
||
- `bootstrap.ps1`:PowerShell 包装脚本,调用 `psql` 执行 SQL。
|
||
- `seed_tenant_seckill_permissions.sql`:补齐租户端秒杀活动权限码、菜单权限与角色授权映射(可重复执行)。
|
||
- `seed_tenant_new_customer_permissions.sql`:补齐租户端新客有礼权限码、菜单权限与角色授权映射(可重复执行)。
|
||
- `seed_tenant_punch_card_permissions.sql`:补齐租户端次卡管理权限码、菜单权限与角色授权映射(可重复执行)。
|
||
- `seed_tenant_calendar_permissions.sql`:补齐租户端营销日历权限码、菜单权限与角色授权映射(可重复执行)。
|
||
- `seed_tenant_customer_permissions.sql`:补齐租户端客户管理权限码、菜单权限与角色授权映射(可重复执行)。
|
||
- `seed_tenant_member_permissions.sql`:补齐租户端会员管理权限码、菜单权限与角色授权映射(可重复执行)。
|
||
- `seed_tenant_member_stored_card_permissions.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`,其余参数保持一致。
|
||
|
||
## 秒杀权限补齐
|
||
|
||
在 `takeout_identity_db` 执行:
|
||
|
||
```powershell
|
||
psql -h <host> -p <port> -U identity_user -d takeout_identity_db -f .\seed_tenant_seckill_permissions.sql
|
||
```
|
||
|
||
脚本会完成:
|
||
|
||
1. 新增/修正 `tenant:marketing:seckill:*` 权限码。
|
||
2. 更新秒杀菜单 (`/marketing/seckill/index`) 的 `RequiredPermissions`、`MetaPermissions` 与 `AuthListJson`。
|
||
3. 参考满减权限映射,补齐角色模板与租户角色的秒杀权限授权。
|
||
|
||
## 新客有礼权限补齐
|
||
|
||
在 `takeout_identity_db` 执行:
|
||
|
||
```powershell
|
||
psql -h <host> -p <port> -U identity_user -d takeout_identity_db -f .\seed_tenant_new_customer_permissions.sql
|
||
```
|
||
|
||
脚本会完成:
|
||
|
||
1. 新增/修正 `tenant:marketing:new-customer:*` 权限码。
|
||
2. 更新新客有礼菜单 (`/marketing/new-customer/index`) 的 `RequiredPermissions`、`MetaPermissions` 与 `AuthListJson`。
|
||
3. 参考满减权限映射,补齐角色模板与租户角色的新客有礼权限授权。
|
||
|
||
## 次卡管理权限补齐
|
||
|
||
在 `takeout_identity_db` 执行:
|
||
|
||
```powershell
|
||
psql -h <host> -p <port> -U identity_user -d takeout_identity_db -f .\seed_tenant_punch_card_permissions.sql
|
||
```
|
||
|
||
脚本会完成:
|
||
|
||
1. 新增/修正 `tenant:marketing:punch-card:*` 权限码。
|
||
2. 更新次卡管理菜单 (`/marketing/punch-card/index`) 的 `RequiredPermissions`、`MetaPermissions` 与 `AuthListJson`。
|
||
3. 参考满减权限映射,补齐角色模板与租户角色的次卡管理权限授权。
|
||
|
||
## 营销日历权限补齐
|
||
|
||
在 `takeout_identity_db` 执行:
|
||
|
||
```powershell
|
||
psql -h <host> -p <port> -U identity_user -d takeout_identity_db -f .\seed_tenant_calendar_permissions.sql
|
||
```
|
||
|
||
脚本会完成:
|
||
|
||
1. 新增/修正 `tenant:marketing:calendar:*` 权限码。
|
||
2. 更新营销日历菜单 (`/marketing/calendar/index`) 的 `RequiredPermissions`、`MetaPermissions` 与 `AuthListJson`。
|
||
3. 参考满减权限映射,补齐角色模板与租户角色的营销日历权限授权。
|
||
|
||
## 客户管理权限补齐
|
||
|
||
在 `takeout_identity_db` 执行:
|
||
|
||
```powershell
|
||
psql -h <host> -p <port> -U identity_user -d takeout_identity_db -f .\seed_tenant_customer_permissions.sql
|
||
```
|
||
|
||
脚本会完成:
|
||
|
||
1. 新增/修正 `tenant:customer:*` 权限码(list/profile/analysis)。
|
||
2. 更新客户菜单 (`/customer/list|profile|analysis`) 的 `RequiredPermissions`、`MetaPermissions` 与 `AuthListJson`。
|
||
3. 按订单列表权限映射补齐客户列表(view/manage)与客户画像(profile/view)角色模板和租户角色授权;`analysis` 不做角色映射。
|
||
|
||
## 会员管理权限补齐
|
||
|
||
在 `takeout_identity_db` 执行:
|
||
|
||
```powershell
|
||
psql -h <host> -p <port> -U identity_user -d takeout_identity_db -f .\seed_tenant_member_permissions.sql
|
||
```
|
||
|
||
脚本会完成:
|
||
|
||
1. 新增/修正 `tenant:member:*` 权限码(view/manage)。
|
||
2. 更新会员管理菜单 (`/member/list/index`) 的 `RequiredPermissions`、`MetaPermissions` 与 `AuthListJson`。
|
||
3. 按订单列表权限映射补齐会员管理权限的角色模板与租户角色授权。
|
||
|
||
## 会员储值卡权限补齐
|
||
|
||
在 `takeout_identity_db` 执行:
|
||
|
||
```powershell
|
||
psql -h <host> -p <port> -U identity_user -d takeout_identity_db -f .\seed_tenant_member_stored_card_permissions.sql
|
||
```
|
||
|
||
脚本会完成:
|
||
|
||
1. 新增/修正 `tenant:member:stored-card:*` 权限码(view/manage)。
|
||
2. 更新会员储值卡菜单 (`/member/stored-card/index`) 的 `RequiredPermissions`、`MetaPermissions` 与 `AuthListJson`。
|
||
3. 按订单列表权限映射补齐会员储值卡权限的角色模板与租户角色授权。
|
||
|
||
## 常见问题
|
||
|
||
| 问题 | 处理方式 |
|
||
| --- | --- |
|
||
| `psql : command not found` | 确认 PostgreSQL bin 目录已加入 PATH。 |
|
||
| `permission denied to create database` | 改用具有 `CREATEDB` 权限的管理员执行脚本。 |
|
||
| 需要删除库 | 先 `DROP DATABASE xxx`,再运行脚本重新创建。 |
|