# PostgreSQL 部署脚本 本目录提供在测试/预发布环境快速拉起 PostgreSQL 的脚本,复用线上同名数据库与账号,方便迁移/恢复。 ## 目录结构 - `create_databases.sql`:创建四个业务库与对应角色(可多次执行,存在则跳过)。 - `bootstrap.ps1`:PowerShell 包装脚本,调用 `psql` 执行 SQL。 - `seed_tenant_seckill_permissions.sql`:补齐租户端秒杀活动权限码、菜单权限与角色授权映射(可重复执行)。 - `seed_tenant_new_customer_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 -p -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 -p -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. 参考满减权限映射,补齐角色模板与租户角色的新客有礼权限授权。 ## 常见问题 | 问题 | 处理方式 | | --- | --- | | `psql : command not found` | 确认 PostgreSQL bin 目录已加入 PATH。 | | `permission denied to create database` | 改用具有 `CREATEDB` 权限的管理员执行脚本。 | | 需要删除库 | 先 `DROP DATABASE xxx`,再运行脚本重新创建。 |