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%)
1123 lines
40 KiB
Markdown
1123 lines
40 KiB
Markdown
# PostgreSQL 15 <20>唳旿摨㯄<E691A8>蝵脩<E89DB5><E884A9>?- <20>詨<EFBFBD><E8A9A8>亙<EFBFBD>
|
||
|
||
> **<2A><>﹝<EFBFBD><EFB99D>𧋦嚗?* v1.1
|
||
> **<2A>𥕦遣<F0A595A6>交<EFBFBD>嚗?* 2025-12-14
|
||
> **<2A><><EFBFBD>擧凒<E693A7>堆<EFBFBD>** 2025-12-14
|
||
> **<2A>唳旿摨梶<E691A8><E6A2B6>穿<EFBFBD>** PostgreSQL 15.14 (Docker: postgres:15-alpine)
|
||
> **<2A>格<EFBFBD><E6A0BC>臬<EFBFBD>嚗?* <20>輸<EFBFBD>鈭?RDS PostgreSQL 15
|
||
> **<2A>亙<EFBFBD>蝐餃<E89D90>嚗?* <20><><EFBFBD>舀𨰫摨?+ <20>函蔡蝑𣇉裦
|
||
|
||
---
|
||
|
||
## <20><> <20><>𧋦靽株恥霈啣<E99C88>
|
||
|
||
### v1.1 (2025-12-14) - 銝㮖<E98A9D>撱箄悅靽格迤<E6A0BC>?
|
||
**靽格迤閬<E8BFA4><E996AC>嚗?*
|
||
|
||
1. **<EFBFBD>?pg-boss銵?<3F>芣<EFBFBD>"<22>箏<EFBFBD>瞉<EFBFBD><E79E89>**
|
||
- 靽格迤嚗䮝g-boss隡𡁜銁摨𠉛鍂<F0A0899B>臬𢆡<E887AC>嗉䌊<E59789>典<EFBFBD>撱箄”嚗<E2809D>蘨閬<E898A8><E996AC><EFBFBD>𣂼<EFBFBD>
|
||
- <20>滢<EFBFBD>銝仿<E98A9D><E4BBBF>改<EFBFBD>隞?銝仿<E98A9D>撌桀<E6928C><E6A180>?<3F>嫣蛹"<22>芣<EFBFBD><E88AA3>箏<EFBFBD><E7AE8F><EFBFBD><EFBFBD><EFBFBD>𣳇<EFBFBD><F0A3B387><EFBFBD><EFBFBD>嚗?
|
||
- 憓𧼮<E68693>霂湔<E99C82>嚗䮝g-boss<73><73>惣<EFBFBD>質䌊<E8B3AA><E48C8A><EFBFBD><EFBFBD>𥕦<EFBFBD><F0A595A6><EFBFBD><EFBFBD>閬<EFBFBD><E996AC>
|
||
|
||
2. **<EFBFBD>?<3F>賢<EFBFBD><E8B3A2>閖<EFBFBD>蝵桀撩<E6A180>𤥁秩<F0A4A581>?*
|
||
- <20>啣<EFBFBD>嚗𡁜<E59A97>憿颱蝙<E9A2B1>汲PC蝵烐挾嚗䔶<E59A97><E494B6>賜鍂<E8B39C>閙㦤IP
|
||
- 蝷箔<E89DB7>嚗?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>撩靚?
|
||
3. **<EFBFBD>?憭<>遢蝑𣇉裦蝞<E8A3A6><E89D9E>吔<EFBFBD><E59094>游𦛚摰痹<E691B0>**
|
||
- 靽格迤嚗𡁜<E59A97><F0A1819C>笔蘨<E7AC94><E898A8>RDS<44>芸𢆡憭<F0A286A1>遢嚗<E981A2>鉄<EFBFBD>亙<EFBFBD>憭<EFBFBD>遢嚗? - <20>滨漣嚗䮝g_dump ECS<43>𡁏𧋦隞?蝚砌<E89D9A><E7A08C>㯄俈蝥?<3F>滢蛹"<22>舫<EFBFBD>㚁<EFBFBD>銝𡁜𦛚<F0A1819C>𡁜之<F0A1819C>𤾸<EFBFBD><F0A4BEB8><EFBFBD><EFBFBD>嚗?
|
||
- <20><>眏嚗鑹DS<44>芸𢆡憭<F0A286A1>遢+PITR撌脰雲憭<E99BB2><E686AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
- 靽萘<E99DBD>嚗朞<E59A97><E69C9E>祉內靘衤<E99D98>銝箏<E98A9D><E7AE8F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>釣"<22>𩤃<EFBFBD> 隞<><E99A9E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>脲<EFBFBD>銝漤<E98A9D>閬?
|
||
|
||
**韐∠讃<E288A0><E8AE83><EFBFBD>** 憿寧𤌍<E5AFA7><F0A48C8D><EFBFBD>臬𣪧<E887AC>笔<EFBFBD>擐?
|
||
---
|
||
|
||
---
|
||
|
||
## <20><> <20>桀<EFBFBD>
|
||
|
||
1. [<5B>砍𧑐<E7A08D>唳旿摨梶<E691A8>摰墧<E691B0><E5A2A7>琶(#<23>砍𧑐<E7A08D>唳旿摨梶<E691A8>摰墧<E691B0><E5A2A7>?
|
||
2. [Prisma銝擧㺭<E693A7>桀<EFBFBD><E6A180><EFBFBD>榆撘<E6A686><E69298><EFBFBD>𨚼(#prisma銝擧㺭<EFBFBD>桀<EFBFBD><EFBFBD><EFBFBD>榆撘<EFBFBD><EFBFBD><EFBFBD>?
|
||
3. [隞<><E99A9E>憒<EFBFBD><E68692>餈墧𦻖<E5A2A7>唳旿摨𨩇(#隞<EFBFBD><EFBFBD>憒<EFBFBD><EFBFBD>餈墧𦻖<EFBFBD>唳旿摨?
|
||
4. [擐𡝗活<EFBFBD>函蔡<EFBFBD>寞<EFBFBD>](#擐𡝗活<F0A19D97>函蔡<E587BD>寞<EFBFBD>)
|
||
5. [<EFBFBD>芣䔉<EFBFBD>湔鰵蝑𣇉裦](#<23>芣䔉<E88AA3>湔鰵蝑𣇉裦)
|
||
6. [RDS憭<EFBFBD>遢蝑𣇉裦](#rds憭<73>遢蝑𣇉裦)
|
||
7. [<EFBFBD><EFBFBD>雿喳<EFBFBD>頝萎<EFBFBD>蝳<EFBFBD>迫<EFBFBD>滢<EFBFBD>](#<23><>雿喳<E99BBF>頝萎<E9A09D>蝳<EFBFBD>迫<EFBFBD>滢<EFBFBD>)
|
||
|
||
---
|
||
|
||
## <20>砍𧑐<E7A08D>唳旿摨梶<E691A8>摰墧<E691B0><E5A2A7>?
|
||
### 1. <20>箇<EFBFBD>靽⊥<E99DBD>
|
||
|
||
```bash
|
||
Docker<EFBFBD>𨅯<EFBFBD>嚗䮝ostgres:15-alpine
|
||
<EFBFBD>唳旿摨枏<EFBFBD>蝘堆<EFBFBD>ai_clinical_research
|
||
餈墧𦻖靽⊥<EFBFBD>嚗䮝ostgresql://postgres:postgres@localhost:5432/ai_clinical_research
|
||
<EFBFBD>唳旿摨枏之撠𧶏<EFBFBD>26 MB嚗<42><E59A97>霂?撘<><E69298>𤑳㴓憓<E3B493><E68693>
|
||
<EFBFBD>冽<EFBFBD><EFBFBD>唳旿嚗?銝芰鍂<E88AB0>瑁揭<E79181>?```
|
||
|
||
### 2. Schema<6D>𠉛氖<F0A0899B>嗆<EFBFBD>嚗?0銝杵chema嚗争<E59A97>
|
||
|
||
雿删<EFBFBD><EFBFBD>唳旿摨枏歇蝏𤩺<EFBFBD><EFBFBD>笔<EFBFBD><EFBFBD>賭<EFBFBD>10銝杵chema<EFBFBD>𠉛氖<EFBFBD>嗆<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>
|
||
<EFBFBD>?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>𧋦銵?```
|
||
|
||
**<2A>𩤃<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>
|
||
<EFBFBD>?conversations - 憿寧𤌍撖寡<E69296>
|
||
<EFBFBD>?messages - 撖寡<E69296>瘨<EFBFBD><E798A8>
|
||
<EFBFBD>?general_conversations - <20>𡁶鍂撖寡<E69296>
|
||
<EFBFBD>?general_messages - <20>𡁶鍂瘨<E98D82><E798A8>
|
||
```
|
||
|
||
#### 3.3 pkb_schema嚗?銝芾”嚗?
|
||
```
|
||
<EFBFBD>?knowledge_bases - <20>亥<EFBFBD>摨橒<E691A8>2<EFBFBD>∟扇敶𤏪<E695B6>
|
||
<EFBFBD>?documents - <20><>﹝
|
||
<EFBFBD>?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>
|
||
<EFBFBD>?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>
|
||
<EFBFBD>𩤃<EFBFBD> admin_logs - 蝞∠<E89D9E><E288A0>亙<EFBFBD>嚗<EFBFBD><E59A97><EFBFBD>辷<EFBFBD>
|
||
<EFBFBD>𩤃<EFBFBD> review_tasks - 摰⊥䰻隞餃𦛚嚗?32 KB嚗屸<E59A97><E5B1B8>辷<EFBFBD>
|
||
<EFBFBD>𩤃<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>撌亙僕憸?```
|
||
|
||
**敶勗<EFBFBD>霂<EFBFBD>摯嚗?*
|
||
- <EFBFBD>?**餈鞱<EFBFBD><EFBFBD>園妟敶勗<EFBFBD>**嚗䮝g-boss<EFBFBD>芸楛蝞∠<EFBFBD>餈嗘<EFBFBD>銵剁<EFBFBD>銝漤<EFBFBD>朞<EFBFBD>Prisma霈輸䔮
|
||
- <EFBFBD>?**擐𡝗活<EFBFBD>函蔡<EFBFBD>芸𢆡<EFBFBD>𥕦遣**嚗鑹DS<EFBFBD>函蔡<EFBFBD>塚<EFBFBD>backend<EFBFBD>臬𢆡隡朞䌊<EFBFBD>典<EFBFBD>撱箄<EFBFBD>6銝芾”
|
||
- <EFBFBD>𩤃<EFBFBD> **Prisma db pull隡𡁏<EFBFBD>瘚见<EFBFBD>**嚗𡁏<EFBFBD>銵?`npx prisma db pull` <EFBFBD>嗡<EFBFBD><EFBFBD>𤑳緵"<EFBFBD>芸<EFBFBD>銋厩<EFBFBD>銵?嚗<EFBFBD>虾敹賜裦嚗?- <EFBFBD>𩤃<EFBFBD> **Prisma migrate銝齿<EFBFBD>雿?*嚗朞<EFBFBD>蝘颱<EFBFBD>隡𡁜<EFBFBD>甇亥<EFBFBD>鈭𥡝”嚗<EFBFBD><EFBFBD><EFBFBD>舀迤蝖桃<EFBFBD>嚗?
|
||
**<EFBFBD><EFBFBD>雿喳<EFBFBD>頝蛛<EFBFBD>**
|
||
```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>?
|
||
**敶勗<E695B6>嚗?*
|
||
- <20>𩤃<EFBFBD> <20>唳旿銝滢<E98A9D><E6BBA2>湧<EFBFBD><E6B9A7>抬<EFBFBD>憒<EFBFBD><E68692>隞<EFBFBD><E99A9E>霂航粉 `public.users`嚗?- <20>𩤃<EFBFBD> 瘛瑟<E7989B>嚗<EFBFBD>舅銝?`users` 銵剁<E98AB5>
|
||
- <20>𩤃<EFBFBD> 蝛粹𡢿瘚芾晶嚗<E699B6><E59A97>憭齿㺭<E9BDBF>殷<EFBFBD>
|
||
|
||
**閫<><E996AB><EFBFBD>寞<EFBFBD>嚗?*
|
||
```sql
|
||
-- 甇仿炊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摰帋<E691B0><E5B88B><EFBFBD>芋<EFBFBD>?| 摰鮋<E691B0><E9AE8B>唳旿摨栞” | <20>嗆<EFBFBD>?|
|
||
|--------|-----------------|-------------|------|
|
||
| platform_schema | 2銝迎<E98A9D>AppCache, User嚗?| 8銝迎<E98A9D>+6銝況g-boss<73>芸𢆡蝞∠<E89D9E>嚗?| <20>?甇<>虜嚗īg-boss<73>芣<EFBFBD>嚗?|
|
||
| aia_schema | 5銝?| 5銝?| <20>?銝<><E98A9D>?|
|
||
| pkb_schema | 5銝?| 5銝?| <20>?銝<><E98A9D>?|
|
||
| asl_schema | 6銝?| 6銝?| <20>?銝<><E98A9D>?|
|
||
| dc_schema | 6銝?| 6銝?| <20>?銝<><E98A9D>?|
|
||
| public | 2銝迎<E98A9D>AdminLog, ReviewTask嚗?| 4銝迎<E98A9D>+_prisma_migrations, users嚗?| <20>𩤃<EFBFBD> <20><>皜<EFBFBD><E79A9C> |
|
||
|
||
**蝏栞捏嚗?*
|
||
- <20>?**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>
|
||
|
||
---
|
||
|
||
## 隞<><E99A9E>憒<EFBFBD><E68692>餈墧𦻖<E5A2A7>唳旿摨?
|
||
### 1. <20>臬<EFBFBD><E887AC>㗛<EFBFBD><E3979B>滨蔭
|
||
|
||
#### 1.1 暺䁅恕餈墧𦻖摮㛖泵銝莎<E98A9D>env.ts嚗?
|
||
```typescript
|
||
// AIclinicalresearch/backend/src/config/env.ts (line 50)
|
||
databaseUrl: process.env.DATABASE_URL || 'postgresql://postgres:postgres@localhost:5432/ai_clinical'
|
||
```
|
||
|
||
**<EFBFBD>𩤃<EFBFBD> 瘜冽<E7989C>嚗?*
|
||
- 暺䁅恕<E48185>潭糓 `ai_clinical`嚗<EFBFBD><EFBFBD>摮睃銁嚗?- 摰鮋<E691B0><E9AE8B>唳旿摨枏<E691A8><E69E8F>?`ai_clinical_research`
|
||
- 霂湔<E99C82>雿删<E99BBF> `.env` <20><>辣銝剖歇蝏𤩺迤蝖桅<E89D96>蝵桐<E89DB5> `DATABASE_URL`
|
||
|
||
#### 1.2 餈墧𦻖瘙𣳇<E79899>蝵殷<E89DB5>database.ts嚗?
|
||
```typescript
|
||
// 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>
|
||
```
|
||
|
||
**鈭穃<E988AD><E7A983>蠘<EFBFBD><E8A098>交<EFBFBD>蝑𣇉裦嚗?*
|
||
```
|
||
DATABASE_URL=postgresql://user:pass@host:5432/db?connection_limit=10&pool_timeout=10
|
||
```
|
||
|
||
### 2. 餈墧𦻖<E5A2A7>孵<EFBFBD>
|
||
|
||
| 餈墧𦻖<E5A2A7><F0A6BB96>㺭 | <20>砍𧑐撘<F0A79190><E69298>?| <20>輸<EFBFBD>鈭騌AE |
|
||
|---------|---------|----------|
|
||
| **銝餅㦤** | localhost | RDS<44><53><EFBFBD><EFBFBD>啣<EFBFBD>嚗<EFBFBD><E59A97> rm-xxxxx.pg.rds.aliyuncs.com嚗?|
|
||
| **蝡臬藁** | 5432 | 5432 |
|
||
| **<EFBFBD>唳旿摨?* | ai_clinical_research | ai_clinical_research嚗<68><E59A97><EFBFBD><EFBFBD><EFBFBD><EFBFBD>湛<EFBFBD> |
|
||
| **<EFBFBD>冽<EFBFBD><EFBFBD>?* | postgres | <20>芸<EFBFBD>銋㚁<E98A8B>憒?aiclinical_rw嚗?|
|
||
| **撖<><E69296>** | postgres | 撘箏<E69298><E7AE8F><EFBFBD><EFBFBD>RDS<44>𥕦遣<F0A595A6>嗉挽蝵殷<E89DB5> |
|
||
| **餈墧𦻖<E5A2A7>𣂼<EFBFBD>** | <20>𣳇<EFBFBD><F0A3B387>?| connection_limit=10嚗𠄎AE瘥誩<E798A5>靘页<E99D98> |
|
||
| **餈墧𦻖頞<F0A6BB96>𧒄** | 暺䁅恕 | pool_timeout=10 |
|
||
|
||
### 3. 憭锭chema霈輸䔮嚗㇊risma嚗?
|
||
```prisma
|
||
// 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>
|
||
}
|
||
```
|
||
|
||
**隞<><E99A9E>銝剔<E98A9D>雿輻鍂嚗?*
|
||
```typescript
|
||
// <20>芸𢆡頝舐眏<E88890>唳迤蝖桃<E89D96>Schema
|
||
await prisma.user.findMany() // 霈輸䔮 platform_schema.users
|
||
await prisma.project.findMany() // 霈輸䔮 aia_schema.projects
|
||
```
|
||
|
||
### 4. <20>毺<EFBFBD>SQL霈輸䔮嚗<E494AE>楊Schema嚗?
|
||
```typescript
|
||
// <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>
|
||
|
||
```typescript
|
||
// 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>?
|
||
---
|
||
|
||
## 擐𡝗活<F0A19D97>函蔡<E587BD>寞<EFBFBD>
|
||
|
||
### <20>寞<EFBFBD>撖寞<E69296>
|
||
|
||
| <20>寞<EFBFBD> | <20>寞<EFBFBD> | 隡条<E99AA1> | 蝻箇<E89DBB> | <20>刻<EFBFBD>摨?|
|
||
|------|------|------|------|--------|
|
||
| **<EFBFBD>寞<EFBFBD>A** | `pg_dump` <20>券<EFBFBD>撖澆<E69296> | <20>?100%摰峕㟲嚗<E39FB2><E59A97><EFBFBD>殆g-boss銵剁<E98AB5><br><3E>?蝏𤘪<E89D8F>+<2B>唳旿+蝝W<E89D9D>+憭㚚睸<br><3E>?銝<>甈⊥<E79488>批<EFBFBD><E689B9>?| <20>?<3F><>閬<EFBFBD><E996AC>撌交<E6928C><E4BAA4><EFBFBD><EFBFBD>霂閙㺭<E99699>?br><3E>?<3F><>鉄<EFBFBD>㛖<EFBFBD><E39B96><EFBFBD>ublic銵?| 潃鐥<E6BD83>潃鐥<E6BD83>潃?**撘箇<E69298><E7AE87>刻<EFBFBD>** |
|
||
| **<EFBFBD>寞<EFBFBD>B** | Prisma Migrate Deploy | <20>?<3F><>𧋦<EFBFBD>𣇉恣<F0A38789>?br><3E>?<3F>舫<EFBFBD>憭齿<E686AD>銵?| <20>?蝻箏<E89DBB>pg-boss銵剁<E98AB5>餈鞱<E9A488><E99EB1>嗡<EFBFBD><E597A1>仿<EFBFBD>嚗?br><3E>?<3F><>閬<EFBFBD><E996AC>撌亥‘<E4BAA5>?| <20>𩤃<EFBFBD> **銝齿綫<E9BDBF>?*嚗<><E59A97>摰峕㟲嚗?|
|
||
| **<EFBFBD>寞<EFBFBD>C** | <20>见極SQL<51>𡁏𧋦 | <20>?摰<><E691B0><EFBFBD>舀綉 | <20>?撌乩<E6928C><E4B9A9>誩之<br><3E>?摰寞<E691B0><E5AF9E>粹<EFBFBD> | <20>𩤃<EFBFBD> **銝齿綫<E9BDBF>?*嚗<>晶<EFBFBD>嗉晶<E59789>𨥈<EFBFBD> |
|
||
|
||
### 潃?<3F>刻<EFBFBD><E588BB>寞<EFBFBD>A嚗䮝g_dump<6D>券<EFBFBD>撖澆<E69296>嚗<EFBFBD>祕蝏<E7A595>郊撉歹<E69289>
|
||
|
||
#### 甇仿炊1嚗𡁏𧋦<F0A1818F>唳㺭<E594B3>桀<EFBFBD>皜<EFBFBD><E79A9C>嚗<EFBFBD>虾<EFBFBD>㚁<EFBFBD>
|
||
|
||
```bash
|
||
# 憒<><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嚗𡁜紡<F0A1819C>箸㺭<E7AEB8>桀<EFBFBD>嚗<EFBFBD><E59A97><EFBFBD>怎<EFBFBD><E6808E>?<3F>唳旿嚗?
|
||
```bash
|
||
# 摰峕㟲撖澆枂嚗<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>
|
||
閫<EFBFBD>聢嚗鬏ds.pg.s2.large嚗?<3F>?GB嚗<42><E59A97><EFBFBD>函漣嚗?摮睃<E691AE>嚗?00GB SSD嚗<44>𣈲<EFBFBD><F0A388B2>䌊<EFBFBD>冽<EFBFBD>摰對<E691B0>
|
||
<EFBFBD><EFBFBD>𧋦嚗䥪ostgreSQL 15
|
||
蝵𤑳<EFBFBD>嚗间PC嚗<EFBFBD><EFBFBD>SAE<EFBFBD>典<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嚗𡁜紡<F0A1819C>亙<EFBFBD>RDS
|
||
|
||
```bash
|
||
# <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嚗𡁻<E59A97>霂<EFBFBD>紡<EFBFBD>亦<EFBFBD><E4BAA6>?
|
||
```sql
|
||
-- 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嚗𡁻<E59A97>蝵娟AE<41>臬<EFBFBD><E887AC>㗛<EFBFBD>
|
||
|
||
```bash
|
||
# <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嚗𡁜<E59A97><F0A1819C>典鍳<E585B8>券<EFBFBD>霂?
|
||
```typescript
|
||
// 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>
|
||
|
||
```bash
|
||
# <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';
|
||
```
|
||
|
||
**銝箔<E98A9D>銋<EFBFBD><E98A8B><EFBFBD>刻<EFBFBD><E588BB>典鍳<E585B8>典𦶢隞支葉<E694AF>扯<EFBFBD> `prisma migrate deploy`嚗?*
|
||
1. **撟嗅<E6929F>憌𡡞埯**嚗锭AE<41>匧<EFBFBD>銝芸<E98A9D>靘页<E99D98><E9A1B5>航<EFBFBD><E888AA>峕𧒄<E5B395>扯<EFBFBD>餈<EFBFBD>宏
|
||
2. **<EFBFBD>墧<EFBFBD><EFBFBD>圈𠗕**嚗𡁜<E59A97><F0A1819C>𡏭<EFBFBD>蝘餃仃韐伐<E99F90>摨𠉛鍂撌脩<E6928C><E884A9>臬𢆡
|
||
3. **<EFBFBD>唳旿摰匧<EFBFBD>**嚗𡁶<E59A97>鈭扳㺭<E689B3>桀<EFBFBD>摨磰砲<E7A3B0>见極餈<E6A5B5>宏嚗峕<E59A97>憭<EFBFBD>遢<EFBFBD><E981A2><EFBFBD>皛朞恣<E69C9E>?
|
||
### <20>箸艶2嚗𡁏鰵憓硺<E68693>銝芸之璅∪<E79285>嚗<EFBFBD><E59A97>SSA<53>箄<EFBFBD>蝏蠘恣<E8A098><E681A3><EFBFBD>嚗?
|
||
#### <20>刻<EFBFBD><E588BB>寞<EFBFBD>嚗𡁶<E59A97><F0A181B6><EFBFBD><EFBFBD>餈<EFBFBD>宏瘚<E5AE8F><E7989A>
|
||
|
||
```bash
|
||
# 甇仿炊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
|
||
```
|
||
|
||
### <20>箸艶3嚗𡁶揮<F0A181B6>乩耨憭㵪<E686AD>Hotfix嚗?
|
||
```bash
|
||
# 蝷箔<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憭<53>遢蝑𣇉裦
|
||
|
||
### 1. <20>輸<EFBFBD>鈭駵DS<44>芸𢆡憭<F0A286A1>遢嚗<E981A2>撩<EFBFBD><E692A9>綫<EFBFBD>琜<EFBFBD><E7909C>?
|
||
#### 1.1 <20>滨蔭<E6BBA8>芸𢆡憭<F0A286A1>遢
|
||
|
||
```bash
|
||
# <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>
|
||
```
|
||
|
||
**隡睃飵嚗?*
|
||
- <20>?<3F>刻䌊<E588BB>剁<EFBFBD><E58981>𣳇<EFBFBD>鈭箏極撟脤<E6929F>
|
||
- <20>?<3F>園𡢿<E59C92>寞<EFBFBD>憭㵪<E686AD>Point-in-Time Recovery嚗釶ITR嚗㚁<E59A97><E39A81>舀<EFBFBD>憭滚<E686AD>隞餅<E99A9E>蝘?- <20>?摮睃<E691AE><E79D83>汰SS嚗𣬚𡠺蝡衤<E89DA1>RDS摰硺<E691B0>
|
||
- <20>?<3F>滩晶嚗?憭拙<E686AD>嚗?
|
||
#### 1.2 <20>见𢆡敹怎<E695B9>嚗<EFBFBD><E59A97>閬<EFBFBD><E996AC>雿𨅯<E99BBF>嚗?
|
||
```bash
|
||
# <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>孵<EFBFBD>嚗𡁶<EFBFBD><EFBFBD><EFBFBD><EFBFBD>隞?憭<>釣嚗饢igration_before_ssa_module_20251214
|
||
```
|
||
|
||
**敹怎<E695B9>靽萘<E99DBD>撱箄悅嚗?*
|
||
- 餈<>宏<EFBFBD>滚翰<E6BB9A>改<EFBFBD>靽萘<E99DBD>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>嚗?
|
||
**<2A>𩤃<EFBFBD> <20>脲<EFBFBD>撱箄悅嚗帋<E59A97><E5B88B><EFBFBD>閬<EFBFBD>䌊撌勗<E6928C><E58B97>𡁏𧋦嚗朙DS<44>芸𢆡憭<F0A286A1>遢撠勗<E692A0>鈭<EFBFBD><E988AD>**
|
||
|
||
| <20>嗆挾 | 憭<>遢蝑𣇉裦 | <20><>眏 |
|
||
|------|---------|------|
|
||
| **<EFBFBD>脲<EFBFBD>嚗<EFBFBD><EFBFBD><EFBFBD>㵪<EFBFBD>** | <20>?<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><br>- <20>𣳇<EFBFBD>蝏湔擪<E6B994>𡁏𧋦<F0A1818F>袏CS |
|
||
| **<EFBFBD>鞾鵭<EFBFBD>?* | <20>舫<EFBFBD>㚁<EFBFBD>憓𧼮<E68693>撘<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>?* | <20>舫<EFBFBD>㚁<EFBFBD><E39A81>芸<EFBFBD>銋匧<E98A8B>隞?| - <20><>閬<EFBFBD>鸌畾𠰴<E795BE>隞賜<E99A9E><E8B39C>伐<EFBFBD>憒<EFBFBD><E68692>撠𤩺𧒄憭<F0A79284>遢嚗?br>- <20><>閬<EFBFBD>鵭<EFBFBD>笔<EFBFBD>獢<EFBFBD><E78DA2>憒?撟湛<E6929F> |
|
||
|
||
**憒<><E68692><EFBFBD>芣䔉<E88AA3><E49489>閬<EFBFBD>䌊摰帋<E691B0>憭<EFBFBD>遢嚗<E981A2><E59A97><EFBFBD><EFBFBD><EFBFBD><EFBFBD>穿<EFBFBD>**
|
||
```bash
|
||
# <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>
|
||
|
||
```bash
|
||
# <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>
|
||
<EFBFBD><EFBFBD><EFBFBD>嚗𡁜<EFBFBD>隞賭遙<EFBFBD>∠𠶖<EFBFBD>?<3F>∩辣嚗𡁜<E59A97>隞賢仃韐?<3F>𡁶䰻嚗𡁻<E59A97><F0A181BB>厩黎 + <20>桐辣
|
||
|
||
# 閫<><E996AB>2嚗𡁜<E59A97>隞賜征<E8B39C>港<EFBFBD>頞喳<E9A09E>霅?韏<><E99F8F>嚗鑹DS摰硺<E691B0>
|
||
<EFBFBD><EFBFBD><EFBFBD>嚗𡁜<EFBFBD>隞賭蝙<EFBFBD>函征<EFBFBD>?<3F>∩辣嚗?80%
|
||
<EFBFBD>𡁶䰻嚗𡁻<EFBFBD>隞?
|
||
# 閫<><E996AB>3嚗朞<E59A97>餈?4撠𤩺𧒄<F0A4A9BA>芸<EFBFBD>隞賢<E99A9E>霅?韏<><E99F8F>嚗鑹DS摰硺<E691B0>
|
||
<EFBFBD><EFBFBD><EFBFBD>嚗𡁏<EFBFBD><EFBFBD>𤾸<EFBFBD>隞賣𧒄<EFBFBD>?<3F>∩辣嚗?24撠𤩺𧒄
|
||
<EFBFBD>𡁶䰻嚗𡁶揮<EFBFBD>伐<EFBFBD><EFBFBD>凋縑+<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>喲𡡒
|
||
|
||
```typescript
|
||
// <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>
|
||
|
||
```typescript
|
||
// <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>
|
||
|
||
```bash
|
||
# <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>
|
||
|
||
```bash
|
||
# <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
|
||
<EFBFBD>賢<EFBFBD><EFBFBD>閧內靘页<EFBFBD>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>?
|
||
```typescript
|
||
// <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>滨蔭甇仿炊嚗?*
|
||
```bash
|
||
# 甇仿炊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
|
||
```
|
||
|
||
**銝𤾸<E98A9D><F0A4BEB8>冽𧒄<E586BD>箔<EFBFBD><E7AE94><EFBFBD><EFBFBD><EFBFBD>湛<EFBFBD>**
|
||
```bash
|
||
# 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;
|
||
```
|
||
|
||
#### <20>麱 2. 蝳<>迫<EFBFBD>函<EFBFBD>鈭抒㴓憓<E3B493><E68693>銵峕𧊋瘚贝<E7989A><E8B49D><EFBFBD><EFBFBD>蝘?
|
||
```bash
|
||
# <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>
|
||
```
|
||
|
||
#### <20>麱 3. 蝳<>迫銝滚<E98A9D>隞賢停<E8B3A2>扯<EFBFBD><E689AF>滚之<E6BB9A>䀹凒
|
||
|
||
```sql
|
||
-- <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>
|
||
}
|
||
}
|
||
})
|
||
```
|
||
|
||
#### <20>麱 5. 蝳<>迫銝漤<E98A9D>蝵株<E89DB5><E6A0AA>交<EFBFBD><E4BAA4>𣂼<EFBFBD>
|
||
|
||
```bash
|
||
# <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
|
||
```
|
||
|
||
#### <20>麱 6. 蝳<>迫<EFBFBD>函<EFBFBD>鈭抒㴓憓<E3B493>蝙<EFBFBD>?`prisma migrate dev`
|
||
|
||
```bash
|
||
# <20>?蝏嘥笆蝳<E7AC86>迫
|
||
npx prisma migrate dev # 隡𡁜<E99AA1><F0A1819C>斗㺭<E69697>桅<EFBFBD>撱?
|
||
# <20>?甇<>&<EFBFBD>𡁏<EFBFBD>
|
||
npx prisma migrate deploy # <20>芸<EFBFBD><E88AB8>冽鰵餈<E9B0B5>宏嚗䔶<E59A97><E494B6>𣳇膄<F0A3B387>唳旿
|
||
```
|
||
|
||
#### <20>麱 7. 蝳<>迫<EFBFBD>函<EFBFBD>鈭抒㴓憓<E3B493>鍳<EFBFBD>沌risma<6D>?`query` <20>亙<EFBFBD>
|
||
|
||
```typescript
|
||
// <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']
|
||
})
|
||
```
|
||
|
||
#### <20>麱 8. 蝳<>迫<EFBFBD>见極靽格㺿 `_prisma_migrations` 銵?
|
||
```sql
|
||
-- <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
|
||
```
|
||
|
||
#### <20>麱 9. 蝳<>迫<EFBFBD>函<EFBFBD>鈭抒㴓憓<E3B493>蝙<EFBFBD>刻<EFBFBD>蝥抒鍂<E68A92>瘀<EFBFBD>postgres嚗?
|
||
```bash
|
||
# <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;
|
||
```
|
||
|
||
#### <20>麱 10. 蝳<>迫<EFBFBD>𣳇膄pg-boss<73><73>”
|
||
|
||
```sql
|
||
-- <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
|
||
```
|
||
|
||
---
|
||
|
||
## <20><> <20>餌<EFBFBD>銝𤾸遣霈?
|
||
### 1. 雿删<E99BBF><E588A0>唳旿摨梶緵<E6A2B6>塚<EFBFBD><E5A19A>𧼮虜憟踝<E6869F><E8B89D>?
|
||
| 蝏游漲 | <20>嗆<EFBFBD>?| 霂<><E99C82> |
|
||
|------|------|------|
|
||
| **Schema<6D>𠉛氖<F0A0899B>嗆<EFBFBD>** | <20>?10銝杵chema<6D>券<EFBFBD>撠曹<E692A0> | 潃鐥<E6BD83>潃鐥<E6BD83>潃?|
|
||
| **Postgres-Only<6C>嗆<EFBFBD>** | <20>?pg-boss甇<73>虜撌乩<E6928C>嚗峕𣈲<E5B395><F0A388B2>䌊<EFBFBD>?| 潃鐥<E6BD83>潃鐥<E6BD83>潃?|
|
||
| **<EFBFBD>唳旿摰峕㟲<EFBFBD>?* | <20>?憭㚚睸蝥行<E89DA5>摰峕㟲 | 潃鐥<E6BD83>潃鐥<E6BD83>潃?|
|
||
| **Prisma Schema** | <20>?摰<><E691B0><EFBFBD><EFBFBD>&嚗īg-boss銵其<E98AB5><E585B6>芸𢆡<E88AB8>𥕦遣嚗?| 潃鐥<E6BD83>潃鐥<E6BD83>潃?|
|
||
| **<EFBFBD>唳旿<EFBFBD>?* | <20>?26MB嚗屸<E59A97><E5B1B8><EFBFBD>餈<EFBFBD>宏 | 潃鐥<E6BD83>潃鐥<E6BD83>潃?|
|
||
| **<EFBFBD>㛖<EFBFBD><EFBFBD>桅<EFBFBD>** | <20>𩤃<EFBFBD> public schema<6D>㗇唂銵剁<E98AB5>擐𡝗活<F0A19D97>函蔡<E587BD>擧<EFBFBD><E693A7><EFBFBD><EFBFBD> | 潃鐥<E6BD83>潃鐥<E6BD83> |
|
||
|
||
**<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>
|
||
|
||
<EFBFBD><EFBFBD>眏嚗?<3F>?100%摰峕㟲嚗<E39FB2><E59A97><EFBFBD>殆g-boss銵剁<E98AB5>
|
||
<EFBFBD>?蝏𤘪<E89D8F>+<2B>唳旿+蝝W<E89D9D>+憭㚚睸銝<E79DB8>甈⊥<E79488>批<EFBFBD><E689B9>?<3F>?憌𡡞埯雿𠬍<E99BBF><F0A0AC8D>舫<EFBFBD>憭齿<E686AD>銵?<3F>?<3F>W<EFBFBD>敹恬<E695B9>26MB蝥?0蝘𡜐<E89D98>
|
||
|
||
<EFBFBD>園𡢿隡啁<EFBFBD>嚗?- 撖澆枂嚗?<3F><><EFBFBD>
|
||
- 隡㰘<E99AA1><E3B098>蚩CS嚗?<3F><><EFBFBD>
|
||
- 撖澆<E69296>RDS嚗?<3F><><EFBFBD>
|
||
- 撉諹<E69289>嚗?<3F><><EFBFBD>
|
||
<EFBFBD>餉恣嚗?10<31><30><EFBFBD>
|
||
```
|
||
|
||
### 3. <20>芣䔉<E88AA3>湔鰵<E6B994>刻<EFBFBD><E588BB>寞<EFBFBD>
|
||
|
||
| <20>湔鰵蝐餃<E89D90> | <20>刻<EFBFBD><E588BB>寞<EFBFBD> | 撌亙<E6928C> |
|
||
|---------|---------|------|
|
||
| 撠𤩺凒<F0A4A9BA>堆<EFBFBD><E5A086>啣<EFBFBD>摮埈挾嚗?| Prisma Migrate | `npx prisma migrate dev` |
|
||
| 銝剜凒<E5899C>堆<EFBFBD><E5A086>啣<EFBFBD>銵剁<E98AB5> | Prisma Migrate | `npx prisma migrate dev` |
|
||
| 憭扳凒<E689B3>堆<EFBFBD><E5A086>唳芋<E594B3>梹<EFBFBD> | 蝏𤘪<E89D8F><F0A498AA>𡝗<EFBFBD>蝔?| Prisma + <20>见極SQL + 憭<>遢 |
|
||
| 蝝扳<E89D9D>乩耨憭㵪<E686AD>Hotfix嚗?| 敹恍<E695B9>罸<EFBFBD>𡁻<EFBFBD> | <20>湔𦻖SQL嚗<4C><E59A97>憭<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憭?
|
||
蝚砌<EFBFBD><EFBFBD>㯄俈蝥選<EFBFBD><EFBFBD>见𢆡敹怎<EFBFBD>嚗<EFBFBD><EFBFBD><EFBFBD>𡄯<EFBFBD>潃鐥<EFBFBD>潃鐥<EFBFBD>
|
||
<EFBFBD>婙<EFBFBD> <20>滚之<E6BB9A>滢<EFBFBD><E6BBA2>滚<EFBFBD>撱?
|
||
蝚砌<EFBFBD><EFBFBD>㯄俈蝥選<EFBFBD>pg_dump<EFBFBD>𡁏𧋦嚗<EFBFBD><EFBFBD><EFBFBD>煺<EFBFBD><EFBFBD><EFBFBD>閬<EFBFBD><EFBFBD>
|
||
<EFBFBD>婙<EFBFBD> 銝𡁜𦛚<F0A1819C>𡁜之<F0A1819C>𤾸<EFBFBD><F0A4BEB8><EFBFBD><EFBFBD>
|
||
|
||
<EFBFBD>W<EFBFBD>瞍𠉛<EFBFBD>嚗𡁏<EFBFBD>摮<EFBFBD>漲銝<EFBFBD>甈∴<EFBFBD>敹<EFBFBD><EFBFBD>嚗?```
|
||
|
||
**<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>
|
||
<EFBFBD>?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>
|
||
<EFBFBD>?4. pg_dump撖澆枂<E6BE86>唳旿摨?<3F>?5. <20>朞<EFBFBD>ECS頝單踎<E596AE>箏紡<E7AE8F>充DS
|
||
<EFBFBD>?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摨𠉛鍂
|
||
<EFBFBD>?9. 蝡臬<E89DA1>蝡舀<E89DA1>霂?<3F>?10. <20>烐綉24撠𤩺𧒄
|
||
|
||
憸<EFBFBD>恣<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>潃?
|