Major Changes: - Add StreamingService with OpenAI Compatible format - Upgrade Chat component V2 with Ant Design X integration - Implement AIA module with 12 intelligent agents - Update API routes to unified /api/v1 prefix - Update system documentation Backend (~1300 lines): - common/streaming: OpenAI Compatible adapter - modules/aia: 12 agents, conversation service, streaming integration - Update route versions (RVW, PKB to v1) Frontend (~3500 lines): - modules/aia: AgentHub + ChatWorkspace (100% prototype restoration) - shared/Chat: AIStreamChat, ThinkingBlock, useAIStream Hook - Update API endpoints to v1 Documentation: - AIA module status guide - Universal capabilities catalog - System overview updates - All module documentation sync Tested: Stream response verified, authentication working Status: AIA V2.0 core completed (85%)
40 KiB
PostgreSQL 15 <20>唳旿摨㯄<E691A8>蝵脩<E89DB5><E884A9>?- <20>詨<EFBFBD><E8A9A8>亙<EFBFBD>
*<EFBFBD><EFBFBD>﹝<EFBFBD><EFBFBD>𧋦嚗? v1.1
*<EFBFBD>𥕦遣<EFBFBD>交<EFBFBD>嚗? 2025-12-14
<EFBFBD><EFBFBD><EFBFBD>擧凒<EFBFBD>堆<EFBFBD> 2025-12-14
<EFBFBD>唳旿摨梶<EFBFBD><EFBFBD>穿<EFBFBD> PostgreSQL 15.14 (Docker: postgres:15-alpine)
*<EFBFBD>格<EFBFBD><EFBFBD>臬<EFBFBD>嚗? <20>輸<EFBFBD>鈭?RDS PostgreSQL 15
*<EFBFBD>亙<EFBFBD>蝐餃<EFBFBD>嚗? <20><><EFBFBD>舀𨰫摨?+ <20>函蔡蝑𣇉裦
<EFBFBD><EFBFBD> <20><>𧋦靽株恥霈啣<E99C88>
v1.1 (2025-12-14) - 銝㮖<E98A9D>撱箄悅靽格迤<E6A0BC>?
*靽格迤閬<EFBFBD><EFBFBD>嚗?
-
<EFBFBD>?pg-boss銵?<3F>芣<EFBFBD>"<22>箏<EFBFBD>瞉<EFBFBD><E79E89>
- 靽格迤嚗䮝g-boss隡𡁜銁摨𠉛鍂<F0A0899B>臬𢆡<E887AC>嗉䌊<E59789>典<EFBFBD>撱箄”嚗<E2809D>蘨閬<E898A8><E996AC><EFBFBD>𣂼<EFBFBD>
- <EFBFBD>滢<EFBFBD>銝仿<EFBFBD><EFBFBD>改<EFBFBD>隞?銝仿<E98A9D>撌桀<E6928C><E6A180>?<3F>嫣蛹"<22>芣<EFBFBD><E88AA3>箏<EFBFBD><E7AE8F><EFBFBD><EFBFBD><EFBFBD>𣳇<EFBFBD><F0A3B387><EFBFBD><EFBFBD>嚗?
- 憓𧼮<EFBFBD>霂湔<EFBFBD>嚗䮝g-boss<73><73>惣<EFBFBD>質䌊<E8B3AA><E48C8A><EFBFBD><EFBFBD>𥕦<EFBFBD><F0A595A6><EFBFBD><EFBFBD>閬<EFBFBD><E996AC>
-
*<EFBFBD>?<3F>賢<EFBFBD><E8B3A2>閖<EFBFBD>蝵桀撩<E6A180>𤥁秩<F0A4A581>?
- <EFBFBD>啣<EFBFBD>嚗𡁜<EFBFBD>憿颱蝙<EFBFBD>汲PC蝵烐挾嚗䔶<EFBFBD><EFBFBD>賜鍂<EFBFBD>閙㦤IP
- 蝷箔<EFBFBD>嚗?72.16.0.0/12嚗𠄎AE<41><45>PC蝵烐挾嚗? - <20>笔<EFBFBD>嚗锭AE摰硺<E691B0>IP隡𡁜<E99AA1><F0A1819C>吔<EFBFBD><E59094>閙㦤IP隡𡁜紡<F0A1819C>渲<EFBFBD><E6B8B2>亙仃韐? - 雿滨蔭嚗鑹DS<44><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝏𨅯<E89D8F><F0A885AF>具<EFBFBD><E585B7><EFBFBD>銝<EFBFBD>甇亥<E79487><E4BAA5>典<EFBFBD>憭<EFBFBD>撩靚?
-
<EFBFBD>?憭<>遢蝑𣇉裦蝞<E8A3A6><E89D9E>吔<EFBFBD><E59094>游𦛚摰痹<E691B0>
- 靽格迤嚗𡁜<EFBFBD><EFBFBD>笔蘨<EFBFBD><EFBFBD>RDS<EFBFBD>芸𢆡憭<EFBFBD>遢嚗<EFBFBD>鉄<EFBFBD>亙<EFBFBD>憭<EFBFBD>遢嚗? - <20>滨漣嚗䮝g_dump ECS<43>𡁏𧋦隞?蝚砌<E89D9A><E7A08C>㯄俈蝥?<3F>滢蛹"<22>舫<EFBFBD>㚁<EFBFBD>銝𡁜𦛚<F0A1819C>𡁜之<F0A1819C>𤾸<EFBFBD><F0A4BEB8><EFBFBD><EFBFBD>嚗?
- <EFBFBD><EFBFBD>眏嚗鑹DS<EFBFBD>芸𢆡憭<EFBFBD>遢+PITR撌脰雲憭<E99BB2><E686AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
- 靽萘<EFBFBD>嚗朞<EFBFBD><EFBFBD>祉內靘衤<EFBFBD>銝箏<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>釣"<22>𩤃<EFBFBD> 隞<><E99A9E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>脲<EFBFBD>銝漤<E98A9D>閬?
韐∠讃<EFBFBD><EFBFBD><EFBFBD> 憿寧𤌍<E5AFA7><F0A48C8D><EFBFBD>臬𣪧<E887AC>笔<EFBFBD>擐?
<EFBFBD><EFBFBD> <20>桀<EFBFBD>
- [<5B>砍𧑐<E7A08D>唳旿摨梶<E691A8>摰墧<E691B0><E5A2A7>琶(#<23>砍𧑐<E7A08D>唳旿摨梶<E691A8>摰墧<E691B0><E5A2A7>?
- [Prisma銝擧㺭<E693A7>桀<EFBFBD><E6A180><EFBFBD>榆撘<E6A686><E69298><EFBFBD>𨚼(#prisma銝擧㺭<E693A7>桀<EFBFBD><E6A180><EFBFBD>榆撘<E6A686><E69298><EFBFBD>?
- [隞<><E99A9E>憒<EFBFBD><E68692>餈墧𦻖<E5A2A7>唳旿摨𨩇(#隞<><E99A9E>憒<EFBFBD><E68692>餈墧𦻖<E5A2A7>唳旿摨?
- 擐𡝗活<EFBFBD>函蔡<EFBFBD>寞<EFBFBD>
- <EFBFBD>芣䔉<EFBFBD>湔鰵蝑𣇉裦
- RDS憭<EFBFBD>遢蝑𣇉裦
- <EFBFBD><EFBFBD>雿喳<EFBFBD>頝萎<EFBFBD>蝳<EFBFBD>迫<EFBFBD>滢<EFBFBD>
<EFBFBD>砍𧑐<EFBFBD>唳旿摨梶<EFBFBD>摰墧<EFBFBD><EFBFBD>?
1. <20>箇<EFBFBD>靽⊥<E99DBD>
Docker<EFBFBD>𨅯<EFBFBD>嚗䮝ostgres:15-alpine
<0A>唳旿摨枏<E691A8>蝘堆<E89D98>ai_clinical_research
餈墧𦻖靽⊥<E99DBD>嚗䮝ostgresql://postgres:postgres@localhost:5432/ai_clinical_research
<0A>唳旿摨枏之撠𧶏<E692A0>26 MB嚗<42><E59A97>霂?撘<><E69298>𤑳㴓憓<E3B493><E68693>
<0A>冽<EFBFBD><E586BD>唳旿嚗?銝芰鍂<E88AB0>瑁揭<E79181>?```
### 2. Schema<6D>𠉛氖<F0A0899B>嗆<EFBFBD>嚗?0銝杵chema嚗争<E59A97>
雿删<E99BBF><E588A0>唳旿摨枏歇蝏𤩺<E89D8F><F0A4A9BA>笔<EFBFBD><E7AC94>賭<EFBFBD>10銝杵chema<6D>𠉛氖<F0A0899B>嗆<EFBFBD>嚗?
| # | Schema<6D>滨妍 | 銵冽㺭<E586BD>?| <20>嗆<EFBFBD>?| 霂湔<E99C82> |
|---|-----------|--------|------|------|
| 1 | `platform_schema` | 8銝芾” | <20>?撌脣<E6928C><E884A3>?| 撟喳蝱<E596B3>箇<EFBFBD>霈暹鴌嚗<E9B48C>鍂<EFBFBD>瑯<EFBFBD><E791AF>g-boss<73>笔<EFBFBD>嚗?|
| 2 | `aia_schema` | 5銝芾” | <20>?撌脣<E6928C><E884A3>?| AI<41>箄<EFBFBD><E7AE84>桃<EFBFBD>嚗<EFBFBD>★<EFBFBD>柴<EFBFBD><E69FB4>笆霂腈<E99C82><E88588><EFBFBD><EFBFBD>荔<EFBFBD> |
| 3 | `pkb_schema` | 5銝芾” | <20>?撌脣<E6928C><E884A3>?| 銝芯犖<E88AAF>亥<EFBFBD>摨橒<E691A8><E6A992>亥<EFBFBD>摨瓐<E691A8><E79390><EFBFBD>獢<EFBFBD><E78DA2><EFBFBD>鸌憭<E9B88C><E686AD>嚗?|
| 4 | `asl_schema` | 6銝芾” | <20>?撌脣<E6928C><E884A3>?| AI<41>箄<EFBFBD><E7AE84><EFBFBD>讃嚗<E8AE83><E59A97><EFBFBD>桃<EFBFBD><E6A183>㚁<EFBFBD> |
| 5 | `dc_schema` | 6銝芾” | <20>?撌脣<E6928C><E884A3>?| <20>唳旿皜<E697BF><E79A9C>嚗<EFBFBD>芋<EFBFBD>踴<EFBFBD><E8B8B4><EFBFBD><EFBFBD>碶遙<E7A2B6>~<EFBFBD><EFBD9E>ool C嚗?|
| 6 | `admin_schema` | 0銝芾” | <20><> 蝛搴chema | 餈鞱𨯫蝞∠<E89D9E>嚗<EFBFBD><E59A97><EFBFBD>辷<EFBFBD> |
| 7 | `rvw_schema` | 0銝芾” | <20><> 蝛搴chema | 摰∠阮蝟餌<E89D9F>嚗<EFBFBD><E59A97><EFBFBD>辷<EFBFBD> |
| 8 | `ssa_schema` | 0銝芾” | <20><> 蝛搴chema | <20>箄<EFBFBD>蝏蠘恣<E8A098><E681A3><EFBFBD>嚗<EFBFBD><E59A97><EFBFBD>辷<EFBFBD> |
| 9 | `st_schema` | 0銝芾” | <20><> 蝛搴chema | 蝏蠘恣<E8A098><E681A3><EFBFBD>撌亙<E6928C>嚗<EFBFBD><E59A97><EFBFBD>辷<EFBFBD> |
| 10 | `common_schema` | 0銝芾” | <20><> 蝛搴chema | <20>𡁶鍂<F0A181B6>賢<EFBFBD>撅<EFBFBD><E69285>憸<EFBFBD><E686B8>嚗?|
| 11 | `public` | 4銝芾” | <20>𩤃<EFBFBD> <20>扯”<E689AF>㛖<EFBFBD> | _prisma_migrations, admin_logs, review_tasks, users |
**<2A>餉恣嚗?4銝芾”嚗?0銝芸銁<E88AB8>𠉛氖Schema銝哨<E98A9D>4銝芸銁public銝哨<E98A9D>**
### 3. 霂衣<E99C82>銵冽<E98AB5><E586BD>?
#### 3.1 platform_schema嚗?銝芾”嚗?
<EFBFBD>?users - <20>冽<EFBFBD>銵剁<E98AB5>3<EFBFBD>∟扇敶𤏪<E695B6> <0A>?app_cache - Postgres-Only蝻枏<E89DBB>嚗<EFBFBD>𤜯隞Οedis嚗?<3F>?job - pg-boss隞餃𦛚銵?<3F>?job_common - pg-boss隞餃𦛚<E9A483>𡁶鍂銵?<3F>?queue - pg-boss<73>笔<EFBFBD>銵?<3F>?schedule - pg-boss摰𡁏𧒄隞餃𦛚銵?<3F>?subscription - pg-boss霈a<E99C88>銵?<3F>?version - pg-boss<73><73>𧋦銵?```
<EFBFBD>𩤃<EFBFBD> <20>滩<EFBFBD><E6BBA9>𤑳緵嚗䮝g-boss<73>?銝芾”嚗àob/queue蝑㚁<E89D91><E39A81>航䌊<E888AA>典<EFBFBD>撱箇<E692B1>嚗䔶<E59A97><E494B6>沌risma Schema銝哨<E98A9D>
3.2 aia_schema嚗?銝芾”嚗?
<EFBFBD>?projects - 憿寧𤌍蝞∠<E89D9E>嚗?<3F>∟扇敶𤏪<E695B6>
<0A>?conversations - 憿寧𤌍撖寡<E69296>
<0A>?messages - 撖寡<E69296>瘨<EFBFBD><E798A8>
<0A>?general_conversations - <20>𡁶鍂撖寡<E69296>
<0A>?general_messages - <20>𡁶鍂瘨<E98D82><E798A8>
3.3 pkb_schema嚗?銝芾”嚗?
<EFBFBD>?knowledge_bases - <20>亥<EFBFBD>摨橒<E691A8>2<EFBFBD>∟扇敶𤏪<E695B6>
<0A>?documents - <20><>﹝
<0A>?batch_tasks - <20>孵<EFBFBD><E5ADB5><EFBFBD>遙<EFBFBD>?<3F>?batch_results - <20>孵<EFBFBD><E5ADB5><EFBFBD><EFBFBD><EFBFBD>頣<EFBFBD>976 KB嚗?<3F>?task_templates - 隞餃𦛚璅⊥踎
3.4 asl_schema嚗?銝芾”嚗?
<EFBFBD>?screening_projects - <20><>讃蝑偦<E89D91>厰★<E58EB0>殷<EFBFBD>18<31>∟扇敶𤏪<E695B6>
<0A>?literatures - <20><>讃<EFBFBD>唳旿嚗?.9 MB嚗?<3F>?screening_results - 蝑偦<E89D91>厩<EFBFBD><E58EA9>頣<EFBFBD>1.2 MB嚗?<3F>?screening_tasks - 蝑偦<E89D91>劐遙<E58A90>?<3F>?fulltext_screening_tasks - <20>冽<EFBFBD>蝑偦<E89D91>劐遙<E58A90>?<3F>?fulltext_screening_results - <20>冽<EFBFBD>蝑偦<E89D91>厩<EFBFBD><E58EA9>?```
#### 3.5 dc_schema嚗?銝芾”嚗?
<EFBFBD>?dc_health_checks - <20>亙熒璉<E78692><E79289>?<3F>?dc_templates - <20>唳旿皜<E697BF><E79A9C>璅⊥踎嚗?<3F>∟扇敶𤏪<E695B6>424 KB嚗?<3F>?dc_extraction_tasks - <20>𣂼<EFBFBD>隞餃𦛚嚗?28 KB嚗?<3F>?dc_extraction_items - <20>𣂼<EFBFBD>憿對<E686BF>6.5 MB嚗峕<E59A97>憭扯”嚗?<3F>?dc_tool_c_sessions - Tool C隡朞<E99AA1>嚗?60 KB嚗?<3F>?dc_tool_c_ai_history - Tool C AI<41><49>蟮嚗? MB嚗?```
3.6 public schema嚗?銝芾”嚗争<E59A97>儭?
<EFBFBD>𩤃<EFBFBD> _prisma_migrations - Prisma餈<61>宏霈啣<E99C88>嚗?<3F>∟扇敶𤏪<E695B6>
<0A>𩤃<EFBFBD> admin_logs - 蝞∠<E89D9E><E288A0>亙<EFBFBD>嚗<EFBFBD><E59A97><EFBFBD>辷<EFBFBD>
<0A>𩤃<EFBFBD> review_tasks - 摰⊥䰻隞餃𦛚嚗?32 KB嚗屸<E59A97><E5B1B8>辷<EFBFBD>
<0A>𩤃<EFBFBD> users - <20>冽<EFBFBD>銵剁<E98AB5><E58981>㛖<EFBFBD>嚗䔶<E59A97>platform_schema.users<72>滚<EFBFBD>嚗?```
**霂湔<E99C82>嚗?*
- `public.users` <20>特chema餈<61>宏<EFBFBD>滨<EFBFBD><E6BBA8>扯”嚗䔶<E59A97> `platform_schema.users` 蝏𤘪<E89D8F>摰<EFBFBD><E691B0><EFBFBD>詨<EFBFBD>
- `admin_logs` <20>?`review_tasks` 摨磰砲餈<E7A0B2>宏<EFBFBD>?`admin_schema` <20>?`rvw_schema`
- `_prisma_migrations` 摨磰砲靽萘<E99DBD><E89098>?`public`嚗諹<E59A97><E8ABB9>烈risma<6D><61><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝵?
### 4. <20>唳旿<E594B3>讐<EFBFBD>霈∴<E99C88>Top 15憭扯”嚗?
| Schema | 銵典<E98AB5> | 憭批<E686AD> | 霂湔<E99C82> |
|--------|------|------|------|
| dc_schema | dc_extraction_items | 6.5 MB | <20>唳旿皜<E697BF><E79A9C><EFBFBD>𣂼<EFBFBD>憿對<E686BF><E5B08D><EFBFBD>憭扯”嚗?|
| asl_schema | literatures | 2.9 MB | <20><>讃<EFBFBD>唳旿 |
| asl_schema | screening_results | 1.2 MB | 蝑偦<E89D91>厩<EFBFBD><E58EA9>?|
| dc_schema | dc_tool_c_ai_history | 1 MB | Tool C AI<41><49>蟮 |
| pkb_schema | batch_results | 976 KB | <20>孵<EFBFBD><E5ADB5><EFBFBD><EFBFBD><EFBFBD>?|
| dc_schema | dc_tool_c_sessions | 960 KB | Tool C隡朞<E99AA1> |
| dc_schema | dc_extraction_tasks | 728 KB | <20>𣂼<EFBFBD>隞餃𦛚 |
| public | review_tasks | 632 KB | 摰⊥䰻隞餃𦛚嚗<F0A69B9A><E59A97><EFBFBD>辷<EFBFBD> |
| dc_schema | dc_templates | 424 KB | <20>唳旿皜<E697BF><E79A9C>璅⊥踎 |
| pkb_schema | documents | 296 KB | <20><>﹝ |
| aia_schema | general_messages | 208 KB | <20>𡁶鍂瘨<E98D82><E798A8> |
| asl_schema | screening_projects | 144 KB | 蝑偦<E89D91>厰★<E58EB0>?|
| aia_schema | conversations | 112 KB | 撖寡<E69296> |
| pkb_schema | batch_tasks | 112 KB | <20>孵<EFBFBD><E5ADB5><EFBFBD>遙<EFBFBD>?|
| aia_schema | messages | 104 KB | 瘨<><E798A8> |
**<2A>餌<EFBFBD>嚗𡁏㺭<F0A1818F>桐蜓閬<E89C93><E996AC>銝剖銁 DC嚗<43>㺭<EFBFBD>格<EFBFBD>瘣梹<E798A3><E6A2B9>?ASL嚗<4C><E59A97><EFBFBD>桃<EFBFBD><E6A183>㚁<EFBFBD>璅∪<E79285><E288AA>?*
### 5. Prisma餈<61>宏<EFBFBD><E5AE8F>蟮
```sql
-- 6甈·risma餈<61>宏霈啣<E99C88>嚗<EFBFBD><E59A97><EFBFBD>園𡢿憿箏<E686BF>嚗?20251010075003_init -- 2025-10-12嚗<32><E59A97>憪见<E686AA>嚗?20251010122727_add_conversation_metadata -- 2025-10-12嚗<32>笆霂嘥<E99C82><E598A5>唳旿嚗?20251012124747_add_batch_processing_module -- 2025-10-12嚗<32>鸌憭<E9B88C><E686AD>璅∪<E79285>嚗?20251014120128_add_review_tasks -- 2025-10-14嚗<34>恣<EFBFBD>乩遙<E4B9A9>∴<EFBFBD>
20251127_add_dc_tool_b_tables -- 2025-11-27嚗㇄C Tool B嚗?20251208_add_column_mapping -- 2025-12-08嚗<38><E59A97><EFBFBD>惩<EFBFBD>嚗?```
**霂湔<E99C82>嚗?*
- <20><><EFBFBD>拍<EFBFBD>餈<EFBFBD>宏嚗ǎnit嚗匧<E59A97>撱箇<E692B1><E7AE87>?`public` schema 銝剔<E98A9D>銵?- <20>𡒊賒<F0A1928A>朞<EFBFBD><E69C9E>见極SQL餈<4C>宏<EFBFBD>唬<EFBFBD>10銝芷<E98A9D>蝳艋chema
- Prisma撟嗆瓷<E59786>㕑扇敶笌chema餈<61>宏餈<E5AE8F><E9A488>嚗<EFBFBD><E59A97>鈭𥟇糓<F0A59F87>见極SQL摰峕<E691B0><E5B395><EFBFBD><EFBFBD>
---
## Prisma銝擧㺭<E693A7>桀<EFBFBD><E6A180><EFBFBD>榆撘<E6A686><E69298><EFBFBD>?
### 1. pg-boss銵函<E98AB5>"<22>芣<EFBFBD>"<22>箏<EFBFBD><E7AE8F><EFBFBD><EFBFBD><EFBFBD>𣳇<EFBFBD><F0A3B387><EFBFBD><EFBFBD>嚗?
**<2A>啗情嚗?*
`platform_schema` <20>?8 銝芾”嚗䔶<E59A97> Prisma Schema <20>芸<EFBFBD>銋劐<E98A8B> 2 銝迎<E98A9D>
- <20>?Prisma摰帋<E691B0>嚗䫤AppCache`, `User`
- <20>圲 pg-boss<73>芸𢆡蝞∠<E89D9E>嚗䫤job`, `job_common`, `queue`, `schedule`, `subscription`, `version`嚗<><E59A97>6銝芾”嚗?
**<2A>笔<EFBFBD>嚗?*
餈?銝芾”<E88ABE>?`pg-boss` 摨枏銁**摨𠉛鍂<F0A0899B>臬𢆡<E887AC>嗉䌊<E59789>典<EFBFBD>撱?*<2A><><EFBFBD><EFBFBD>其<EFBFBD>Postgres-Only隞餃𦛚<E9A483>笔<EFBFBD>嚗㚁<E59A97>銝漤<E98A9D>閬<EFBFBD>銁Prisma Schema銝剖<E98A9D>銋剹<E98A8B>?
**pg-boss<73>?<3F>芣<EFBFBD>"<22>賢<EFBFBD>嚗?*
```typescript
// backend<6E>臬𢆡<E887AC>塚<EFBFBD>pg-boss隡朞䌊<E69C9E>冽<EFBFBD><E586BD>亥”<E4BAA5>臬炏摮睃銁
const boss = new PgBoss(process.env.DATABASE_URL)
await boss.start()
// <20>?憒<><E68692>銵其<E98AB5>摮睃銁嚗俰g-boss隡朞䌊<E69C9E>典<EFBFBD>撱?// <20>?<3F>芾<EFBFBD><E88ABE>唳旿摨梶鍂<E6A2B6>瘀<EFBFBD>憒<EFBFBD>iclinical_rw嚗㗇<E59A97> CREATE TABLE <20><><EFBFBD>
// <20>?摰<><E691B0>銝漤<E98A9D>閬<EFBFBD><E996AC>撌亙僕憸?```
**敶勗<E695B6>霂<EFBFBD>摯嚗?*
- <20>?**餈鞱<E9A488><E99EB1>園妟敶勗<E695B6>**嚗䮝g-boss<73>芸楛蝞∠<E89D9E>餈嗘<E9A488>銵剁<E98AB5>銝漤<E98A9D>朞<EFBFBD>Prisma霈輸䔮
- <20>?**擐𡝗活<F0A19D97>函蔡<E587BD>芸𢆡<E88AB8>𥕦遣**嚗鑹DS<44>函蔡<E587BD>塚<EFBFBD>backend<6E>臬𢆡隡朞䌊<E69C9E>典<EFBFBD>撱箄<E692B1>6銝芾”
- <20>𩤃<EFBFBD> **Prisma db pull隡𡁏<E99AA1>瘚见<E7989A>**嚗𡁏<E59A97>銵?`npx prisma db pull` <20>嗡<EFBFBD><E597A1>𤑳緵"<22>芸<EFBFBD>銋厩<E98A8B>銵?嚗<>虾敹賜裦嚗?- <20>𩤃<EFBFBD> **Prisma migrate銝齿<E98A9D>雿?*嚗朞<E59A97>蝘颱<E89D98>隡𡁜<E99AA1>甇亥<E79487>鈭𥡝”嚗<E2809D><E59A97><EFBFBD>舀迤蝖桃<E89D96>嚗?
**<2A><>雿喳<E99BBF>頝蛛<E9A09D>**
```prisma
// backend/prisma/schema.prisma
// <20>冽<EFBFBD>隞嗅<E99A9E>憭湔溶<E6B994>䭾釣<E4ADBE>𠺪<EFBFBD><F0A0BAAA><EFBFBD>﹝<EFBFBD>券<EFBFBD>䈑<EFBFBD>
// ==================== pg-boss <20>芸𢆡蝞∠<E89D9E><E288A0><EFBFBD>”嚗<E2809D><E59A97><EFBFBD><EFBFBD>閬<EFBFBD><E996AC>銋㚁<E98A8B> ====================
// 隞乩<E99A9E>6銝芾”<E88ABE>徙g-boss摨栞䌊<E6A09E>典<EFBFBD>撱箏<E692B1>蝏湔擪嚗諹窈<E8ABB9>踵<EFBFBD>撌乩耨<E4B9A9>對<EFBFBD>
// - platform_schema.job - 隞餃𦛚銵?// - platform_schema.job_common - 隞餃𦛚<E9A483>𡁶鍂<F0A181B6>滨蔭
// - platform_schema.queue - <20>笔<EFBFBD>銵?// - platform_schema.schedule - 摰𡁏𧒄隞餃𦛚銵?// - platform_schema.subscription - 霈a<E99C88>銵?// - platform_schema.version - <20><>𧋦銵?// ==================== 隞乩<E99A9E>銵刻䌊<E588BB>函恣<E587BD><E681A3><EFBFBD><EFBFBD>𣳇<EFBFBD>Prisma摰帋<E691B0> ====================
*蝏栞捏嚗䮝g-boss銵?蝻箏仃"<22>舀迤撣貊<E692A3>嚗峕<E59A97><E5B395><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?
2. public schema<6D>㛖<EFBFBD>銵兩<E98AB5>儭𧶏<E584AD><F0A7B68F><EFBFBD>閬<EFBFBD><E996AC><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD>桅<EFBFBD>嚗?
public schema <20>?4 銝芾”嚗?- _prisma_migrations嚗䥪risma<EFBFBD><EFBFBD><EFBFBD>銵剁<EFBFBD>甇<EFBFBD>&<EFBFBD>?- users嚗帋<EFBFBD> platform_schema.users <20>滚<EFBFBD><E6BB9A>?- admin_logs嚗𡁜<EFBFBD>餈<EFBFBD>宏<EFBFBD>?admin_schema<EFBFBD>?- review_tasks嚗𡁜<EFBFBD>餈<EFBFBD>宏<EFBFBD>?rvw_schema<EFBFBD>?
*敶勗<EFBFBD>嚗?
- <EFBFBD>𩤃<EFBFBD> <20>唳旿銝滢<E98A9D><E6BBA2>湧<EFBFBD><E6B9A7>抬<EFBFBD>憒<EFBFBD><E68692>隞<EFBFBD><E99A9E>霂航粉
public.users嚗?- <20>𩤃<EFBFBD> 瘛瑟<E7989B>嚗<EFBFBD>舅銝?users銵剁<E98AB5> - <EFBFBD>𩤃<EFBFBD> 蝛粹𡢿瘚芾晶嚗<E699B6><E59A97>憭齿㺭<E9BDBF>殷<EFBFBD>
*閫<EFBFBD><EFBFBD><EFBFBD>寞<EFBFBD>嚗?
-- 甇仿炊1嚗朞<E59A97>蝘?admin_logs <20>?admin_schema
ALTER TABLE public.admin_logs SET SCHEMA admin_schema;
-- 甇仿炊2嚗朞<E59A97>蝘?review_tasks <20>?rvw_schema
ALTER TABLE public.review_tasks SET SCHEMA rvw_schema;
-- 甇仿炊3嚗𡁻<E59A97>霂?platform_schema.users <20>?public.users <20>唳旿銝<E697BF><E98A9D>游<EFBFBD><E6B8B8>𣳇膄
-- 嚗<><E59A97><EFBFBD>函<EFBFBD>鈭抒㴓憓<E3B493><E68693>霂<EFBFBD><E99C82><EFBFBD>剁<EFBFBD>蝖桐<E89D96>隞<EFBFBD><E99A9E>銝滚<E98A9D>撘閧鍂 public.users嚗?DROP TABLE public.users;
3. Prisma Schema<6D><61><EFBFBD>銋厩𠶖<E58EA9>?
| Schema | Prisma摰帋<EFBFBD><EFBFBD><EFBFBD>芋<EFBFBD>? | 摰鮋<EFBFBD><EFBFBD>唳旿摨栞” | <EFBFBD>嗆<EFBFBD>? |
|---|---|---|---|
| platform_schema | 2銝迎<EFBFBD>AppCache, User嚗? | 8銝迎<EFBFBD>+6銝況g-boss<73>芸𢆡蝞∠<E89D9E>嚗? | <EFBFBD>?甇<>虜嚗īg-boss<73>芣<EFBFBD>嚗? |
| aia_schema | 5銝? | 5銝? | <EFBFBD>?銝<><E98A9D>? |
| pkb_schema | 5銝? | 5銝? | <EFBFBD>?銝<><E98A9D>? |
| asl_schema | 6銝? | 6銝? | <EFBFBD>?銝<><E98A9D>? |
| dc_schema | 6銝? | 6銝? | <EFBFBD>?銝<><E98A9D>? |
| public | 2銝迎<EFBFBD>AdminLog, ReviewTask嚗? | 4銝迎<EFBFBD>+_prisma_migrations, users嚗? | <EFBFBD>𩤃<EFBFBD> <20><>皜<EFBFBD><E79A9C> |
*蝏栞捏嚗?
- <EFBFBD>?**Prisma Schema 摰<><E691B0><EFBFBD><EFBFBD>&**嚗䮝g-boss<73>?銝芾”隡朞䌊<E69C9E>典<EFBFBD>撱綽<E692B1>銝漤<E98A9D>閬<EFBFBD><E996AC>銋?- <20>𩤃<EFBFBD> **public schema<6D><61>閬<EFBFBD><E996AC><EFBFBD>?*嚗𡁻<E59A97><F0A181BB>嗘<EFBFBD><E59798>抒<EFBFBD>
users銵剁<E98AB5>擐𡝗活<F0A19D97>函蔡<E587BD>擧<EFBFBD><E693A7><EFBFBD><EFBFBD>
隞<EFBFBD><EFBFBD>憒<EFBFBD><EFBFBD>餈墧𦻖<EFBFBD>唳旿摨?
1. <20>臬<EFBFBD><E887AC>㗛<EFBFBD><E3979B>滨蔭
1.1 暺䁅恕餈墧𦻖摮㛖泵銝莎<E98A9D>env.ts嚗?
// AIclinicalresearch/backend/src/config/env.ts (line 50)
databaseUrl: process.env.DATABASE_URL || 'postgresql://postgres:postgres@localhost:5432/ai_clinical'
*<EFBFBD>𩤃<EFBFBD> 瘜冽<E7989C>嚗?
- 暺䁅恕<EFBFBD>潭糓
ai_clinical嚗<EFBFBD><EFBFBD>摮睃銁嚗?- 摰鮋<E691B0><E9AE8B>唳旿摨枏<E691A8><E69E8F>?ai_clinical_research - 霂湔<EFBFBD>雿删<EFBFBD>
.env<20><>辣銝剖歇蝏𤩺迤蝖桅<E89D96>蝵桐<E89DB5>DATABASE_URL
1.2 餈墧𦻖瘙𣳇<E79899>蝵殷<E89DB5>database.ts嚗?
// AIclinicalresearch/backend/src/config/database.ts
export const prisma = new PrismaClient({
datasources: {
db: {
url: process.env.DATABASE_URL, // 隞𡒊㴓憓<E3B493><E68693><EFBFBD>讛粉<E8AE9B>? },
},
})
// 餈墧𦻖瘙㰘恣蝞堒<E89D9E>撘?connectionLimit = Math.floor(RDS_MAX_CONNECTIONS / MAX_INSTANCES) - 10
// 蝷箔<E89DB7>嚗?00 / 20 - 10 = 10銝芾<E98A9D><E88ABE>?摰硺<E691B0>
*鈭穃<EFBFBD><EFBFBD>蠘<EFBFBD><EFBFBD>交<EFBFBD>蝑𣇉裦嚗?
DATABASE_URL=postgresql://user:pass@host:5432/db?connection_limit=10&pool_timeout=10
2. 餈墧𦻖<E5A2A7>孵<EFBFBD>
| 餈墧𦻖<EFBFBD><EFBFBD>㺭 | <EFBFBD>砍𧑐撘<EFBFBD><EFBFBD>? | <EFBFBD>輸<EFBFBD>鈭騌AE |
|---|---|---|
| 銝餅㦤 | localhost | RDS<EFBFBD><EFBFBD><EFBFBD><EFBFBD>啣<EFBFBD>嚗<EFBFBD><EFBFBD> rm-xxxxx.pg.rds.aliyuncs.com嚗? |
| 蝡臬藁 | 5432 | 5432 |
| *<EFBFBD>唳旿摨? | ai_clinical_research | ai_clinical_research嚗<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>湛<EFBFBD> |
| *<EFBFBD>冽<EFBFBD><EFBFBD>? | postgres | <EFBFBD>芸<EFBFBD>銋㚁<EFBFBD>憒?aiclinical_rw嚗? |
| 撖<EFBFBD><EFBFBD> | postgres | 撘箏<EFBFBD><EFBFBD><EFBFBD><EFBFBD>RDS<EFBFBD>𥕦遣<EFBFBD>嗉挽蝵殷<EFBFBD> |
| 餈墧𦻖<EFBFBD>𣂼<EFBFBD> | <EFBFBD>𣳇<EFBFBD><EFBFBD>? | connection_limit=10嚗𠄎AE瘥誩<E798A5>靘页<E99D98> |
| 餈墧𦻖頞<EFBFBD>𧒄 | 暺䁅恕 | pool_timeout=10 |
3. 憭锭chema霈輸䔮嚗㇊risma嚗?
// AIclinicalresearch/backend/prisma/schema.prisma
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
schemas = ["platform_schema", "aia_schema", "pkb_schema", "asl_schema",
"common_schema", "dc_schema", "rvw_schema", "admin_schema",
"ssa_schema", "st_schema", "public"]
}
generator client {
provider = "prisma-client-js"
previewFeatures = ["multiSchema"] // <20>舐鍂憭锭chema<6D>舀<EFBFBD>
}
*隞<EFBFBD><EFBFBD>銝剔<EFBFBD>雿輻鍂嚗?
// <20>芸𢆡頝舐眏<E88890>唳迤蝖桃<E89D96>Schema
await prisma.user.findMany() // 霈輸䔮 platform_schema.users
await prisma.project.findMany() // 霈輸䔮 aia_schema.projects
4. <20>毺<EFBFBD>SQL霈輸䔮嚗<E494AE>楊Schema嚗?
// <20>舀<EFBFBD>頝沒chema<6D>亥砭
const result = await prisma.$queryRaw`
SELECT u.name, p.name AS project_name
FROM platform_schema.users u
JOIN aia_schema.projects p ON p.user_id = u.id
`
5. 隡㗛<E99AA1><E3979B>喲𡡒<E596B2>箏<EFBFBD>
// AIclinicalresearch/backend/src/config/database.ts
process.on('SIGTERM', () => gracefulShutdown('SIGTERM')) // SAE摰硺<E691B0><E7A1BA>𨀣迫
process.on('SIGINT', () => gracefulShutdown('SIGINT')) // Ctrl+C
async function gracefulShutdown(signal: string): Promise<void> {
await prisma.$disconnect() // <20>喲𡡒<E596B2><F0A1A192><EFBFBD>㕑<EFBFBD><E39591>? process.exit(0)
}
**餈蹱糓鈭穃<E988AD><E7A983><EFBFBD><EFBFBD>雿喳<E99BBF>頝?*嚗屸俈甇㏎AE<41>拙捆/蝻拙捆<E68B99>嗉<EFBFBD><E59789>交<EFBFBD>瞍譌<E79E8D>?
擐𡝗活<EFBFBD>函蔡<EFBFBD>寞<EFBFBD>
<EFBFBD>寞<EFBFBD>撖寞<EFBFBD>
| <EFBFBD>寞<EFBFBD> | <EFBFBD>寞<EFBFBD> | 隡条<EFBFBD> | 蝻箇<EFBFBD> | <EFBFBD>刻<EFBFBD>摨? |
|---|---|---|---|---|
| <EFBFBD>寞<EFBFBD>A | pg_dump <20>券<EFBFBD>撖澆<E69296> |
<EFBFBD>?100%摰峕㟲嚗<E39FB2><E59A97><EFBFBD>殆g-boss銵剁<E98AB5> <EFBFBD>?蝏𤘪<E89D8F>+<2B>唳旿+蝝W<E89D9D>+憭㚚睸 <EFBFBD>?銝<>甈⊥<E79488>批<EFBFBD><E689B9>? |
<EFBFBD>?<3F><>閬<EFBFBD><E996AC>撌交<E6928C><E4BAA4><EFBFBD><EFBFBD>霂閙㺭<E99699>?br><3E>?<3F><>鉄<EFBFBD>㛖<EFBFBD><E39B96><EFBFBD>ublic銵? | 潃鐥<EFBFBD>潃鐥<EFBFBD>潃?撘箇<EFBFBD><EFBFBD>刻<EFBFBD> |
| <EFBFBD>寞<EFBFBD>B | Prisma Migrate Deploy | <EFBFBD>?<3F><>𧋦<EFBFBD>𣇉恣<F0A38789>?br><3E>?<3F>舫<EFBFBD>憭齿<E686AD>銵? | <EFBFBD>?蝻箏<E89DBB>pg-boss銵剁<E98AB5>餈鞱<E9A488><E99EB1>嗡<EFBFBD><E597A1>仿<EFBFBD>嚗?br><3E>?<3F><>閬<EFBFBD><E996AC>撌亥‘<E4BAA5>? | <EFBFBD>𩤃<EFBFBD> **銝齿綫<E9BDBF>?*嚗<><E59A97>摰峕㟲嚗? |
| <EFBFBD>寞<EFBFBD>C | <EFBFBD>见極SQL<EFBFBD>𡁏𧋦 | <EFBFBD>?摰<><E691B0><EFBFBD>舀綉 | <EFBFBD>?撌乩<E6928C><E4B9A9>誩之 <EFBFBD>?摰寞<E691B0><E5AF9E>粹<EFBFBD> |
<EFBFBD>𩤃<EFBFBD> **銝齿綫<E9BDBF>?*嚗<>晶<EFBFBD>嗉晶<E59789>𨥈<EFBFBD> |
潃?<3F>刻<EFBFBD><E588BB>寞<EFBFBD>A嚗䮝g_dump<6D>券<EFBFBD>撖澆<E69296>嚗<EFBFBD>祕蝏<E7A595>郊撉歹<E69289>
甇仿炊1嚗𡁏𧋦<EFBFBD>唳㺭<EFBFBD>桀<EFBFBD>皜<EFBFBD><EFBFBD>嚗<EFBFBD>虾<EFBFBD>㚁<EFBFBD>
# 憒<><E68692><EFBFBD>砍𧑐<E7A08D>㗇<EFBFBD>霂閙㺭<E99699>殷<EFBFBD><E6AEB7>臭誑<E887AD>㗇𥋘皜<F0A58B98><E79A9C>
docker exec -it ai-clinical-postgres psql -U postgres -d ai_clinical_research
# <20>𣳇膄瘚贝<E7989A><E8B49D>冽<EFBFBD>嚗<EFBFBD><E59A97><EFBFBD>嗵<EFBFBD>摰䂿鍂<E482BF>瘀<EFBFBD>
DELETE FROM platform_schema.users WHERE email LIKE '%test%';
# 皜<><E79A9C><EFBFBD>㛖<EFBFBD><E39B96>?public.users嚗𠄎chema餈<61>宏<EFBFBD>𡒊<EFBFBD><F0A1928A>扯”嚗?DROP TABLE IF EXISTS public.users;
甇仿炊2嚗𡁜紡<EFBFBD>箸㺭<EFBFBD>桀<EFBFBD>嚗<EFBFBD><EFBFBD><EFBFBD>怎<EFBFBD><EFBFBD>?<3F>唳旿嚗?
# 摰峕㟲撖澆枂嚗<E69E82><E59A97><EFBFBD>祆<EFBFBD><E7A586>农chema<6D><61>”<EFBFBD><E2809D>㺭<EFBFBD>柴<EFBFBD><E69FB4>揣撘𨰻<E69298><F0A8B0BB><EFBFBD><EFBFBD>殷<EFBFBD>
docker exec ai-clinical-postgres pg_dump -U postgres -d ai_clinical_research \
--format=plain \
--no-owner \
--no-acl \
--encoding=UTF8 \
> D:\MyCursor\ai_clinical_research_backup_$(Get-Date -Format 'yyyyMMdd_HHmmss').sql
# <20><>辣憭批<E686AD>摨磰砲<E7A3B0>?100-200 KB嚗<42><E59A97><EFBFBD>齿㺭<E9BDBF>桅<EFBFBD>26MB嚗?```
**<2A><>㺭霂湔<E99C82>嚗?*
- `--format=plain`嚗𡁶滲<EFBFBD><EFBFBD>𧋦SQL嚗<EFBFBD>䲮靘踵䰻<EFBFBD>见<EFBFBD>蝻𤥁<EFBFBD>嚗?- `--no-owner`嚗帋<EFBFBD>撖澆枂<EFBFBD><EFBFBD><EFBFBD>㕑<EFBFBD><EFBFBD>縑<EFBFBD>荔<EFBFBD><EFBFBD>踹<EFBFBD>RDS<EFBFBD>冽<EFBFBD><EFBFBD>滢<EFBFBD><EFBFBD>寥<EFBFBD>嚗?- `--no-acl`嚗帋<EFBFBD>撖澆枂<EFBFBD><EFBFBD><EFBFBD>靽⊥<EFBFBD>嚗<EFBFBD>蝙<EFBFBD>沖DS暺䁅恕<EFBFBD><EFBFBD><EFBFBD>嚗?- `--encoding=UTF8`嚗䦧TF-8蝻𣇉<E89DBB>嚗<EFBFBD>葉<EFBFBD><E89189>𣈲<EFBFBD><F0A388B2><EFBFBD>
#### 甇仿炊3嚗鑹DS PostgreSQL 15 <20><><EFBFBD>
```bash
# 1. <20>券燵<E588B8>䔶<EFBFBD><E494B6>批<EFBFBD><E689B9>啣<EFBFBD>撱摧DS PostgreSQL 15摰硺<E691B0>
閫<>聢嚗鬏ds.pg.s2.large嚗?<3F>?GB嚗<42><E59A97><EFBFBD>函漣嚗?摮睃<E691AE>嚗?00GB SSD嚗<44>𣈲<EFBFBD><F0A388B2>䌊<EFBFBD>冽<EFBFBD>摰對<E691B0>
<0A><>𧋦嚗䥪ostgreSQL 15
蝵𤑳<E89DB5>嚗间PC嚗<43><E59A97>SAE<41>典<EFBFBD>銝<EFBFBD>VPC嚗?<3F>賢<EFBFBD><E8B3A2>𤏪<EFBFBD><F0A48FAA>𩤃<EFBFBD> 敹<>◆<EFBFBD>滨蔭VPC蝵烐挾嚗䔶<E59A97><E494B6>賜鍂<E8B39C>閙㦤IP嚗? - 蝷箔<E89DB7>嚗?72.16.0.0/12嚗𠄎AE<41><45>PC蝵烐挾嚗? - <20>亦<EFBFBD><E4BAA6>孵<EFBFBD>嚗锭AE<41>批<EFBFBD><E689B9>?> 摨𠉛鍂霂行<E99C82> > 蝵𤑳<E89DB5><F0A491B3>滨蔭 > VPC蝵烐挾
- <20>?<3F>躰秤蝷箔<E89DB7>嚗?72.16.1.23嚗<EFBFBD><EFBFBD><EFBFBD>截P嚗玺AE摰硺<EFBFBD>IP隡𡁜<EFBFBD><EFBFBD>吔<EFBFBD>
# 2. <20>𥕦遣<F0A595A6>唳旿摨?CREATE DATABASE ai_clinical_research
WITH ENCODING='UTF8'
LC_COLLATE='en_US.UTF-8'
LC_CTYPE='en_US.UTF-8'
TEMPLATE=template0;
# 3. <20>𥕦遣摨𠉛鍂<F0A0899B>冽<EFBFBD>嚗<EFBFBD><E59A97>閬<EFBFBD>鍂頞<E98D82>漣<EFBFBD>冽<EFBFBD>嚗?CREATE USER aiclinical_rw WITH PASSWORD '雿删<E99BBF>撘箏<E69298><E7AE8F>?;
GRANT ALL PRIVILEGES ON DATABASE ai_clinical_research TO aiclinical_rw;
GRANT ALL ON SCHEMA public TO aiclinical_rw;
甇仿炊4嚗𡁜紡<EFBFBD>亙<EFBFBD>RDS
# <20>寞<EFBFBD>1嚗帋<E59A97><E5B88B>砍𧑐<E7A08D>湔𦻖撖澆<E69296>嚗<EFBFBD><E59A97>閬<EFBFBD>DS<44>祉<EFBFBD><E7A589>啣<EFBFBD>嚗?psql -h rm-xxxxx.pg.rds.aliyuncs.com \
-p 5432 \
-U aiclinical_rw \
-d ai_clinical_research \
-f ai_clinical_research_backup_20251214_150000.sql
# <20>寞<EFBFBD>2嚗𡁻<E59A97>朞<EFBFBD>ECS頝單踎<E596AE>箏紡<E7AE8F>伐<EFBFBD><E4BC90>刻<EFBFBD>嚗峕凒摰匧<E691B0>嚗?scp backup.sql root@your-ecs-ip:/tmp/
ssh root@your-ecs-ip
psql -h rm-xxxxx.pg.rds.aliyuncs.com -U aiclinical_rw -d ai_clinical_research -f /tmp/backup.sql
甇仿炊5嚗𡁻<EFBFBD>霂<EFBFBD>紡<EFBFBD>亦<EFBFBD><EFBFBD>?
-- 1. 撉諹<E69289>Schema<6D>圈<EFBFBD>
SELECT nspname FROM pg_namespace WHERE nspname LIKE '%_schema' ORDER BY nspname;
-- 摨磰砲<E7A3B0>?0銝杵chema
-- 2. 撉諹<E69289>銵冽㺭<E586BD>?SELECT schemaname, COUNT(*) as table_count
FROM pg_tables
WHERE schemaname NOT IN ('pg_catalog', 'information_schema')
GROUP BY schemaname
ORDER BY schemaname;
-- platform_schema: 8, aia_schema: 5, pkb_schema: 5, asl_schema: 6, dc_schema: 6
-- 3. 撉諹<E69289><E8ABB9>唳旿<E594B3>?SELECT COUNT(*) FROM platform_schema.users; -- 摨磰砲<E7A3B0>?<3F>∴<EFBFBD><E288B4>碶<EFBFBD>靽萘<E99DBD><E89098><EFBFBD>㺭<EFBFBD>𧶏<EFBFBD>
SELECT COUNT(*) FROM aia_schema.projects; -- 摨磰砲<E7A3B0>?<3F>?SELECT COUNT(*) FROM asl_schema.literatures; -- 摨磰砲<E7A3B0>匧笆摨娍㺭<E5A88D>?
-- 4. 撉諹<E69289>pg-boss銵剁<E98AB5><E58981>喲睸嚗?SELECT tablename FROM pg_tables WHERE schemaname = 'platform_schema' ORDER BY tablename;
-- 摨磰砲<E7A3B0><E7A0B2>𡠺嚗餷ob, job_common, queue, schedule, subscription, version
-- 5. 撉諹<E69289>憭㚚睸蝥行<E89DA5>
SELECT conname, conrelid::regclass, confrelid::regclass
FROM pg_constraint
WHERE contype = 'f'
LIMIT 10;
甇仿炊6嚗𡁻<EFBFBD>蝵娟AE<EFBFBD>臬<EFBFBD><EFBFBD>㗛<EFBFBD>
# <20>沒AE摨𠉛鍂<F0A0899B>滨蔭銝剜溶<E5899C>?DATABASE_URL=postgresql://aiclinical_rw:撘箏<E69298><E7AE8F><EFBFBD>rm-xxxxx.pg.rds.aliyuncs.com:5432/ai_clinical_research?connection_limit=10&pool_timeout=10&connect_timeout=10
# <20>嗡<EFBFBD><E597A1>詨<EFBFBD><E8A9A8>滨蔭
DB_MAX_CONNECTIONS=400 # RDS<44><53>憭扯<E686AD><E689AF>交㺭
MAX_INSTANCES=20 # SAE<41><45>憭批<E686AD>靘𧢲㺭
NODE_ENV=production
甇仿炊7嚗𡁜<EFBFBD><EFBFBD>典鍳<EFBFBD>券<EFBFBD>霂?
// backend<6E>臬𢆡<E887AC>嗡<EFBFBD><E597A1>芸𢆡<E88AB8>扯<EFBFBD>
npm run build
npm run start
// <20>亙<EFBFBD>颲枏枂摨磰砲<E7A3B0>曄內嚗?// <20>?<3F>唳旿摨栞<E691A8><E6A09E>交<EFBFBD><E4BAA4><EFBFBD><EFBFBD>
// <20><> <20>唳旿摨梶<E691A8><E6A2B6>? PostgreSQL 15.x
// <20><> 敶枏<E695B6><E69E8F>唳旿摨栞<E691A8><E6A09E>交㺭: 1
甇仿炊8嚗䥪risma Client<6E><74><EFBFBD>嚗<EFBFBD><E59A97>閬<EFBFBD><E996AC>
# <20>灸ackend<6E>桀<EFBFBD>銝?cd backend
npx prisma generate
# 撉諹<E69289><E8ABB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>lient
ls node_modules/.prisma/client/
# 摨磰砲<E7A3B0><E7A0B2>鉄<EFBFBD><E98984><EFBFBD>农chema<6D><61>掩<EFBFBD>见<EFBFBD>銋?```
### <20>𩤃<EFBFBD> <20>寞<EFBFBD>B銝箔<E98A9D>銋<EFBFBD><E98A8B><EFBFBD>刻<EFBFBD>嚗䥪risma Migrate<74><65><EFBFBD><EFBFBD>?
```bash
# 憒<><E68692><EFBFBD>扯<EFBFBD> prisma migrate deploy
cd backend
npx prisma migrate deploy
# <20>桅<EFBFBD>1嚗𡁶撩撠?pg-boss 銵?# prisma migrate deploy <20>芯<EFBFBD><E88AAF>𥕦遣 Prisma Schema 銝剖<E98A9D>銋厩<E98A8B>銵?# 銝滢<E98A9D><E6BBA2>𥕦遣 pg-boss <20>?6 銝芾”嚗àob, queue蝑㚁<E89D91>
# <20>桅<EFBFBD>2嚗𡁜<E59A97><F0A1819C>典鍳<E585B8>冽𧒄<E586BD>仿<EFBFBD>
# Error: relation "platform_schema.job" does not exist
# <20>牐蛹隞<E89BB9><E99A9E>銝凋蝙<E5878B>其<EFBFBD> pg-boss嚗䔶<E59A97>銵其<E98AB5>摮睃銁
# <20>桅<EFBFBD>3嚗𡁻<E59A97>閬<EFBFBD><E996AC>撌亥‘<E4BAA5>?# 敹<>◆<EFBFBD>见極<E8A781>扯<EFBFBD> pg-boss <20><><EFBFBD>憪见<E686AA>SQL
# <20>𧼮虜蝜<E8999C><E89D9C>銝𥪜捆<F0A5AA9C>枏枂<E69E8F>?```
**蝏栞捏嚗䫤pg_dump` <20>券<EFBFBD>撖澆<E69296><E6BE86>舫<EFBFBD>甈⊿<E79488>蝵脩<E89DB5><E884A9><EFBFBD>雿單䲮獢<E4B2AE><E78DA2>**
---
## <20>芣䔉<E88AA3>湔鰵蝑𣇉裦
### <20>箸艶1嚗𡁏鰵憓硺<E68693>銝芾”<E88ABE>碶耨<E7A2B6>嫣<EFBFBD>銝芸<E98A9D>畾蛛<E795BE>撠𤩺凒<F0A4A9BA>堆<EFBFBD>
#### <20>刻<EFBFBD><E588BB>寞<EFBFBD>嚗䥪risma Migrate嚗<65><E59A97><EFBFBD>砍<EFBFBD>蝞∠<E89D9E>嚗?
```bash
# 甇仿炊1嚗𡁜銁<F0A1819C>砍𧑐撘<F0A79190><E69298>𤑳㴓憓<E3B493>耨<EFBFBD>?schema.prisma
# 蝷箔<E89DB7>嚗帋蛹 User 銵冽溶<E586BD>牐<EFBFBD>銝芸<E98A9D>畾?model User {
id String @id @default(uuid())
email String @unique
// ... <20>嗡<EFBFBD>摮埈挾 ...
phoneNumber String? @map("phone_number") // <20>啣<EFBFBD>摮埈挾
@@map("users")
@@schema("platform_schema")
}
# 甇仿炊2嚗𡁜<E59A97>撱箄<E692B1>蝘鳴<E89D98><E9B3B4>砍𧑐嚗?cd backend
npx prisma migrate dev --name add_user_phone_number
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝘餅<E89D98>隞嗥內靘页<E99D98>
# backend/prisma/migrations/20251214120000_add_user_phone_number/migration.sql
ALTER TABLE "platform_schema"."users" ADD COLUMN "phone_number" TEXT;
# 甇仿炊3嚗𡁏<E59A97>霂閙𧋦<E99699>啗<EFBFBD>蝘?npm run dev
# 撉諹<E69289><E8ABB9>啣<EFBFBD>畾萄虾<E89084>?
# 甇仿炊4嚗𡁏<E59A97>鈭文<E988AD>Git
git add backend/prisma/migrations/20251214120000_add_user_phone_number
git commit -m "feat: add phone_number to User model"
git push
# 甇仿炊5嚗𡁻<E59A97>蝵脣<E89DB5>SAE嚗<45>䌊<EFBFBD>冽<EFBFBD>銵諹<E98AB5>蝘鳴<E89D98>
# <20>?SAE <20><><EFBFBD><EFBFBD>典鍳<E585B8>典𦶢隞支葉瘛餃<E7989B>嚗?# CMD ["sh", "-c", "npx prisma migrate deploy && node dist/index.js"]
# <20>𩤃<EFBFBD> 瘜冽<E7989C>嚗鋽ockerfile <20>?CMD 摨磰砲<E7A3B0>荔<EFBFBD>
CMD ["sh", "-c", "node dist/index.js"]
# 銝滩<E98A9D><E6BBA9>函<EFBFBD>鈭批鍳<E689B9>冽𧒄<E586BD>扯<EFBFBD> migrate deploy嚗<79><E59A97><EFBFBD>拙云憭改<E686AD>
# 甇仿炊6嚗𡁏<E59A97>撌交<E6928C>銵諹<E98AB5>蝘鳴<E89D98><E9B3B4>刻<EFBFBD>嚗?# <20>寞<EFBFBD>1嚗𡁻<E59A97>朞<EFBFBD>ECS頝單踎<E596AE>箸<EFBFBD>銵?ssh root@your-ecs-ip
psql -h rm-xxxxx.pg.rds.aliyuncs.com -U aiclinical_rw -d ai_clinical_research \
-f migrations/20251214120000_add_user_phone_number/migration.sql
# <20>寞<EFBFBD>2嚗帋蝙<E5B88B>?RDS <20>批<EFBFBD><E689B9>啁<EFBFBD> SQL 蝒堒藁
# <20>湔𦻖蝎䁅斐餈<E69690>宏SQL<51>扯<EFBFBD>
# 甇仿炊7嚗𡁻<E59A97>霂?SELECT column_name, data_type
FROM information_schema.columns
WHERE table_schema = 'platform_schema'
AND table_name = 'users'
AND column_name = 'phone_number';
*銝箔<EFBFBD>銋<EFBFBD><EFBFBD><EFBFBD>刻<EFBFBD><EFBFBD>典鍳<EFBFBD>典𦶢隞支葉<EFBFBD>扯<EFBFBD> prisma migrate deploy嚗?
- 撟嗅<EFBFBD>憌𡡞埯嚗锭AE<EFBFBD>匧<EFBFBD>銝芸<EFBFBD>靘页<EFBFBD><EFBFBD>航<EFBFBD><EFBFBD>峕𧒄<EFBFBD>扯<EFBFBD>餈<EFBFBD>宏
- <EFBFBD>墧<EFBFBD><EFBFBD>圈𠗕嚗𡁜<EFBFBD><EFBFBD>𡏭<EFBFBD>蝘餃仃韐伐<EFBFBD>摨𠉛鍂撌脩<EFBFBD><EFBFBD>臬𢆡
- **<2A>唳旿摰匧<E691B0>**嚗𡁶<E59A97>鈭扳㺭<E689B3>桀<EFBFBD>摨磰砲<E7A3B0>见極餈<E6A5B5>宏嚗峕<E59A97>憭<EFBFBD>遢<EFBFBD><E981A2><EFBFBD>皛朞恣<E69C9E>?
<EFBFBD>箸艶2嚗𡁏鰵憓硺<EFBFBD>銝芸之璅∪<EFBFBD>嚗<EFBFBD><EFBFBD>SSA<EFBFBD>箄<EFBFBD>蝏蠘恣<EFBFBD><EFBFBD><EFBFBD>嚗?
<EFBFBD>刻<EFBFBD><EFBFBD>寞<EFBFBD>嚗𡁶<EFBFBD><EFBFBD><EFBFBD><EFBFBD>餈<EFBFBD>宏瘚<EFBFBD><EFBFBD>
# 甇仿炊1嚗𡁜銁<F0A1819C>砍𧑐撘<F0A79190><E69298>𤑳㴓憓<E3B493>挽霈﹖chema
# 蝷箔<E89DB7>嚗锭SA嚗<41>惣<EFBFBD>賜<EFBFBD>霈∪<E99C88><E288AA>琜<EFBFBD>璅∪<E79285>
# backend/prisma/schema.prisma
// SSA Schema嚗<61>鰵憓痹<E68693>
model SsaAnalysisTask {
id String @id @default(uuid())
userId String @map("user_id")
projectId String @map("project_id")
taskName String @map("task_name")
status String @default("pending")
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
user User @relation(fields: [userId], references: [id])
results SsaAnalysisResult[]
@@map("analysis_tasks")
@@schema("ssa_schema")
}
model SsaAnalysisResult {
id String @id @default(uuid())
taskId String @map("task_id")
resultType String @map("result_type")
resultData Json @map("result_data")
createdAt DateTime @default(now()) @map("created_at")
task SsaAnalysisTask @relation(fields: [taskId], references: [id])
@@map("analysis_results")
@@schema("ssa_schema")
}
# 甇仿炊2嚗𡁜<E59A97>撱箄<E692B1>蝘?npx prisma migrate dev --name add_ssa_module
# 甇仿炊3嚗𡁻<E59A97>霂<EFBFBD><E99C82>蝘艋QL
# backend/prisma/migrations/20251214_add_ssa_module/migration.sql
-- 璉<><E79289>伐<EFBFBD>
-- 1. <20>臬炏<E887AC>?ssa_schema 銝剖<E98A9D>撱箄”
-- 2. 憭㚚睸<E39A9A>臬炏甇<E7828F>&撘閧鍂 platform_schema.users
-- 3. 蝝W<E89D9D><EFBCB7>臬炏摰峕㟲
# 甇仿炊4嚗𡁏𧋦<F0A1818F>唳<EFBFBD>霂?# 撘<><E69298>騌SA璅∪<E79285><E288AA><EFBFBD><EFBFBD><EFBFBD>⊿<EFBFBD>餉<EFBFBD>
# 蝖桐<E89D96><E6A190><EFBFBD><EFBFBD>攊RUD<55>滢<EFBFBD>甇<EFBFBD>虜
# 甇仿炊5嚗𡁜<E59A97>憭<EFBFBD><E686AD>鈭折<E988AD>蝵?# 5.1 <20>唳旿摨枏<E691A8>隞踝<E99A9E>撘箏<E69298>嚗?# <20>沖DS<44>批<EFBFBD><E689B9>唳<EFBFBD><E594B3>典<EFBFBD>撱箏翰<E7AE8F>改<EFBFBD>ai_clinical_research_before_ssa_module_20251214
# 5.2 <20><><EFBFBD><EFBFBD>墧<EFBFBD><E5A2A7>𡁏𧋦
# backend/prisma/migrations/20251214_add_ssa_module/rollback.sql
DROP TABLE IF EXISTS ssa_schema.analysis_results CASCADE;
DROP TABLE IF EXISTS ssa_schema.analysis_tasks CASCADE;
# 甇仿炊6嚗𡁶<E59A97>鈭抒㴓憓<E3B493><E68693>蝘鳴<E89D98><E9B3B4><EFBFBD>郊<EFBFBD>扯<EFBFBD>嚗?# 6.1 <20>𨀣㦤蝒堒藁嚗<E89781>虾<EFBFBD>㚁<EFBFBD>憒<EFBFBD><E68692><EFBFBD>䭾<EFBFBD><E4ADBE>嗅<EFBFBD><E59785>綽<EFBFBD>
# <20>帋<EFBFBD>11<31>?<3F>峕膥2<E886A5>對<EFBFBD><E5B08D>冽<EFBFBD><E586BD><EFBFBD>撠?
# 6.2 <20>扯<EFBFBD>餈<EFBFBD>宏SQL
psql -h rm-xxxxx.pg.rds.aliyuncs.com -U aiclinical_rw -d ai_clinical_research \
-f migrations/20251214_add_ssa_module/migration.sql
# 6.3 撉諹<E69289>銵函<E98AB5><E587BD>?\dt ssa_schema.*
\d ssa_schema.analysis_tasks
\d ssa_schema.analysis_results
# 6.4 撉諹<E69289>憭㚚睸
SELECT conname, conrelid::regclass, confrelid::regclass
FROM pg_constraint
WHERE connamespace = 'ssa_schema'::regnamespace;
# 甇仿炊7嚗𡁻<E59A97>蝵脣<E89DB5><E884A3>其誨<E585B6>?# 7.1 <20>湔鰵backend
git pull
npm run build
# SAE<41>芸𢆡<E88AB8>函蔡<E587BD>𡝗<EFBFBD><F0A19D97>刻圻<E588BB>煾<EFBFBD>蝵?
# 7.2 <20>亙熒璉<E78692><E79289>?curl https://your-backend.sae.aliyuncs.com/health
# 摨磰砲餈𥪜<E9A488> 200 OK
# 甇仿炊8嚗𡁶<E59A97><F0A181B6>暹<EFBFBD>霂𤏪<E99C82>Smoke Testing嚗?# 8.1 瘚贝<E7989A>SSA璅∪<E79285><E288AA>箸𧋦<E7AEB8>蠘<EFBFBD>
POST /api/v1/ssa/analysis-tasks
GET /api/v1/ssa/analysis-tasks/:id
# 8.2 瘚贝<E7989A><E8B49D>扳芋<E689B3>梹<EFBFBD><E6A2B9>𧼮<EFBFBD>瘚贝<E7989A>嚗?GET /api/v1/aia/projects
GET /api/v1/pkb/knowledge-bases
# 蝖桐<E89D96><E6A190>批<EFBFBD><E689B9>賭<EFBFBD><E8B3AD>堒蔣<E5A092>?
# 甇仿炊9嚗𡁶<E59A97><F0A181B6>?4撠𤩺𧒄
# 9.1 RDS<44>烐綉
# - 餈墧𦻖<E5A2A7>唳糓<E594B3>行迤撣?# - CPU/<2F><><EFBFBD>雿輻鍂<E8BCBB>?# - <20>X䰻霂X𠯫敹?
# 9.2 SAE<41>烐綉
# - 摨𠉛鍂<F0A0899B>亙<EFBFBD>嚗<EFBFBD><E59A97>霂舀㺭<E88880>𧶏<EFBFBD>
# - API<50>滚<EFBFBD><E6BB9A>園𡢿
# - 摰硺<E691B0><E7A1BA>亙熒<E4BA99>嗆<EFBFBD>?
# 甇仿炊10嚗𡁜<E59A97><F0A1819C>𨅯仃韐伐<E99F90>蝡见朖<E8A781>墧<EFBFBD>
# 10.1 <20>墧<EFBFBD><E5A2A7>唳旿摨?psql -h rm-xxxxx.pg.rds.aliyuncs.com -U aiclinical_rw -d ai_clinical_research \
-f migrations/20251214_add_ssa_module/rollback.sql
# 10.2 <20>墧<EFBFBD>摨𠉛鍂隞<E98D82><E99A9E>
# <20>沒AE<41>批<EFBFBD><E689B9>圈<EFBFBD>㗇𥋘銝𠹺<E98A9D>銝芰<E98A9D><E88AB0>穿<EFBFBD><E7A9BF>孵稬"<22>墧<EFBFBD>"
# 10.3 <20>W<EFBFBD>RDS敹怎<E695B9>嚗<EFBFBD><E59A97><EFBFBD>𨅯<EFBFBD>閬<EFBFBD><E996AC>
# <20>沖DS<44>批<EFBFBD><E689B9>唳<EFBFBD>憭滚翰<E6BB9A>改<EFBFBD>ai_clinical_research_before_ssa_module_20251214
<EFBFBD>箸艶3嚗𡁶揮<EFBFBD>乩耨憭㵪<EFBFBD>Hotfix嚗?
# 蝷箔<E89DB7>嚗䮝roduction<6F>臬<EFBFBD><E887AC>𤑳緵<F0A491B3>𣂷葵摮埈挾<E59F88>踹漲銝滚<E98A9D>
# 甇仿炊1嚗𡁏𧋦<F0A1818F>啣<EFBFBD>撱箇揮<E7AE87>亥<EFBFBD>蝘?# backend/prisma/schema.prisma
model User {
// 撠?email 摮埈挾<E59F88>踹漲隞?varchar(255) <20>嫣蛹 text
email String @unique // Prisma暺䁅恕<E48185>眩ext嚗峕<E59A97><E5B395><EFBFBD>靽格㺿
// ...
}
# 甇仿炊2嚗𡁶<E59A97><F0A181B6>鞱<EFBFBD>蝘?npx prisma migrate dev --name hotfix_user_email_length
# 甇仿炊3嚗𡁏<E59A97>霂閗<E99C82>蝘艋QL嚗<4C>𧋦<EFBFBD>堆<EFBFBD>
# 蝖桐<E89D96>銝滢<E98A9D>銝W仃<EFBCB7>唳旿
# 甇仿炊4嚗𡁶<E59A97>鈭抒㴓憓<E3B493><E68693>銵䕘<E98AB5>敹恍<E695B9>罸<EFBFBD>𡁻<EFBFBD>嚗?# 4.1 憭<>遢嚗<E981A2>翰<EFBFBD>改<EFBFBD>
# RDS<44>批<EFBFBD><E689B9>?> 憭<>遢 > 蝡见朖憭<E69C96>遢 > 憭<>釣嚗冴otfix_before_email_length
# 4.2 <20>扯<EFBFBD>SQL嚗<4C><E59A97>朞<EFBFBD>SQL蝒堒藁嚗𣬚<E59A97>蝥批<E89DA5><E689B9>琜<EFBFBD>
ALTER TABLE platform_schema.users ALTER COLUMN email TYPE TEXT;
# 4.3 撉諹<E69289>
SELECT column_name, data_type, character_maximum_length
FROM information_schema.columns
WHERE table_schema = 'platform_schema'
AND table_name = 'users'
AND column_name = 'email';
# 4.4 <20>𣂷漱Git
git add backend/prisma/migrations/20251214_hotfix_user_email_length
git commit -m "hotfix: increase user email column length"
git push
RDS憭<EFBFBD>遢蝑𣇉裦
1. <20>輸<EFBFBD>鈭駵DS<44>芸𢆡憭<F0A286A1>遢嚗<E981A2>撩<EFBFBD><E692A9>綫<EFBFBD>琜<EFBFBD><E7909C>?
1.1 <20>滨蔭<E6BBA8>芸𢆡憭<F0A286A1>遢
# <20>沖DS<44>批<EFBFBD><E689B9>圈<EFBFBD>蝵?憭<>遢霈曄蔭 > 憭<>遢蝑𣇉裦
# <20>刻<EFBFBD><E588BB>滨蔭嚗?<3F>唳旿憭<E697BF>遢靽萘<E99DBD><E89098>園𡢿嚗?憭抬<E686AD><E68AAC>滩晶憸嘥漲嚗?<3F>亙<EFBFBD>憭<EFBFBD>遢靽萘<E99DBD><E89098>園𡢿嚗?憭?憭<>遢<EFBFBD>冽<EFBFBD>嚗𡁏<E59A97>憭拐<E686AD>甈?憭<>遢<EFBFBD>園𡢿嚗𡁜<E59A97><F0A1819C>?:00-4:00嚗<30><E59A97><EFBFBD>∩<EFBFBD>撜唳<E6929C>嚗?憭<>遢<EFBFBD>孵<EFBFBD>嚗𡁶<E59A97><F0A181B6><EFBFBD><EFBFBD>隞踝<E99A9E>敹恬<E695B9><E681AC>删鍂蝛粹𡢿撠𧶏<E692A0>
*隡睃飵嚗?
- <EFBFBD>?<3F>刻䌊<E588BB>剁<EFBFBD><E58981>𣳇<EFBFBD>鈭箏極撟脤<E6929F>
- <EFBFBD>?<3F>園𡢿<E59C92>寞<EFBFBD>憭㵪<E686AD>Point-in-Time Recovery嚗釶ITR嚗㚁<E59A97><E39A81>舀<EFBFBD>憭滚<E686AD>隞餅<E99A9E>蝘?- <20>?摮睃<E691AE><E79D83>汰SS嚗𣬚𡠺蝡衤<E89DA1>RDS摰硺<E691B0>
- <EFBFBD>?<3F>滩晶嚗?憭拙<E686AD>嚗?
1.2 <20>见𢆡敹怎<E695B9>嚗<EFBFBD><E59A97>閬<EFBFBD><E996AC>雿𨅯<E99BBF>嚗?
# <20>箸艶嚗?# - 憭抒<E686AD><E68A92>砍<EFBFBD>蝥批<E89DA5>
# - <20>唳旿摨廍chema<6D>滚之<E6BB9A>䀹凒<E480B9>?# - <20>𣳇膄憭折<E686AD><E68A98>唳旿<E594B3>?
# <20>滢<EFBFBD>嚗?RDS<44>批<EFBFBD><E689B9>?> 憭<>遢<EFBFBD>W<EFBFBD> > 憭<>遢摰硺<E691B0> > <20>𥕦遣憭<E981A3>遢
憭<>遢<EFBFBD>孵<EFBFBD>嚗𡁶<E59A97><F0A181B6><EFBFBD><EFBFBD>隞?憭<>釣嚗饢igration_before_ssa_module_20251214
*敹怎<EFBFBD>靽萘<EFBFBD>撱箄悅嚗?
- 餈<EFBFBD>宏<EFBFBD>滚翰<EFBFBD>改<EFBFBD>靽萘<EFBFBD>30憭?- <20><>𧋦<EFBFBD><F0A78BA6>漣<EFBFBD>滚翰<E6BB9A>改<EFBFBD>靽萘<E99DBD>60憭?- 摮<>漲敶埝﹝敹怎<E695B9>嚗帋<E59A97><E5B88B>?撟?
2. <20>餉<EFBFBD>憭<EFBFBD>遢嚗Ǒpg_dump`嚗? <20>舫<EFBFBD>厩<EFBFBD><E58EA9>伐<EFBFBD>銝𡁜𦛚<F0A1819C>𡁜之<F0A1819C>𤾸<EFBFBD><F0A4BEB8><EFBFBD><EFBFBD>嚗?
<EFBFBD>𩤃<EFBFBD> <20>脲<EFBFBD>撱箄悅嚗帋<E59A97><E5B88B><EFBFBD>閬<EFBFBD>䌊撌勗<E6928C><E58B97>𡁏𧋦嚗朙DS<44>芸𢆡憭<F0A286A1>遢撠勗<E692A0>鈭<EFBFBD><E988AD>
| <EFBFBD>嗆挾 | 憭<EFBFBD>遢蝑𣇉裦 | <EFBFBD><EFBFBD>眏 |
|---|---|---|
| <EFBFBD>脲<EFBFBD>嚗<EFBFBD><EFBFBD><EFBFBD>㵪<EFBFBD> | <EFBFBD>?<3F>芰鍂RDS<44>芸𢆡憭<F0A286A1>遢 | - <20>芸𢆡憭<F0A286A1>遢+<2B>亙<EFBFBD>憭<EFBFBD>遢=PITR嚗<52>遙<EFBFBD>𤩺𧒄<F0A4A9BA>渡<EFBFBD><E6B8A1>W<EFBFBD>嚗?br>- <20>輸<EFBFBD>鈭烐<E988AD>蝞∴<E89D9E>蝔喳<E89D94><E596B3>舫<EFBFBD> - <20>𣳇<EFBFBD>蝏湔擪<E6B994>𡁏𧋦<F0A1818F>袏CS |
| *<EFBFBD>鞾鵭<EFBFBD>? | <EFBFBD>舫<EFBFBD>㚁<EFBFBD>憓𧼮<EFBFBD>撘<EFBFBD>𧑐<EFBFBD>曉<EFBFBD> | - 銝𡁜𦛚<F0A1819C>喲睸<E596B2>𠬍<EFBFBD><F0A0AC8D><EFBFBD><EFBFBD>憭𡁜𧑐<F0A1819C>笔<EFBFBD>隞?br>- 雿輻鍂RDS<44>?頝典𧑐<E585B8>笔<EFBFBD>隞?<3F>蠘<EFBFBD>嚗<EFBFBD><E59A97><EFBFBD>桅<EFBFBD>蝵殷<E89DB5> |
| *<EFBFBD>鞟<EFBFBD><EFBFBD>? | <EFBFBD>舫<EFBFBD>㚁<EFBFBD><EFBFBD>芸<EFBFBD>銋匧<EFBFBD>隞? | - <20><>閬<EFBFBD>鸌畾𠰴<E795BE>隞賜<E99A9E><E8B39C>伐<EFBFBD>憒<EFBFBD><E68692>撠𤩺𧒄憭<F0A79284>遢嚗?br>- <20><>閬<EFBFBD>鵭<EFBFBD>笔<EFBFBD>獢<EFBFBD><E78DA2>憒?撟湛<E6929F> |
憒<EFBFBD><EFBFBD><EFBFBD>芣䔉<EFBFBD><EFBFBD>閬<EFBFBD>䌊摰帋<EFBFBD>憭<EFBFBD>遢嚗<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>穿<EFBFBD>
# <20>𩤃<EFBFBD> 隞<><E99A9E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>脲<EFBFBD>銝漤<E98A9D>閬<EFBFBD><E996AC>銵?#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/data/pg_backups"
RDS_HOST="rm-xxxxx.pg.rds.aliyuncs.com"
RDS_USER="aiclinical_rw"
RDS_DB="ai_clinical_research"
# 撖澆枂SQL
pg_dump -h $RDS_HOST -U $RDS_USER -d $RDS_DB \
--format=plain \
--no-owner \
--no-acl \
--encoding=UTF8 \
--file=$BACKUP_DIR/ai_clinical_research_$DATE.sql
# <20>讠憬撟嗡<E6929F>隡惩<E99AA1>OSS
gzip $BACKUP_DIR/ai_clinical_research_$DATE.sql
ossutil cp $BACKUP_DIR/ai_clinical_research_$DATE.sql.gz \
oss://your-bucket/database-backups/
# 皜<><E79A9C><EFBFBD>砍𧑐憭<F0A79190>遢
ls -t $BACKUP_DIR/*.sql.gz | tail -n +4 | xargs rm -f
<EFBFBD>餌<EFBFBD>嚗𡁜<EFBFBD><EFBFBD>煺<EFBFBD>瘜沖DS<EFBFBD>芸𢆡憭<EFBFBD>遢嚗𣬚<EFBFBD>敹<EFBFBD><EFBFBD><EFBFBD>𨥈<EFBFBD>
3. <20>W<EFBFBD>瞍𠉛<E79E8D>嚗<EFBFBD><E59A97>摮<EFBFBD>漲銝<E6BCB2>甈∴<E79488>
# <20>桃<EFBFBD>嚗𡁻<E59A97>霂<EFBFBD><E99C82>隞賢虾<E8B3A2>剁<EFBFBD><E58981><EFBFBD><EFBFBD><EFBFBD>W<EFBFBD>瘚<EFBFBD><E7989A>
# 甇仿炊1嚗𡁜<E59A97>撱箸<E692B1>霂𥵃DS摰硺<E691B0>
# RDS<44>批<EFBFBD><E689B9>?> <20>𥕦遣摰硺<E691B0> > <20>匧<EFBFBD>隞賢<E99A9E>撱?# <20>㗇𥋘<E39787><F0A58B98><EFBFBD>啁<EFBFBD><E59581>芸𢆡憭<F0A286A1>遢<EFBFBD>硋翰<E7A18B>?
# 甇仿炊2嚗𡁻<E59A97>霂<EFBFBD>㺭<EFBFBD>桀<EFBFBD><E6A180>湔<EFBFBD>?psql -h test-rm-xxxxx.pg.rds.aliyuncs.com -U aiclinical_rw -d ai_clinical_research
# 璉<><E79289>伐<EFBFBD>
SELECT schemaname, COUNT(*) FROM pg_tables
WHERE schemaname NOT IN ('pg_catalog', 'information_schema')
GROUP BY schemaname;
SELECT COUNT(*) FROM platform_schema.users;
# 甇仿炊3嚗朞扇敶閙<E695B6>憭齿𧒄<E9BDBF>?# 26MB<4D>唳旿摨橒<E691A8>摰峕㟲<E5B395>W<EFBFBD>蝥?-10<31><30><EFBFBD>
# 甇仿炊4嚗𡁜<E59A97><F0A1819C>斗<EFBFBD>霂訫<E99C82>靘?```
### 4. 憭<>遢<EFBFBD>烐綉銝𤾸<E98A9D>霅?
```bash
# <20>券燵<E588B8>䔶<EFBFBD><E494B6>烐綉<E78390>滨蔭<E6BBA8>𡃏郎閫<E9838E><E996AB>
# 閫<><E996AB>1嚗𡁜<E59A97>隞賢仃韐亙<E99F90>霅?韏<><E99F8F>嚗鑹DS摰硺<E691B0>
<0A><><EFBFBD>嚗𡁜<E59A97>隞賭遙<E8B3AD>∠𠶖<E288A0>?<3F>∩辣嚗𡁜<E59A97>隞賢仃韐?<3F>𡁶䰻嚗𡁻<E59A97><F0A181BB>厩黎 + <20>桐辣
# 閫<><E996AB>2嚗𡁜<E59A97>隞賜征<E8B39C>港<EFBFBD>頞喳<E9A09E>霅?韏<><E99F8F>嚗鑹DS摰硺<E691B0>
<0A><><EFBFBD>嚗𡁜<E59A97>隞賭蝙<E8B3AD>函征<E587BD>?<3F>∩辣嚗?80%
<0A>𡁶䰻嚗𡁻<E59A97>隞?
# 閫<><E996AB>3嚗朞<E59A97>餈?4撠𤩺𧒄<F0A4A9BA>芸<EFBFBD>隞賢<E99A9E>霅?韏<><E99F8F>嚗鑹DS摰硺<E691B0>
<0A><><EFBFBD>嚗𡁏<E59A97><F0A1818F>𤾸<EFBFBD>隞賣𧒄<E8B3A3>?<3F>∩辣嚗?24撠𤩺𧒄
<0A>𡁶䰻嚗𡁶揮<F0A181B6>伐<EFBFBD><E4BC90>凋縑+<2B>菔<EFBFBD>嚗?```
---
## <20><>雿喳<E99BBF>頝萎<E9A09D>蝳<EFBFBD>迫<EFBFBD>滢<EFBFBD>
### <20>?<3F><>雿喳<E99BBF>頝蛛<E9A09D>11<31>⊿<EFBFBD><E28ABF>烐<EFBFBD><E78390>辷<EFBFBD>
#### 1. 餈墧𦻖瘙删恣<E588A0>?
```typescript
// <20>?甇<>&嚗𡁜銁 DATABASE_URL 銝剝<E98A9D>蝵株<E89DB5><E6A0AA>仿<EFBFBD><E4BBBF>?DATABASE_URL=postgresql://user:pass@host:5432/db?connection_limit=10&pool_timeout=10
// <20>?甇<>&嚗𡁏覔<F0A1818F>娟AE摰硺<E691B0><E7A1BA>啣𢆡<E595A3><F0A286A1>恣蝞?connectionLimit = Math.floor(400 / 20) - 10 = 10
// <20>?<3F>躰秤嚗帋<E59A97><E5B88B>滨蔭餈墧𦻖<E5A2A7>𣂼<EFBFBD>嚗<EFBFBD><E59A97><EFBFBD>堒偷RDS餈墧𦻖嚗?DATABASE_URL=postgresql://user:pass@host:5432/db
2. 隡㗛<E99AA1><E3979B>喲𡡒
// <20>?甇<>&嚗𡁶<E59A97><F0A181B6>?SIGTERM 靽∪噡
process.on('SIGTERM', async () => {
await prisma.$disconnect()
process.exit(0)
})
// <20>?<3F>躰秤嚗帋<E59A97><E5B88B>喲𡡒餈墧𦻖嚗𠄎AE蝻拙捆<E68B99>嗉<EFBFBD><E59789>交<EFBFBD>瞍𧶏<E79E8D>
3. 鈭见𦛚蝞∠<E89D9E>
// <20>?甇<>&嚗帋蝙<E5B88B>沌risma鈭见𦛚
await prisma.$transaction(async (tx) => {
await tx.user.create({ data: { email: 'test@example.com' } })
await tx.project.create({ data: { userId: 'xxx', name: 'Test' } })
})
// <20>?<3F>躰秤嚗𡁏<E59A97><F0A1818F>函恣<E587BD><E681A3><EFBFBD><EFBFBD>∴<EFBFBD>摰寞<E691B0>敹䁅扇COMMIT嚗?await prisma.$executeRaw`BEGIN`
// ... 憭帋葵<E5B88B>滢<EFBFBD> ...
await prisma.$executeRaw`COMMIT` // 憒<><E68692>銝剝𡢿<E5899D>粹<EFBFBD>嚗䔶<E59A97>隡𡁜<E99AA1>皛?```
#### 4. Schema<EFBFBD>𠉛氖霈輸䔮
```typescript
// <20>?甇<>&嚗䥪risma<6D>芸𢆡頝舐眏<E88890>唳迤蝖桃<E89D96>Schema
await prisma.user.findMany() // <20>芸𢆡霈輸䔮 platform_schema.users
// <20>?甇<>&嚗朞楊Schema<6D>亥砭嚗<E7A0AD><E59A97><EFBFBD>桀<EFBFBD>蝟鳴<E89D9F>
await prisma.user.findUnique({
where: { id: 'xxx' },
include: { projects: true } // <20>芸𢆡JOIN aia_schema.projects
})
// <20>?<3F>躰秤嚗𡁏<E59A97><F0A1818F>簒chema<6D>滨妍嚗㇊risma銝齿綫<E9BDBF>琜<EFBFBD>
await prisma.$queryRaw`SELECT * FROM platform_schema.users` // <20>臭誑撌乩<E6928C>嚗䔶<E59A97>蝐餃<E89D90>銝滚<E98A9D><E6BB9A>?```
#### 5. 蝝W<EFBFBD>隡睃<EFBFBD>
```sql
-- <20>?甇<>&嚗帋蛹憸𤑳<E686B8><F0A491B3>亥砭<E4BAA5><E7A0AD><EFBFBD>畾萄<E795BE>撱箇揣撘?CREATE INDEX idx_users_email ON platform_schema.users(email);
CREATE INDEX idx_projects_user_id ON aia_schema.projects(user_id);
-- <20>?甇<>&嚗帋蛹憭㚚睸<E39A9A>𥕦遣蝝W<E89D9D>嚗㇊risma銝滩䌊<E6BBA9>典<EFBFBD>撱綽<E692B1>
CREATE INDEX idx_conversations_project_id ON aia_schema.conversations(project_id);
-- <20>?<3F>躰秤嚗𡁜<E59A97>撱箄<E692B1>憭𡁶揣撘𤏪<E69298>敶勗<E695B6><E58B97>坔<EFBFBD><E59D94>扯<EFBFBD>嚗?-- <20>芯蛹憸𤑳<E686B8><F0A491B3>亥砭<E4BAA5><E7A0AD><EFBFBD>畾萄<E795BE>撱箇揣撘?```
#### 6. 餈<EFBFBD>宏瘚贝<EFBFBD>
```bash
# <20>?甇<>&嚗𡁜<E59A97><F0A1819C>冽<EFBFBD>霂閧㴓憓<E3B493><E68693>霂?# 瘚贝<E7989A><E8B49D>臬<EFBFBD> > 憸<><E686B8><EFBFBD>臬<EFBFBD> > <20>煺漣<E785BA>臬<EFBFBD>
# <20>?甇<>&嚗𡁜<E59A97>憭<EFBFBD><E686AD>皛朞<E79A9B><E69C9E>?# 瘥譍葵餈<E891B5>宏<EFBFBD>賣<EFBFBD>撖孵<E69296><E5ADB5><EFBFBD>ollback.sql
# <20>?<3F>躰秤嚗𡁶凒<F0A181B6>亙銁<E4BA99>煺漣<E785BA>臬<EFBFBD><E887AC>扯<EFBFBD><E689AF>芣<EFBFBD>霂閧<E99C82>餈<EFBFBD>宏
7. 憭<>遢撉諹<E69289>
# <20>?甇<>&嚗𡁏<E59A97>摮<EFBFBD>漲<EFBFBD>W<EFBFBD>瞍𠉛<E79E8D>
# 蝖桐<E89D96>憭<EFBFBD>遢<EFBFBD>舐鍂
# <20>?甇<>&嚗𡁻<E59A97>閬<EFBFBD><E996AC>雿𨅯<E99BBF><F0A885AF>见𢆡敹怎<E695B9>
# 憭抒<E686AD><E68A92>砍<EFBFBD>蝥扼<E89DA5><E689BC>chema<6D>䀹凒<E480B9>?
# <20>?<3F>躰秤嚗帋<E59A97>銝漤<E98A9D>霂<EFBFBD><E99C82>隞踝<E99A9E>憭<EFBFBD>遢憭望<E686AD><E69C9B>嗆<EFBFBD><E59786>𤑳緵嚗?```
#### 8. <20>烐綉<E78390>𡃏郎
```bash
# <20>?甇<>&嚗𡁶<E59A97><F0A181B6>批<EFBFBD><E689B9>格<EFBFBD><E6A0BC>?- RDS餈墧𦻖<E5A2A7>堆<EFBFBD><E5A086>𡃏郎<F0A1838F><E9838E><EFBFBD>潘<EFBFBD>80%嚗?- <20>X䰻霂g<E99C82><EFBD87>𡃏郎<F0A1838F><E9838E><EFBFBD>潘<EFBFBD>>1蝘𡜐<E89D98>
- 甇駁<E79487>嚗<EFBFBD><E59A97>霅阡<E99C85><E998A1>潘<EFBFBD>>0嚗?- CPU雿輻鍂<E8BCBB><E98D82><EFBFBD><EFBFBD>𡃏郎<F0A1838F><E9838E><EFBFBD>潘<EFBFBD>>70%嚗?
# <20>?<3F>躰秤嚗帋<E59A97><E5B88B>烐綉嚗<E7B689>䔮憸睃<E686B8><E79D83>笔<EFBFBD><E7AC94>滚<EFBFBD><E6BB9A>堆<EFBFBD>
9. 撖<><E69296>蝞∠<E89D9E>
# <20>?甇<>&嚗帋蝙<E5B88B>典撩撖<E692A9><E69296>嚗?6雿?憭批<E686AD><E689B9>?<3F>啣<EFBFBD>+蝚血噡嚗?DATABASE_URL=postgresql://user:Abc123!@#XYZ456@host:5432/db
# <20>?甇<>&嚗𡁜<E59A97><F0A1819C>蠘蔭<E8A098>W<EFBFBD><EFBCB7><EFBFBD><EFBFBD>瘥?銝芣<E98A9D>嚗?
# <20>?<3F>躰秤嚗帋蝙<E5B88B>典摹撖<E691B9><E69296>嚗īostgres/123456嚗?```
#### 10. 蝵𤑳<E89DB5>摰匧<E691B0>
```bash
# <20>?甇<>&嚗鑹DS<44>芸<EFBFBD>霈禽PC<50><43><EFBFBD>霈輸䔮
# <20>賢<EFBFBD><E8B3A2>閖<EFBFBD>蝵殷<E89DB5>敹<EFBFBD>◆雿輻鍂VPC蝵烐挾嚗䔶<E59A97><E494B6>賜鍂<E8B39C>閙㦤IP
<0A>賢<EFBFBD><E8B3A2>閧內靘页<E99D98>172.16.0.0/12嚗𠄎AE<41><45>PC蝵烐挾嚗?<3F>瑕<EFBFBD><E79195>孵<EFBFBD>嚗锭AE<41>批<EFBFBD><E689B9>?> 摨𠉛鍂霂行<E99C82> > 蝵𤑳<E89DB5><F0A491B3>滨蔭 > VPC蝵烐挾
# <20>?甇<>&嚗帋<E59A97>撘<EFBFBD><E69298>曉<EFBFBD>蝵𤏸挪<F0A48FB8>殷<EFBFBD><E6AEB7>日<EFBFBD>銝湔𧒄靚<F0A79284><E99D9A>嚗?
# <20>?<3F>躰秤1嚗𡁶蒾<F0A181B6>滚<EFBFBD><E6BB9A>滨蔭 0.0.0.0/0嚗<30><E59A97>銝𣇉<E98A9D><F0A38789>航挪<E888AA>殷<EFBFBD>
# <20>?<3F>躰秤2嚗𡁶蒾<F0A181B6>滚<EFBFBD><E6BB9A>滨蔭<E6BBA8>閙㦤IP 172.16.1.23嚗𠄎AE摰硺<EFBFBD>IP隡𡁜<EFBFBD><EFBFBD>吔<EFBFBD>撖潸稲餈墧𦻖憭梯揖嚗?# <20>?<3F>躰秤3嚗𡁻<E59A97>蝵桀<E89DB5>銝芸<E98A9D><E88AB8>截P嚗<50>輕<EFBFBD>文𤌴<E69687>橘<EFBFBD>銝娍<E98A9D>瘜訫<E7989C>撖酬AE撘寞<E69298>扳<EFBFBD>摰對<E691B0>
11. pg-boss銵函恣<E587BD>?
// <20>?甇<>&嚗帋<E59A97>閬<EFBFBD>銁Prisma Schema銝剖<E98A9D>銋纺g-boss銵?// pg-boss<73>芸𢆡蝞∠<E89D9E>嚗䔶<E59A97><E494B6><EFBFBD>閬<EFBFBD><E996AC>撌亙<E6928C>銋?
// <20>?甇<>&嚗帋<E59A97>閬<EFBFBD><E996AC>撌乩耨<E4B9A9>雷g-boss銵?// <20>航<EFBFBD>撖潸稲隞餃𦛚<E9A483>笔<EFBFBD>撘<EFBFBD>虜
// <20>?<3F>躰秤嚗𡁜<E59A97><F0A1819C>小g-boss銵?// DROP TABLE platform_schema.job; // 隡𡁜紡<F0A1819C>游<EFBFBD><E6B8B8>典援皞?```
#### 12. <EFBFBD>嗅躹蝏煺<EFBFBD><EFBFBD>滨蔭 潃鐥<EFBFBD>潃鐥<EFBFBD>潃?
```sql
-- <20>?甇<>&嚗鑹DS<44>嗅躹<E59785>滨蔭銝?Asia/Shanghai
-- RDS<44>批<EFBFBD><E689B9>?> <20><>㺭霈曄蔭 > timezone
timezone = Asia/Shanghai
-- <20>?撉諹<E69289><E8ABB9>嗅躹
SHOW timezone;
-- 摨磰砲<E7A3B0>曄內嚗鋫sia/Shanghai
-- <20>?<3F>躰秤嚗帋蝙<E5B88B>沃TC<54>嗅躹嚗<E8BAB9><E59A97>摨𠉛鍂<F0A0899B>嗅躹銝滢<E98A9D><E6BBA2>湛<EFBFBD>
-- <20>擧<EFBFBD>嚗?-- 1. <20>亙<EFBFBD><E4BA99>園𡢿撖嫣<E69296>銝𠺪<E98A9D><F0A0BAAA>滨垢14:00嚗峕㺭<E5B395>桀<EFBFBD>06:00嚗?-- 2. pg-boss摰𡁏𧒄隞餃𦛚<E9A483>券<EFBFBD>霂舀𧒄<E88880>渲圻<E6B8B2>?-- 3. <20>冽<EFBFBD><E586BD>见<EFBFBD><E8A781><EFBFBD>𧒄<EFBFBD>湔<EFBFBD><E6B994>躰秤
*<EFBFBD>滨蔭甇仿炊嚗?
# 甇仿炊1嚗𡁶蒈敶𥵃DS<44>批<EFBFBD><E689B9>?# <20>輸<EFBFBD>鈭?> 鈭烐㺭<E78390>桀<EFBFBD>RDS > PostgreSQL摰硺<E691B0>
# 甇仿炊2嚗帋耨<E5B88B>孵<EFBFBD><E5ADB5>?# 摰硺<E691B0>霂行<E99C82> > <20><>㺭霈曄蔭 > <20>𦦵揣 "timezone"
# 靽格㺿銝綽<E98A9D>Asia/Shanghai
# 甇仿炊3嚗𡁻<E59A97><F0A181BB>臬<EFBFBD>靘页<E99D98><E9A1B5><EFBFBD>㺭靽格㺿<E6A0BC><E3BABF>閬<EFBFBD><E996AC><EFBFBD>荔<EFBFBD>
# 摰硺<E691B0>霂行<E99C82> > <20>滚鍳摰硺<E691B0>
# 甇仿炊4嚗𡁻<E59A97>霂?psql -h rm-xxxxx.pg.rds.aliyuncs.com -U aiclinical_rw -d ai_clinical_research
SHOW timezone;
# 摨磰砲<E7A3B0>曄內嚗鋫sia/Shanghai
銝𤾸<EFBFBD><EFBFBD>冽𧒄<EFBFBD>箔<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>湛<EFBFBD>
# Node.js<6A>𡒊垢嚗鍃NV TZ=Asia/Shanghai
# Python敺格<E695BA><E6A0BC>∴<EFBFBD>ENV TZ=Asia/Shanghai
# <20>滨垢Nginx嚗鍃NV TZ=Asia/Shanghai
# RDS PostgreSQL嚗魩imezone = Asia/Shanghai
# <20>?<3F><><EFBFBD>㗇<EFBFBD><E39787>⊥𧒄<E28AA5>箇<EFBFBD>銝<EFBFBD>嚗屸<E59A97><E5B1B8>齿𧒄<E9BDBF>湔毽銋?```
---
### <20>?蝏嘥笆蝳<E7AC86>迫<EFBFBD><E8BFAB><EFBFBD>雿頣<E99BBF>10<31>∠滯蝥選<E89DA5>
#### <20>麱 1. 蝳<>迫<EFBFBD>函<EFBFBD>鈭抒㴓憓<E3B493>凒<EFBFBD>交<EFBFBD>銵?`DROP TABLE`
```sql
-- <20>?蝏嘥笆蝳<E7AC86>迫
DROP TABLE platform_schema.users; -- 銝W仃<EFBCB7><E4BB83><EFBFBD>厩鍂<E58EA9>瑟㺭<E7919F>殷<EFBFBD><E6AEB7>䭾<EFBFBD><E4ADBE>W<EFBFBD>
-- <20>?甇<>&<EFBFBD>𡁏<EFBFBD>嚗𡁜<E59A97>憭<EFBFBD>遢嚗<E981A2><E59A97><EFBFBD>滚𦶢<E6BB9A>㵪<EFBFBD>閫<EFBFBD><E996AB>7憭拙<E686AD><E68B99>𣳇膄
ALTER TABLE platform_schema.users RENAME TO users_deprecated_20251214;
-- 7憭拙<E686AD>蝖株恕<E6A0AA>𣳇䔮憸矋<E686B8><E79F8B>滚<EFBFBD><E6BB9A>?DROP TABLE platform_schema.users_deprecated_20251214;
<EFBFBD>麱 2. 蝳<>迫<EFBFBD>函<EFBFBD>鈭抒㴓憓<E3B493><E68693>銵峕𧊋瘚贝<E7989A><E8B49D><EFBFBD><EFBFBD>蝘?
# <20>?蝏嘥笆蝳<E7AC86>迫
psql -h production-rds -f untested_migration.sql # <20>航<EFBFBD><E888AA>游<EFBFBD><E6B8B8>唳旿
# <20>?甇<>&<EFBFBD>𡁏<EFBFBD>嚗𡁏<E59A97>霂閧㴓憓?> 憸<><E686B8><EFBFBD>臬<EFBFBD> > <20>煺漣<E785BA>臬<EFBFBD>
<EFBFBD>麱 3. 蝳<>迫銝滚<E98A9D>隞賢停<E8B3A2>扯<EFBFBD><E689AF>滚之<E6BB9A>䀹凒
-- <20>?蝏嘥笆蝳<E7AC86>迫
ALTER TABLE platform_schema.users DROP COLUMN email; -- 瘝⊥<E7989D>憭<EFBFBD>遢
-- <20>?甇<>&<EFBFBD>𡁏<EFBFBD>嚗𡁜<E59A97><F0A1819C>𥕦遣敹怎<E695B9>
-- RDS<44>批<EFBFBD><E689B9>?> 憭<>遢摰硺<E691B0> > <20>𥕦遣憭<E981A3>遢
-- <20>嗅<EFBFBD><E59785>齿<EFBFBD>銵<EFBFBD><E98AB5><EFBFBD>?```
#### <EFBFBD>麱 4. 蝳<EFBFBD>迫<EFBFBD>典<EFBFBD><EFBFBD>其誨<EFBFBD><EFBFBD>葉蝖祉<EFBFBD><EFBFBD><EFBFBD>㺭<EFBFBD>桀<EFBFBD>撖<EFBFBD><EFBFBD>
```typescript
// <EFBFBD>?蝏嘥笆蝳<EFBFBD>迫
const prisma = new PrismaClient({
datasources: {
db: {
url: 'postgresql://user:password@host:5432/db' // 蝖祉<EFBFBD><EFBFBD>? }
}
})
// <EFBFBD>?甇<EFBFBD>&<EFBFBD>𡁏<EFBFBD>嚗帋蝙<EFBFBD>函㴓憓<EFBFBD><EFBFBD><EFBFBD>?const prisma = new PrismaClient({
datasources: {
db: {
url: process.env.DATABASE_URL // <EFBFBD>臬<EFBFBD><EFBFBD>㗛<EFBFBD>
}
}
})
<EFBFBD>麱 5. 蝳<>迫銝漤<E98A9D>蝵株<E89DB5><E6A0AA>交<EFBFBD><E4BAA4>𣂼<EFBFBD>
# <20>?蝏嘥笆蝳<E7AC86>迫
DATABASE_URL=postgresql://user:pass@host:5432/db # <20>𣳇<EFBFBD><F0A3B387>?
# <20>?甇<>&<EFBFBD>𡁏<EFBFBD>
DATABASE_URL=postgresql://user:pass@host:5432/db?connection_limit=10
<EFBFBD>麱 6. 蝳<>迫<EFBFBD>函<EFBFBD>鈭抒㴓憓<E3B493>蝙<EFBFBD>?prisma migrate dev
# <20>?蝏嘥笆蝳<E7AC86>迫
npx prisma migrate dev # 隡𡁜<E99AA1><F0A1819C>斗㺭<E69697>桅<EFBFBD>撱?
# <20>?甇<>&<EFBFBD>𡁏<EFBFBD>
npx prisma migrate deploy # <20>芸<EFBFBD><E88AB8>冽鰵餈<E9B0B5>宏嚗䔶<E59A97><E494B6>𣳇膄<F0A3B387>唳旿
<EFBFBD>麱 7. 蝳<>迫<EFBFBD>函<EFBFBD>鈭抒㴓憓<E3B493>鍳<EFBFBD>沌risma<6D>?query <20>亙<EFBFBD>
// <20>?蝏嘥笆蝳<E7AC86>迫嚗<E8BFAB><E59A97>鈭抒㴓憓<E3B493><E68693>
export const prisma = new PrismaClient({
log: ['query', 'info', 'warn', 'error'] // <20>扯<EFBFBD>銝仿<E98A9D>銝钅<E98A9D>
})
// <20>?甇<>&<EFBFBD>𡁏<EFBFBD>嚗<EFBFBD><E59A97>鈭抒㴓憓<E3B493><E68693>
export const prisma = new PrismaClient({
log: process.env.NODE_ENV === 'production' ? ['error'] : ['query', 'info', 'warn', 'error']
})
<EFBFBD>麱 8. 蝳<>迫<EFBFBD>见極靽格㺿 _prisma_migrations 銵?
-- <20>?蝏嘥笆蝳<E7AC86>迫
DELETE FROM _prisma_migrations WHERE migration_name = 'xxx'; -- <20>游<EFBFBD>餈<EFBFBD>宏<EFBFBD><E5AE8F>蟮
-- <20>?甇<>&<EFBFBD>𡁏<EFBFBD>嚗𡁜<E59A97><F0A1819C>𡏭<EFBFBD>蝘餃枂<E9A483>辷<EFBFBD><E8BEB7>墧<EFBFBD>撟嗡耨憭?-- 銝滩<E98A9D><E6BBA9>见極靽格㺿 _prisma_migrations
<EFBFBD>麱 9. 蝳<>迫<EFBFBD>函<EFBFBD>鈭抒㴓憓<E3B493>蝙<EFBFBD>刻<EFBFBD>蝥抒鍂<E68A92>瘀<EFBFBD>postgres嚗?
# <20>?蝏嘥笆蝳<E7AC86>迫
DATABASE_URL=postgresql://postgres:password@host:5432/db # <20><><EFBFBD>餈<EFBFBD>之
# <20>?甇<>&<EFBFBD>𡁏<EFBFBD>嚗𡁜<E59A97>撱箏<E692B1><E7AE8F>其<EFBFBD><E585B6>函鍂<E587BD>?CREATE USER aiclinical_rw WITH PASSWORD 'xxx';
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA platform_schema TO aiclinical_rw;
<EFBFBD>麱 10. 蝳<>迫<EFBFBD>𣳇膄pg-boss<73><73>”
-- <20>?蝏嘥笆蝳<E7AC86>迫
DROP TABLE platform_schema.job; -- 摨𠉛鍂蝡见朖撏拇<E6928F>
DROP TABLE platform_schema.queue; -- 隞餃𦛚<E9A483>笔<EFBFBD>憭望<E686AD>
-- <20>?甇<>&<EFBFBD>𡁏<EFBFBD>嚗𡁏偶餈靝<E9A488>閬<EFBFBD><E996AC>撌交<E6928C>雿𦑩g-boss銵?-- 憒<><E68692><EFBFBD><EFBFBD>閬<EFBFBD><E996AC><EFBFBD><EFBFBD><EFBFBD>雿輻鍂pg-boss<73><73>PI
<EFBFBD><EFBFBD> <20>餌<EFBFBD>銝𤾸遣霈?
1. 雿删<E99BBF><E588A0>唳旿摨梶緵<E6A2B6>塚<EFBFBD><E5A19A>𧼮虜憟踝<E6869F><E8B89D>?
| 蝏游漲 | <EFBFBD>嗆<EFBFBD>? | 霂<EFBFBD><EFBFBD> |
|---|---|---|
| Schema<EFBFBD>𠉛氖<EFBFBD>嗆<EFBFBD> | <EFBFBD>?10銝杵chema<6D>券<EFBFBD>撠曹<E692A0> | 潃鐥<EFBFBD>潃鐥<EFBFBD>潃? |
| Postgres-Only<6C>嗆<EFBFBD> | <EFBFBD>?pg-boss甇<73>虜撌乩<E6928C>嚗峕𣈲<E5B395><F0A388B2>䌊<EFBFBD>? | 潃鐥<EFBFBD>潃鐥<EFBFBD>潃? |
| *<EFBFBD>唳旿摰峕㟲<EFBFBD>? | <EFBFBD>?憭㚚睸蝥行<E89DA5>摰峕㟲 | 潃鐥<EFBFBD>潃鐥<EFBFBD>潃? |
| Prisma Schema | <EFBFBD>?摰<><E691B0><EFBFBD><EFBFBD>&嚗īg-boss銵其<E98AB5><E585B6>芸𢆡<E88AB8>𥕦遣嚗? | 潃鐥<EFBFBD>潃鐥<EFBFBD>潃? |
| *<EFBFBD>唳旿<EFBFBD>? | <EFBFBD>?26MB嚗屸<E59A97><E5B1B8><EFBFBD>餈<EFBFBD>宏 | 潃鐥<EFBFBD>潃鐥<EFBFBD>潃? |
| <EFBFBD>㛖<EFBFBD><EFBFBD>桅<EFBFBD> | <EFBFBD>𩤃<EFBFBD> public schema<6D>㗇唂銵剁<E98AB5>擐𡝗活<F0A19D97>函蔡<E587BD>擧<EFBFBD><E693A7><EFBFBD><EFBFBD> | 潃鐥<EFBFBD>潃鐥<EFBFBD> |
*<EFBFBD>餉<EFBFBD>嚗帋<EFBFBD><EFBFBD><EFBFBD>㺭<EFBFBD>桀<EFBFBD><EFBFBD>嗆<EFBFBD><EFBFBD>𧼮虜隡条<EFBFBD>嚗<EFBFBD>虾隞亦凒<EFBFBD>仿<EFBFBD>蝵脣<EFBFBD>RDS嚗?
2. 擐𡝗活<F0A19D97>函蔡<E587BD>刻<EFBFBD><E588BB>寞<EFBFBD>
<EFBFBD><EFBFBD> 撘箇<E69298><E7AE87>刻<EFBFBD>嚗䮝g_dump <20>券<EFBFBD>撖澆<E69296>
<0A><>眏嚗?<3F>?100%摰峕㟲嚗<E39FB2><E59A97><EFBFBD>殆g-boss銵剁<E98AB5>
<0A>?蝏𤘪<E89D8F>+<2B>唳旿+蝝W<E89D9D>+憭㚚睸銝<E79DB8>甈⊥<E79488>批<EFBFBD><E689B9>?<3F>?憌𡡞埯雿𠬍<E99BBF><F0A0AC8D>舫<EFBFBD>憭齿<E686AD>銵?<3F>?<3F>W<EFBFBD>敹恬<E695B9>26MB蝥?0蝘𡜐<E89D98>
<0A>園𡢿隡啁<E99AA1>嚗?- 撖澆枂嚗?<3F><><EFBFBD>
- 隡㰘<E99AA1><E3B098>蚩CS嚗?<3F><><EFBFBD>
- 撖澆<E69296>RDS嚗?<3F><><EFBFBD>
- 撉諹<E69289>嚗?<3F><><EFBFBD>
<0A>餉恣嚗?10<31><30><EFBFBD>
3. <20>芣䔉<E88AA3>湔鰵<E6B994>刻<EFBFBD><E588BB>寞<EFBFBD>
| <EFBFBD>湔鰵蝐餃<EFBFBD> | <EFBFBD>刻<EFBFBD><EFBFBD>寞<EFBFBD> | 撌亙<EFBFBD> |
|---|---|---|
| 撠𤩺凒<EFBFBD>堆<EFBFBD><EFBFBD>啣<EFBFBD>摮埈挾嚗? | Prisma Migrate | npx prisma migrate dev |
| 銝剜凒<EFBFBD>堆<EFBFBD><EFBFBD>啣<EFBFBD>銵剁<EFBFBD> | Prisma Migrate | npx prisma migrate dev |
| 憭扳凒<EFBFBD>堆<EFBFBD><EFBFBD>唳芋<EFBFBD>梹<EFBFBD> | 蝏𤘪<EFBFBD><EFBFBD>𡝗<EFBFBD>蝔? | Prisma + <20>见極SQL + 憭<>遢 |
| 蝝扳<EFBFBD>乩耨憭㵪<EFBFBD>Hotfix嚗? | 敹恍<EFBFBD>罸<EFBFBD>𡁻<EFBFBD> | <EFBFBD>湔𦻖SQL嚗<EFBFBD><EFBFBD>憭<EFBFBD>遢嚗? |
4. 憭<>遢蝑𣇉裦嚗<E8A3A6><E59A97><EFBFBD>毺<EFBFBD><E6AFBA>𣇉<EFBFBD>嚗?
蝚砌<EFBFBD><EFBFBD>㯄俈蝥選<EFBFBD>RDS<EFBFBD>芸𢆡憭<EFBFBD>遢嚗<EFBFBD><EFBFBD><EFBFBD>𡄯<EFBFBD>潃鐥<EFBFBD>潃鐥<EFBFBD>潃?<3F>鎿<EFBFBD> <20>唳旿憭<E697BF>遢嚗𡁏<E59A97>憭拙<E686AD><E68B99>?<3F>?<3F>鎿<EFBFBD> <20>亙<EFBFBD>憭<EFBFBD>遢嚗𡁜<E59A97><F0A1819C>塚<EFBFBD>撘<EFBFBD><E69298>烈ITR嚗?<3F>婙<EFBFBD> 靽萘<E99DBD>7憭?
蝚砌<E89D9A><E7A08C>㯄俈蝥選<E89DA5><E981B8>见𢆡敹怎<E695B9>嚗<EFBFBD><E59A97><EFBFBD>𡄯<EFBFBD>潃鐥<E6BD83>潃鐥<E6BD83>
<0A>婙<EFBFBD> <20>滚之<E6BB9A>滢<EFBFBD><E6BBA2>滚<EFBFBD>撱?
蝚砌<E89D9A><E7A08C>㯄俈蝥選<E89DA5>pg_dump<6D>𡁏𧋦嚗<F0A78BA6><E59A97><EFBFBD>煺<EFBFBD><E785BA><EFBFBD>閬<EFBFBD><E996AC>
<0A>婙<EFBFBD> 銝𡁜𦛚<F0A1819C>𡁜之<F0A1819C>𤾸<EFBFBD><F0A4BEB8><EFBFBD><EFBFBD>
<0A>W<EFBFBD>瞍𠉛<E79E8D>嚗𡁏<E59A97>摮<EFBFBD>漲銝<E6BCB2>甈∴<E79488>敹<EFBFBD><E695B9>嚗?```
**<2A>脲<EFBFBD><E884B2>芷<EFBFBD><E88AB7>滨蔭RDS<44>芸𢆡憭<F0A286A1>遢嚗𣬚<E59A97>敹<EFBFBD><E695B9><EFBFBD>𨥈<EFBFBD>**
### 5. 皜<><E79A9C><EFBFBD>㛖<EFBFBD><E39B96>桅<EFBFBD>嚗<EFBFBD>虾<EFBFBD>㚁<EFBFBD>
```sql
-- 撱箄悅<E7AE84>券<EFBFBD>甈⊿<E79488>蝵脣<E89DB5>RDS<44>擧<EFBFBD><E693A7>?-- 1. 餈<>宏 admin_logs <20>?admin_schema
ALTER TABLE public.admin_logs SET SCHEMA admin_schema;
-- 2. 餈<>宏 review_tasks <20>?rvw_schema
ALTER TABLE public.review_tasks SET SCHEMA rvw_schema;
-- 3. <20>𣳇膄<F0A3B387>滚<EFBFBD><E6BB9A>?public.users嚗<73><E59A97>霂<EFBFBD><E99C82>嚗?-- <20><>笆瘥娍㺭<E5A88D>桐<EFBFBD><E6A190>湔<EFBFBD>?SELECT COUNT(*) FROM public.users;
SELECT COUNT(*) FROM platform_schema.users;
-- 銝<><E98A9D>游<EFBFBD><E6B8B8>𣳇膄
DROP TABLE public.users;
-- 4. <20>湔鰵Prisma Schema
model AdminLog {
// ...
@@map("admin_logs")
@@schema("admin_schema") // 隞?public <20>嫣蛹 admin_schema
}
model ReviewTask {
// ...
@@map("review_tasks")
@@schema("rvw_schema") // 隞?public <20>嫣蛹 rvw_schema
}
6. 銝衤<E98A9D>甇亥<E79487><E4BAA5>?
<EFBFBD>?1. <20>𥕦遣<F0A595A6>輸<EFBFBD>鈭駵DS PostgreSQL 15摰硺<E691B0>
<0A>?2. <20>滨蔭VPC<50><43>蒾<EFBFBD>滚<EFBFBD>嚗<EFBFBD><E59A97>儭讐鍂VPC蝵烐挾嚗剹<E59A97><E589B9><EFBFBD>隞賜<E99A9E><E8B39C>伐<EFBFBD><E4BC90>芸𢆡憭<F0A286A1>遢+<2B>亙<EFBFBD>憭<EFBFBD>遢嚗?<3F>?3. <20>砍𧑐皜<F0A79190><E79A9C>瘚贝<E7989A><E8B49D>唳旿嚗<E697BF>虾<EFBFBD>㚁<EFBFBD>
<0A>?4. pg_dump撖澆枂<E6BE86>唳旿摨?<3F>?5. <20>朞<EFBFBD>ECS頝單踎<E596AE>箏紡<E7AE8F>充DS
<0A>?6. 撉諹<E69289>撖澆<E69296>蝏𤘪<E89D8F>嚗𠄎chema<6D><61>”<EFBFBD><E2809D>㺭<EFBFBD>柴<EFBFBD><E69FB4>g-boss嚗?<3F>?7. <20>滨蔭SAE<41>臬<EFBFBD><E887AC>㗛<EFBFBD>嚗㇄ATABASE_URL嚗?<3F>?8. <20>函蔡backend摨𠉛鍂
<0A>?9. 蝡臬<E89DA1>蝡舀<E89DA1>霂?<3F>?10. <20>烐綉24撠𤩺𧒄
憸<>恣<EFBFBD>園𡢿嚗?-4撠𤩺𧒄嚗<F0A79284><E59A97>0<EFBFBD>唬<EFBFBD>蝥選<E89DA5>
<EFBFBD><EFBFBD>﹝<EFBFBD>𥕦遣鈭綽<EFBFBD> AI<41>拇<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>擧凒<EFBFBD>堆<EFBFBD> 2025-12-14
*<EFBFBD><EFBFBD>𧋦嚗? v1.0
<EFBFBD>詨<EFBFBD><EFBFBD><EFBFBD>艙嚗𡁏㺭<EFBFBD>桀<EFBFBD><EFBFBD>函洵銝<EFBFBD>嚗<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>隞踝<EFBFBD>皜鞱<EFBFBD>撘讛<EFBFBD>蝘鳴<EFBFBD>摰峕㟲撉諹<EFBFBD> 潃鐥<E6BD83>潃?