# 在 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 ```