# PostgreSQL 15 数据库部署操作手? **文档版本**: v1.0 **创建时间**: 2025-12-24 **适用场景**: 本地PostgreSQL数据库迁移到阿里云RDS **数据库版?*: PostgreSQL 15 **部署方式**: pg_dump全量导入 **预计时间**: 30分钟 --- ## 📋 目录 1. [部署概述](#1-部署概述) 2. [前置条件检查](#2-前置条件检? 3. [部署步骤](#3-部署步骤) 4. [验证测试](#4-验证测试) 5. [安全加固](#5-安全加固) 6. [常见问题](#6-常见问题) 7. [回滚方案](#7-回滚方案) 8. [最佳实践](#8-最佳实? --- ## 1. 部署概述 ### 1.1 部署目标 ```yaml 目标: 将本地Docker PostgreSQL数据库完整迁移到阿里云RDS PostgreSQL 15 方法: pg_dump全量导出 + psql导入 优势: ?100%完整(结?数据+索引+外键? ?一次性完? ?可重复执? ?简单可? ?包含pg-boss表(不需要单独处理) ``` ### 1.2 部署架构 ``` 本地环境 阿里云RDS ┌─────────────────? ┌─────────────────? ? ? ? ? ? Docker ? pg_dump导出 ? RDS PostgreSQL ? ? PostgreSQL 15 ?────────────────>? 15.14 ? ? ? psql导入 ? ? ? 26 MB数据 ? ? VPC内网 ? ? 10个Schema ? ? 2?GB ? ? 34个表 ? ? 50GB存储 ? └─────────────────? └─────────────────? ``` ### 1.3 数据库信? #### 本地数据? ```yaml 容器名称: ai-clinical-postgres 镜像: postgres:15-alpine 数据库名: ai_clinical_research 用户? postgres 密码: postgres 端口: 5432 数据大小: ?6 MB ``` #### RDS数据? ```yaml 实例ID: pgm-2zex1m2y3r23hdn5 内网地址: pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com:5432 数据库名: ai_clinical_research 用户? airesearch 密码: Xibahe@fengzhibo117 版本: PostgreSQL 15.14 规格: 2?GB 存储: 50GB SSD 地域: 华北2(北京) VPC: vpc-2ze055cptkew9c38w4r06 (172.17.0.0/16) 白名? 172.17.0.0/16(VPC网段? 时区: Asia/Shanghai ``` --- ## 2. 前置条件检? ### 2.1 本地环境检? ```powershell # 1. 检查Docker是否运行 docker --version # 2. 检查PostgreSQL容器状? docker ps --filter "name=ai-clinical-postgres" # 预期输出: 容器状态为 Up,健康状态为 healthy # 3. 验证本地数据库连? docker exec ai-clinical-postgres psql -U postgres -d ai_clinical_research -c "SELECT version();" # 预期输出: PostgreSQL 15.x # 4. 检查数据库大小 docker exec ai-clinical-postgres psql -U postgres -d ai_clinical_research -c "SELECT pg_size_pretty(pg_database_size('ai_clinical_research'));" # 预期输出: ?6 MB ``` ### 2.2 RDS环境检? ```yaml ☑️ RDS实例已创建且运行? ☑️ VPC和交换机已配? ☑️ 白名单已配置: 172.17.0.0/16 ☑️ 时区已设? Asia/Shanghai ☑️ 数据库用户已创建: airesearch ☑️ 数据库密码已记录: Xibahe@fengzhibo117 ``` ### 2.3 网络连接检? ```yaml 方案A: 有ECS跳板? - 准备ECS公网IP - 准备SSH密钥或密? - 确保ECS在同一VPC 方案B: 临时外网访问(本文档采用? - 需要临时开启RDS外网地址 - 需要配置白名单(临时使?.0.0.0/0? - ⚠️ 完成后立即关闭外网访? ``` --- ## 3. 部署步骤 ### 步骤1: 导出本地数据库(5分钟? #### 1.1 导出数据? ```powershell # 在项目根目录执行 cd D:\MyCursor\AIclinicalresearch # 导出完整数据库(包括结构、数据、索引、外键) docker exec ai-clinical-postgres pg_dump ` -U postgres ` -d ai_clinical_research ` --format=plain ` --no-owner ` --no-acl ` --encoding=UTF8 ` > "rds_init_$(Get-Date -Format 'yyyyMMdd_HHmmss').sql" ``` **参数说明?* ```yaml -U postgres: 使用postgres用户 -d ai_clinical_research: 指定数据库名 --format=plain: 纯文本SQL格式 --no-owner: 不导出所有者信息(避免用户名冲突) --no-acl: 不导出权限信息(使用RDS默认权限? --encoding=UTF8: UTF-8编码(中文支持) ``` #### 1.2 验证导出文件 ```powershell # 检查文件大小和创建时间 Get-ChildItem rds_init_*.sql | Sort-Object LastWriteTime -Descending | Select-Object -First 1 | Format-Table Name, @{Name="Size(MB)";Expression={[math]::Round($_.Length/1MB,2)}}, LastWriteTime -AutoSize ``` **预期结果?* ``` Name Size(MB) LastWriteTime ---- -------- ------------- rds_init_20251224_154529.sql 88.23 2025/12/24 15:45:30 ``` **检查要点:** ```yaml ?文件大小合理?0-100 MB? ?文件创建时间为刚? ?文件名包含时间戳 ``` --- ### 步骤2: 开启RDS外网访问?分钟? ⚠️ **重要安全提示?* 此步骤会临时开放数据库的公网访问,存在安全风险。必须在导入完成后立即关闭! #### 2.1 登录RDS控制? ``` 访问: https://rdsnext.console.aliyun.com/ 地域: 华北2(北京) ``` #### 2.2 申请外网地址 1. 找到实例:`pgm-2zex1m2y3r23hdn5` 2. 点击实例ID,进入实例详? 3. 左侧菜单?*数据库连?* ?**申请外网地址** 4. 端口:`5432`(默认) 5. 点击 **确定** 6. 等待30-60秒,外网地址生成 **生成的外网地址示例?* ``` pgm-2zex1m2y3r23hdn5ko.pg.rds.aliyuncs.com ``` ⚠️ **记录此地址,后续步骤需要使用!** #### 2.3 配置白名? **阿里云会弹窗询问?* ``` 是否?0.0.0.0/0 加入白名单? ``` **选择:点击「是?* **风险说明?* ```yaml 风险: 全世界任何人都可以尝试连接你的RDS 缓解措施: ?密码强度高(Xibahe@fengzhibo117? ?仅用10分钟完成导入 ?导入后立即关闭外网访? ?实际暴露时间极短 可接受? ?临时调试,可接受 ``` --- ### 步骤3: 创建数据库(1分钟? #### 3.1 连接到RDS ```powershell # 测试连接(连接到默认postgres数据库) docker exec -e PGPASSWORD="Xibahe@fengzhibo117" ai-clinical-postgres psql ` -h pgm-2zex1m2y3r23hdn5ko.pg.rds.aliyuncs.com ` -p 5432 ` -U airesearch ` -d postgres ` -c "SELECT version();" ``` **预期输出?* ``` version ------------------------------------------------------------ PostgreSQL 15.14 on x86_64-pc-linux-gnu, compiled by gcc (1 row) ``` #### 3.2 创建数据? ```powershell # 创建ai_clinical_research数据? docker exec -e PGPASSWORD="Xibahe@fengzhibo117" ai-clinical-postgres psql ` -h pgm-2zex1m2y3r23hdn5ko.pg.rds.aliyuncs.com ` -p 5432 ` -U airesearch ` -d postgres ` -c "CREATE DATABASE ai_clinical_research WITH ENCODING='UTF8' LC_COLLATE='en_US.utf8' LC_CTYPE='en_US.utf8' TEMPLATE=template0;" ``` **预期输出?* ``` CREATE DATABASE ``` #### 3.3 验证数据库创? ```powershell # 验证数据库存? docker exec -e PGPASSWORD="Xibahe@fengzhibo117" ai-clinical-postgres psql ` -h pgm-2zex1m2y3r23hdn5ko.pg.rds.aliyuncs.com ` -p 5432 ` -U airesearch ` -d postgres ` -c "\l ai_clinical_research" ``` --- ### 步骤4: 导入数据到RDS?-8分钟)⭐⭐⭐ ?**这是最关键的步骤,请耐心等待?* #### 4.1 执行导入 ```powershell # 通过管道将SQL文件导入RDS $env:PGPASSWORD="Xibahe@fengzhibo117" Get-Content "rds_init_20251224_154529.sql" | ` docker exec -i -e PGPASSWORD="Xibahe@fengzhibo117" ai-clinical-postgres psql ` -h pgm-2zex1m2y3r23hdn5ko.pg.rds.aliyuncs.com ` -p 5432 ` -U airesearch ` -d ai_clinical_research ``` **注意?* 请将文件?`rds_init_20251224_154529.sql` 替换为实际导出的文件名? #### 4.2 导入过程输出示例 ``` SET SET CREATE SCHEMA CREATE SCHEMA ...(中间省略数百行?.. CREATE TABLE CREATE TABLE COPY 1204 ?导入1204行数? COPY 783 COPY 3 ... CREATE INDEX CREATE INDEX ALTER TABLE ... ``` **导入时间估算?* ```yaml 文件大小: 88 MB 预计时间: 5-8 分钟 取决? 网络带宽和RDS写入速度 进度指示: - 看到 CREATE SCHEMA ?Schema创建? - 看到 CREATE TABLE ?表创建中 - 看到 COPY 数字 ?数据导入中(数字是行数) - 看到 CREATE INDEX ?索引创建? - 看到 ALTER TABLE ?外键创建? ``` #### 4.3 导入完成标志 当命令执行完成返回提示符时,说明导入完成? --- ### 步骤5: 验证导入结果?分钟? #### 5.1 验证Schema ```powershell # 检查Schema数量 docker exec -e PGPASSWORD="Xibahe@fengzhibo117" ai-clinical-postgres psql ` -h pgm-2zex1m2y3r23hdn5ko.pg.rds.aliyuncs.com ` -p 5432 ` -U airesearch ` -d ai_clinical_research ` -c "SELECT nspname FROM pg_namespace WHERE nspname LIKE '%_schema' ORDER BY nspname;" ``` **预期输出?* ``` nspname -------------------- admin_schema aia_schema asl_schema common_schema dc_schema pkb_schema platform_schema rvw_schema ssa_schema st_schema (10 rows) ``` ?**应该看到10个Schema** #### 5.2 验证表数? ```powershell # 检查每个Schema的表数量 docker exec -e PGPASSWORD="Xibahe@fengzhibo117" ai-clinical-postgres psql ` -h pgm-2zex1m2y3r23hdn5ko.pg.rds.aliyuncs.com ` -p 5432 ` -U airesearch ` -d ai_clinical_research ` -c "SELECT schemaname, COUNT(*) as table_count FROM pg_tables WHERE schemaname NOT IN ('pg_catalog', 'information_schema') GROUP BY schemaname ORDER BY schemaname;" ``` **预期输出?* ``` schemaname | table_count -----------------+------------- aia_schema | 5 asl_schema | 6 dc_schema | 6 pkb_schema | 5 platform_schema | 8 public | 4 (6 rows) ``` ?**总计?4个表** #### 5.3 验证pg-boss表(关键? ```powershell # 检查pg-boss?个表是否存在 docker exec -e PGPASSWORD="Xibahe@fengzhibo117" ai-clinical-postgres psql ` -h pgm-2zex1m2y3r23hdn5ko.pg.rds.aliyuncs.com ` -p 5432 ` -U airesearch ` -d ai_clinical_research ` -c "SELECT tablename FROM pg_tables WHERE schemaname = 'platform_schema' AND tablename IN ('job', 'queue', 'schedule', 'subscription', 'job_common', 'version') ORDER BY tablename;" ``` **预期输出?* ``` tablename -------------- job job_common queue schedule subscription version (6 rows) ``` ?**pg-boss?个表全部存在** **说明?* ```yaml pg-boss表的作用: - job: 任务队列? - queue: 队列配置? - schedule: 定时任务? - subscription: 订阅? - job_common: 任务通用配置? - version: pg-boss版本? 为什么重? - backend应用依赖pg-boss进行异步任务处理 - 如果这些表不存在,backend启动会失? - 通过pg_dump导入,这些表会自动包? - 不需要在Prisma Schema中定? ``` #### 5.4 验证数据? ```powershell # 检查关键表的数据量 docker exec -e PGPASSWORD="Xibahe@fengzhibo117" ai-clinical-postgres psql ` -h pgm-2zex1m2y3r23hdn5ko.pg.rds.aliyuncs.com ` -p 5432 ` -U airesearch ` -d ai_clinical_research ` -c "SELECT COUNT(*) as user_count, 'platform_schema.users' as table_name FROM platform_schema.users UNION ALL SELECT COUNT(*), 'aia_schema.projects' FROM aia_schema.projects UNION ALL SELECT COUNT(*), 'asl_schema.literatures' FROM asl_schema.literatures;" ``` **预期输出示例?* ``` user_count | table_name ------------+------------------------ 3 | platform_schema.users 2 | aia_schema.projects 1204 | asl_schema.literatures (3 rows) ``` ?**数据量与本地一?* #### 5.5 验证索引和外? ```powershell # 检查索引数? docker exec -e PGPASSWORD="Xibahe@fengzhibo117" ai-clinical-postgres psql ` -h pgm-2zex1m2y3r23hdn5ko.pg.rds.aliyuncs.com ` -p 5432 ` -U airesearch ` -d ai_clinical_research ` -c "SELECT schemaname, COUNT(*) as index_count FROM pg_indexes WHERE schemaname NOT IN ('pg_catalog', 'information_schema') GROUP BY schemaname ORDER BY schemaname;" ``` ```powershell # 检查外键约束数? docker exec -e PGPASSWORD="Xibahe@fengzhibo117" ai-clinical-postgres psql ` -h pgm-2zex1m2y3r23hdn5ko.pg.rds.aliyuncs.com ` -p 5432 ` -U airesearch ` -d ai_clinical_research ` -c "SELECT COUNT(*) as fk_count FROM pg_constraint WHERE contype = 'f';" ``` --- ### 步骤6: 关闭外网访问?分钟)⭐⭐⭐⭐⭐ ⚠️ **这是最重要的安全步骤,必须立即执行?* #### 6.1 释放外网地址 1. **回到RDS控制?* - 实例详情页面 2. **找到「数据库连接?* 3. **找到外网地址** ``` pgm-2zex1m2y3r23hdn5ko.pg.rds.aliyuncs.com ``` 4. **点击「释放外网地址?* 5. **在确认对话框中点击「确定?* 6. **等待几秒?* 7. **确认状态变为「未申请?* ? #### 6.2 验证外网访问已关? ```powershell # 尝试从本地连接外网地址(应该失败) docker exec -e PGPASSWORD="Xibahe@fengzhibo117" ai-clinical-postgres psql ` -h pgm-2zex1m2y3r23hdn5ko.pg.rds.aliyuncs.com ` -p 5432 ` -U airesearch ` -d ai_clinical_research ` -c "SELECT 1;" ` --connect-timeout=5 # 预期结果: 连接超时或连接失? ``` **预期错误?* ``` psql: error: connection timed out ``` ?**这个错误说明外网访问已成功关闭!** #### 6.3 最终安全状? ```yaml RDS连接配置: 内网地址: pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com ?(保留) 外网地址: 已删?? 白名? 172.17.0.0/16 (VPC网段) ? 安全状? ?外网无法访问 ?只有VPC内的SAE应用可以连接 ?安全风险已消? ?数据库处于最安全状? ``` --- ## 4. 验证测试 ### 4.1 本地应用连接测试(可选) 如果需要本地测试连接RDS,需要建立SSH隧道? ```powershell # 前提: 需要有ECS跳板? # 建立SSH隧道 ssh -N -L 5433:pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com:5432 root@ECS公网IP # 在另一个终端测试连? $env:PGPASSWORD="Xibahe@fengzhibo117" psql -h localhost -p 5433 -U airesearch -d ai_clinical_research -c "SELECT version();" ``` ### 4.2 配置backend连接RDS ```bash # backend/.env DATABASE_URL=postgresql://airesearch:Xibahe%40fengzhibo117@pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com:5432/ai_clinical_research?connection_limit=10&pool_timeout=10&connect_timeout=10 # ⚠️ 注意: 密码中的 @ 符号必须转义?%40 ``` **URL编码规则?* ```yaml 特殊字符转义: @ -> %40 # -> %23 $ -> %24 % -> %25 & -> %26 + -> %2B 空格 -> %20 ``` ### 4.3 backend启动测试 ```powershell cd backend npm run dev # 预期日志: # ?数据库连接成? # ?pg-boss started # ?Server listening on 0.0.0.0:3001 ``` --- ## 5. 安全加固 ### 5.1 密码安全 ```yaml 当前密码: Xibahe@fengzhibo117 强度评估: ?长度: 21个字? ?大写字母: Xibahe, X, S ?小写字母: ibahe, fengzhibo ?数字: 117 ?特殊符号: @ ?强度: ? 建议: - 定期轮换密码(每3-6个月? - 不要在代码中硬编码密? - 只在SAE环境变量中配? - 不要提交到Git仓库 ``` ### 5.2 白名单配? ```yaml 当前配置: 172.17.0.0/16 (VPC网段) 最佳实? ?使用VPC网段,不用单机IP ?SAE实例IP会变化,单机IP会导致连接失? ?不要配置 0.0.0.0/0(全网开放) ?不要配置多个单机IP(维护困难) 验证: - RDS控制?> 数据安全?> 白名单设? - 确认只有 172.17.0.0/16 - 确认没有 0.0.0.0/0 ``` ### 5.3 访问控制 ```yaml 用户权限: airesearch: 应用专用用户 - 权限: SELECT, INSERT, UPDATE, DELETE - 不要用超级用?postgres - 最小权限原? 连接限制: - 配置 connection_limit=10(每个SAE实例? - 避免连接池耗尽 - RDS最大连接数: 400 ``` ### 5.4 备份策略 ```yaml RDS自动备份(强制开启): 数据备份: 每天一? 日志备份: 实时(PITR支持? 保留时间: 7天(免费? 备份时间: 凌晨2:00-4:00 手动快照(重要操作前? - Schema变更? - 大版本升级前 - 删除大量数据? - 保留30-60? 恢复能力: ?时间点恢复(PITR? ?可恢复到任意? ?备份存储在OSS ``` --- ## 6. 常见问题 ### 问题1: 导出时提示权限不? **症状?* ``` pg_dump: error: permission denied for table xxx ``` **原因?* 使用的用户没有足够权? **解决?* ```bash # 使用超级用户postgres docker exec ai-clinical-postgres pg_dump -U postgres -d ai_clinical_research ... # 而不是普通用? ``` --- ### 问题2: 导入时连接超? **症状?* ``` psql: error: connection timed out ``` **原因?* 1. 外网地址未开? 2. 白名单未配置 3. 网络问题 **排查步骤?* ```bash # 1. 确认外网地址已开? # RDS控制?> 数据库连?> 查看外网地址 # 2. 确认白名单配? # RDS控制?> 数据安全?> 白名单设? # 应该包含 0.0.0.0/0(临时)或你的公网IP # 3. 测试网络连通? ping pgm-2zex1m2y3r23hdn5ko.pg.rds.aliyuncs.com # 4. 测试端口连通? Test-NetConnection -ComputerName pgm-2zex1m2y3r23hdn5ko.pg.rds.aliyuncs.com -Port 5432 ``` --- ### 问题3: 导入时提示数据库不存? **症状?* ``` psql: error: database "ai_clinical_research" does not exist ``` **原因?* 忘记创建数据? **解决?* ```bash # 先创建数据库 docker exec -e PGPASSWORD="Xibahe@fengzhibo117" ai-clinical-postgres psql ` -h pgm-2zex1m2y3r23hdn5ko.pg.rds.aliyuncs.com ` -p 5432 ` -U airesearch ` -d postgres ` -c "CREATE DATABASE ai_clinical_research WITH ENCODING='UTF8';" # 然后再导? ``` --- ### 问题4: 导入后pg-boss表缺? **症状?* ``` backend启动日志显示: Error: relation "platform_schema.job" does not exist ``` **原因?* 导出时未包含pg-boss? **排查?* ```bash # 1. 检查导出的SQL文件 Get-Content rds_init_*.sql | Select-String "CREATE TABLE.*job" # 应该看到: # CREATE TABLE platform_schema.job ... # CREATE TABLE platform_schema.queue ... # ?个表 # 2. 如果没有,重新导? docker exec ai-clinical-postgres pg_dump -U postgres -d ai_clinical_research --format=plain --no-owner --no-acl > rds_init_new.sql # 3. 重新导入 ``` **预防?* ```yaml 确保使用正确的导出命? ?使用 pg_dump(导出整个数据库? ?不要?prisma migrate(只导出Prisma定义的表? ``` --- ### 问题5: 密码中的特殊字符导致连接失败 **症状?* ``` backend启动失败: Error: password authentication failed for user "airesearch" ``` **原因?* DATABASE_URL中的密码未正确转? **解决?* ```bash # 错误示例(@ 未转义) DATABASE_URL=postgresql://airesearch:Xibahe@fengzhibo117@host:5432/db # 正确示例(@ 转义?%40? DATABASE_URL=postgresql://airesearch:Xibahe%40fengzhibo117@host:5432/db ``` **URL编码工具?* ```javascript // 在浏览器控制台运? encodeURIComponent("Xibahe@fengzhibo117") // 输出: Xibahe%40fengzhibo117 ``` --- ### 问题6: SAE应用无法连接RDS **症状?* ``` SAE日志显示: connection to server failed: Connection timed out ``` **原因?* 1. 使用了外网地址(已删除? 2. 白名单未包含VPC网段 3. SAE和RDS不在同一VPC **排查步骤?* ```yaml 1. 确认使用内网地址: ?pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com(内网) ?pgm-2zex1m2y3r23hdn5ko.pg.rds.aliyuncs.com(外网,已删除) 2. 确认白名单配? RDS控制?> 数据安全?> 白名单设? 应该包含: 172.17.0.0/16 3. 确认VPC一? - RDS VPC: vpc-2ze055cptkew9c38w4r06 - SAE VPC: 应该相同 - 查看方式: SAE控制?> 应用详情 > 网络配置 4. 确认SAE环境变量: DATABASE_URL=postgresql://airesearch:Xibahe%40fengzhibo117@pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com:5432/ai_clinical_research 注意: 不要?-ko 后缀 ``` --- ## 7. 回滚方案 ### 7.1 回滚场景 ```yaml 需要回滚的情况: - 导入后发现数据不完整 - 导入过程中断 - 数据验证失败 - 应用连接异常 ``` ### 7.2 回滚步骤 ```bash # 方案A: 删除数据库重新导入(推荐? # 1. 连接到RDS docker exec -e PGPASSWORD="Xibahe@fengzhibo117" ai-clinical-postgres psql ` -h pgm-2zex1m2y3r23hdn5ko.pg.rds.aliyuncs.com ` -p 5432 ` -U airesearch ` -d postgres # 2. 终止所有连? SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'ai_clinical_research' AND pid <> pg_backend_pid(); # 3. 删除数据? DROP DATABASE ai_clinical_research; # 4. 重新创建并导? CREATE DATABASE ai_clinical_research WITH ENCODING='UTF8'; \q # 5. 重新导入 Get-Content rds_init_*.sql | docker exec -i -e PGPASSWORD="Xibahe@fengzhibo117" ai-clinical-postgres psql -h ... -d ai_clinical_research ``` ```bash # 方案B: 使用RDS快照恢复(如果创建了快照? # 1. 登录RDS控制? # 2. 备份恢复 > 备份列表 # 3. 找到导入前的快照 # 4. 点击「恢复? # 5. 选择恢复方式: # - 按备份集恢复(恢复到快照时间点) # - 按时间点恢复(PITR,恢复到任意时间? # 6. 确认恢复 ``` ### 7.3 回滚验证 ```bash # 验证回滚后的数据 docker exec -e PGPASSWORD="Xibahe@fengzhibo117" ai-clinical-postgres psql ` -h ... ` -d ai_clinical_research ` -c "SELECT schemaname, COUNT(*) FROM pg_tables WHERE schemaname NOT IN ('pg_catalog', 'information_schema') GROUP BY schemaname;" ``` --- ## 8. 最佳实? ### 8.1 部署前准? ```yaml ☑️ 准备检查清? 1. 本地数据库已备份 2. RDS实例已创建并配置完成 3. VPC网络已规? 4. 白名单已配置(VPC网段? 5. 数据库用户和密码已记? 6. 时区已设置(Asia/Shanghai? 7. 自动备份已开? ☑️ 时间窗口选择: - 业务低峰期(如晚?1点后? - 预留足够时间?0-60分钟? - 团队成员在线支持 ``` ### 8.2 执行过程? ```yaml ☑️ 操作规范: 1. 逐步执行,不要跳步骤 2. 每步验证结果再继? 3. 记录每步的输出和时间 4. 遇到错误立即停止排查 5. 不要同时执行多个操作 ☑️ 安全意识: 1. 外网访问最小化?0分钟内完成) 2. 导入完成立即关闭外网 3. 不要在公共网络操? 4. 不要泄露连接信息 ``` ### 8.3 部署后检? ```yaml ☑️ 功能验证: 1. Schema和表数量正确 2. 数据量与本地一? 3. pg-boss表存? 4. 索引和外键完? 5. backend能正常连? 6. 应用功能正常 ☑️ 性能验证: 1. 连接延迟 < 50ms(VPC内网? 2. 查询响应时间正常 3. RDS CPU使用?< 30% 4. 连接?< 100 ☑️ 安全验证: 1. 外网地址已删?? 2. 白名单只有VPC网段 ? 3. 密码强度?? 4. 自动备份已开?? ``` ### 8.4 监控告警 ```yaml ☑️ 配置监控: 1. RDS连接数告警(>300? 2. RDS CPU告警?70%? 3. RDS磁盘告警?80%? 4. 慢查询告警(>1秒) 5. 备份失败告警 ☑️ 日常巡检: 1. 每天检查RDS监控 2. 每周查看慢查询日? 3. 每月验证备份可用? 4. 每季度恢复演? ``` ### 8.5 文档维护 ```yaml ☑️ 更新文档: 1. 记录实际执行时间 2. 记录遇到的问题和解决方案 3. 更新连接信息 4. 补充特殊情况处理 ☑️ 知识沉淀: 1. 总结经验教训 2. 优化部署流程 3. 培训团队成员 4. 建立FAQ ``` --- ## 9. 附录 ### 9.1 完整检查清? ```yaml 部署前检?(Before): ?本地数据库运行正? ?Docker Desktop运行正常 ?RDS实例已创? ?VPC和交换机已配? ?白名单已配置?72.17.0.0/16? ?数据库用户已创建(airesearch? ?时区已设置(Asia/Shanghai? ?自动备份已开? 部署过程检?(During): ?导出文件大小正常?0-100 MB? ?外网地址申请成功 ?白名单临时配置(0.0.0.0/0? ?数据库创建成? ?数据导入完成(无错误? ?外网地址已删?⭐⭐? 部署后检?(After): ?10个Schema全部存在 ?34个表全部存在 ?pg-boss?个表存在 ?用户数据完整 ?索引完整 ?外键完整 ?backend能连接RDS ?应用功能正常 ?外网访问已关?⭐⭐? ``` ### 9.2 快速参? #### 连接信息 ```yaml RDS内网地址: pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com:5432 数据库名: ai_clinical_research 用户? airesearch 密码: Xibahe@fengzhibo117 DATABASE_URL: postgresql://airesearch:Xibahe%40fengzhibo117@pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com:5432/ai_clinical_research?connection_limit=10&pool_timeout=10 ``` #### 常用命令 ```powershell # 导出数据? docker exec ai-clinical-postgres pg_dump -U postgres -d ai_clinical_research --no-owner --no-acl > backup.sql # 导入数据? Get-Content backup.sql | docker exec -i -e PGPASSWORD="密码" ai-clinical-postgres psql -h RDS地址 -U airesearch -d ai_clinical_research # 检查Schema docker exec -e PGPASSWORD="密码" ai-clinical-postgres psql -h RDS地址 -U airesearch -d ai_clinical_research -c "\dn" # 检查表 docker exec -e PGPASSWORD="密码" ai-clinical-postgres psql -h RDS地址 -U airesearch -d ai_clinical_research -c "\dt platform_schema.*" # 检查数据量 docker exec -e PGPASSWORD="密码" ai-clinical-postgres psql -h RDS地址 -U airesearch -d ai_clinical_research -c "SELECT COUNT(*) FROM platform_schema.users;" ``` --- ## 📚 相关文档 - [部署架构总览](./00-部署架构总览.md) - [快速部署SOP](./01-快速部署SOP-零基础?md) - [PostgreSQL部署策略摸底报告](./PostgreSQL部署策略-摸底报告.md) - [Node.js后端部署指南](./05-Node.js后端-SAE容器部署指南.md) --- ## 📝 变更历史 | 版本 | 日期 | 作?| 变更说明 | |------|------|------|---------| | v1.0 | 2025-12-24 | AI助手 | 初始版本,基于实际部署经?| --- ## 🆘 支持 如有问题,请检查: 1. ?本文档的「常见问题」章? 2. ?RDS实时日志(RDS控制?> 日志管理? 3. ?backend应用日志(SAE控制?> 日志? 4. ?PostgreSQL部署策略摸底报告 --- **文档结束** 祝部署顺利!🎉