Files
doodle-store/docs/v3.5/云端数据库首次建表指南.md
2026-10-20 17:29:10 +08:00

149 lines
6.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 在 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
```