149 lines
6.1 KiB
Markdown
149 lines
6.1 KiB
Markdown
# 在 1Panel 环境初始化 doodle_prod 表结构
|
||
|
||
更新日期:2026-10-20。本页只说明首次建表,不导入本地分类/题型或 CloudBase 用户业务数据。已在本机隔离库验证,尚未执行云端建表。
|
||
|
||
## 1. 使用哪份文件
|
||
|
||
使用 [initialize-doodle-prod.sql](../../deploy/postgres/initialize-doodle-prod.sql),约 43 KB。
|
||
|
||
它从独立空库执行项目当前三次正式 Prisma 迁移后的结果生成,包含:
|
||
|
||
- 13 张完整业务表,含外键、唯一索引、部分索引、CHECK 约束和字段注释;
|
||
- 1 张 `_prisma_migrations` 技术表,包含实际执行产生的迁移历史及校验和;
|
||
- `page_configs/current` 和 `settings/homeAutoRefresh` 两条必要默认配置。
|
||
|
||
没有从 `doodle_dev` 复制分类、题型、用户或其他业务数据,也没有数据库账号密码、JWT 或微信/七牛密钥。原 CloudBase 服务和任务不受影响。
|
||
|
||
文件为普通 PostgreSQL 18 SQL,可用于 Adminer;没有 `psql` 专用命令或 `COPY FROM STDIN` 数据段。整个初始化包在单个事务中执行,错误会回滚。
|
||
|
||
## 2. 从 Adminer 登录云端 PostgreSQL
|
||
|
||
打开你已安装的 Adminer。填写:
|
||
|
||
| 配置 | 内容 |
|
||
| ------ | -------------------------------------------------- |
|
||
| 系统 | PostgreSQL |
|
||
| 服务器 | `1Panel-postgresql-RqP6:5432` |
|
||
| 用户名 | `joey_postgresql`,当前已核查为 doodle_prod 所有者 |
|
||
| 密码 | 该数据库账号的密码 |
|
||
| 数据库 | `doodle_prod` |
|
||
|
||
密码在 Adminer 中自行填写,不发到聊天。容器名若因重装改变,先在 1Panel 容器列表核对;Adminer 和 PostgreSQL 需要有可通信的内部 Docker 网络。
|
||
|
||
这里由服务器上的 Adminer 连接 PostgreSQL,不依赖本机 DBX 直连,也无需为了建表开放公网 5432。
|
||
|
||
## 3. 先确认选中了空库
|
||
|
||
进入「SQL 命令」,执行:
|
||
|
||
```sql
|
||
SELECT current_database(), current_user;
|
||
|
||
SELECT tablename
|
||
FROM pg_tables
|
||
WHERE schemaname = 'public'
|
||
ORDER BY tablename;
|
||
```
|
||
|
||
第一条的库名必须是 `doodle_prod`。第二条应无表。
|
||
|
||
如果已有表,先判断是否已经初始化,不执行清表或删库。初始化文件也会拒绝含用户表、视图或序列的目标,不会覆盖已有结构。
|
||
|
||
## 4. 上传并执行建表 SQL
|
||
|
||
1. 在 Adminer 的「SQL 命令」页面,使用文件上传/选择文件入口。
|
||
2. 选择本机文件:`/Users/joey-xd/sites/doodle/doodle-store/deploy/postgres/initialize-doodle-prod.sql`。
|
||
3. 保持遇到错误停止,不选择忽略错误继续。
|
||
4. 执行并检查结果,要求没有 SQL 错误。
|
||
|
||
也可以使用编辑器打开文件,全选复制到 Adminer 的 SQL 输入框,一次执行完整文件。不要只选执行其中一段:前后包含事务、空库保护和提交前校验。
|
||
|
||
不要改文件中的目标库名或移除保护;它只允许首次初始化空的 `doodle_prod`(另外保留了本机隔离恢复验证库名模式)。
|
||
|
||
如果出现报错,先保留错误信息。完整文件的业务 DDL 与默认数据在同一事务中,失败时不会提交半套结构;不要重复执行局部 CREATE TABLE 试图拼补。
|
||
|
||
## 5. 检查是否成功
|
||
|
||
重新查看表列表,应该有 14 张表:
|
||
|
||
```sql
|
||
SELECT tablename
|
||
FROM pg_tables
|
||
WHERE schemaname = 'public'
|
||
ORDER BY tablename;
|
||
```
|
||
|
||
分别是:
|
||
|
||
```text
|
||
_prisma_migrations
|
||
admin_audit_logs
|
||
assets
|
||
categories
|
||
download_logs
|
||
favorites
|
||
job_runs
|
||
page_configs
|
||
settings
|
||
users
|
||
worksheet_grades
|
||
worksheet_resource_assets
|
||
worksheet_resources
|
||
worksheets
|
||
```
|
||
|
||
检查迁移记录和默认配置:
|
||
|
||
```sql
|
||
SELECT migration_name, finished_at, rolled_back_at
|
||
FROM public._prisma_migrations
|
||
ORDER BY migration_name;
|
||
|
||
SELECT id, version FROM public.page_configs;
|
||
SELECT id, value FROM public.settings;
|
||
|
||
SELECT
|
||
(SELECT count(*) FROM public.categories) AS categories,
|
||
(SELECT count(*) FROM public.worksheets) AS worksheets,
|
||
(SELECT count(*) FROM public.assets) AS assets,
|
||
(SELECT count(*) FROM public.users) AS users;
|
||
```
|
||
|
||
应有三条迁移,均 finished_at 非空、rolled_back_at 为空:
|
||
|
||
```text
|
||
0_v35_baseline
|
||
20261016000000_category_publication
|
||
20261019000000_member_assets
|
||
```
|
||
|
||
默认配置应有 `current` 与 `homeAutoRefresh`。四个业务计数应全部为 0,说明只是建表,尚未导入任何业务内容。
|
||
|
||
执行默认配置 INSERT 不会启动任务进程;以后新后端启动时才按其设置运行,旧 CloudBase 的开关和任务持续独立。
|
||
|
||
## 6. 完成后做什么
|
||
|
||
1. 在 1Panel 为刚初始化的 `doodle_prod` 创建一份备份。
|
||
2. 继续导入本地分类、题型及它们引用的必要资产;详细范围见 [首次内容导入手册](./分类与题型首次导入操作手册.md)。
|
||
3. 后续再按 [生产数据整合与导入方案](./生产数据整合与导入方案.md) 迁移 CloudBase 用户业务和最新统计。
|
||
4. 后端应用使用独立运行账号,不能把实例管理账号直接作为长期运行配置。账号授权在后端部署时单独设置。
|
||
|
||
这份 SQL 是当前三次迁移对应的首次空库快照,不能用于已有生产库升级。后续新增表或字段仍通过仓库正式 Prisma 迁移发布,不编辑已应用的历史迁移。
|
||
|
||
本机验证已经确认:快照恢复后 `prisma migrate status` 正常,随后 `migrate deploy` 没有待执行迁移,无需手工补写或再次登记这三条迁移。
|
||
|
||
## 7. 生成与验证记录
|
||
|
||
- 2026-10-20:在本机独立空库运行项目锁定的 Prisma 7.10.0 迁移,再导出普通 INSERT SQL;没有读取开发库业务表。
|
||
- 已核对快照迁移校验和与仓库原文件一致。
|
||
- 在第二个空库恢复成功,确认 14 张表、3 条迁移历史和 2 条默认配置。
|
||
- 重复初始化和错误目标库保护通过。
|
||
- 恢复后 Prisma 状态检查及无待执行迁移的 deploy 验证通过。
|
||
- 所有本次构建/验证临时库均已删除,云端未执行初始化。
|
||
|
||
SHA-256:
|
||
|
||
```text
|
||
b96493a163a20ca4fec4c597e4eb4c282361050a373a442f6651b2af25c56b3f
|
||
```
|