a2bbc7345b
- Implement PostgresUserRepository with full CRUD operations - Support all query methods (by_id/email/username/token) - Use psycopg2 with RealDictCursor for clean mapping - Create initial schema migration (users/workspaces/members/invitations) - Add database indexes for performance - Setup foreign key constraints for data integrity - Include migration guide and rollback instructions - Add psycopg2 dependency Phase 4 Task 28/68 completed
122 lines
2.2 KiB
Markdown
122 lines
2.2 KiB
Markdown
# 数据库迁移指南
|
|
|
|
## 环境准备
|
|
|
|
### 1. 安装 PostgreSQL
|
|
|
|
```bash
|
|
# Ubuntu/Debian
|
|
sudo apt-get install postgresql postgresql-contrib
|
|
|
|
# macOS
|
|
brew install postgresql
|
|
```
|
|
|
|
### 2. 创建数据库
|
|
|
|
```bash
|
|
# 切换到 postgres 用户
|
|
sudo -u postgres psql
|
|
|
|
# 在 psql 中执行
|
|
CREATE DATABASE xiaoxia_saas;
|
|
CREATE USER xiaoxia_user WITH PASSWORD 'your_password_here';
|
|
GRANT ALL PRIVILEGES ON DATABASE xiaoxia_saas TO xiaoxia_user;
|
|
\q
|
|
```
|
|
|
|
### 3. 配置连接字符串
|
|
|
|
在 `.env` 文件中配置:
|
|
|
|
```env
|
|
DATABASE_URL=postgresql://xiaoxia_user:your_password_here@localhost:5432/xiaoxia_saas
|
|
```
|
|
|
|
## 执行迁移
|
|
|
|
### 方法 1: 使用 psql
|
|
|
|
```bash
|
|
# 执行初始化脚本
|
|
psql postgresql://xiaoxia_user:your_password_here@localhost:5432/xiaoxia_saas \
|
|
-f migrations/001_initial_schema.sql
|
|
```
|
|
|
|
### 方法 2: 使用 Python 脚本
|
|
|
|
```bash
|
|
python scripts/run_migrations.py
|
|
```
|
|
|
|
## 迁移文件说明
|
|
|
|
- `001_initial_schema.sql` - 初始表结构
|
|
- users - 用户表
|
|
- workspaces - 工作空间表
|
|
- workspace_members - 成员表
|
|
- workspace_invitations - 邀请表
|
|
- projects - 项目表(占位)
|
|
|
|
## 验证迁移
|
|
|
|
```sql
|
|
-- 查看所有表
|
|
\dt
|
|
|
|
-- 查看 users 表结构
|
|
\d users
|
|
|
|
-- 查看索引
|
|
\di
|
|
|
|
-- 查看外键约束
|
|
SELECT conname, conrelid::regclass AS table_name
|
|
FROM pg_constraint
|
|
WHERE contype = 'f';
|
|
```
|
|
|
|
## 回滚
|
|
|
|
如果需要重置数据库:
|
|
|
|
```bash
|
|
# ⚠️ 警告:这会删除所有数据
|
|
psql postgresql://xiaoxia_user:password@localhost:5432/xiaoxia_saas \
|
|
-c "DROP SCHEMA public CASCADE; CREATE SCHEMA public;"
|
|
|
|
# 然后重新执行迁移
|
|
psql ... -f migrations/001_initial_schema.sql
|
|
```
|
|
|
|
## 生产环境注意事项
|
|
|
|
1. 使用强密码
|
|
2. 配置 SSL 连接
|
|
3. 定期备份数据
|
|
4. 监控数据库性能
|
|
5. 设置连接池(推荐使用 pgBouncer)
|
|
|
|
## 连接池配置(可选)
|
|
|
|
在 Python 中使用 psycopg2 连接池:
|
|
|
|
```python
|
|
from psycopg2 import pool
|
|
|
|
connection_pool = pool.SimpleConnectionPool(
|
|
minconn=1,
|
|
maxconn=20,
|
|
dsn="postgresql://..."
|
|
)
|
|
```
|
|
|
|
## 后续迁移
|
|
|
|
后续的 schema 变更应该创建新的迁移文件:
|
|
- `002_add_xxx.sql`
|
|
- `003_alter_xxx.sql`
|
|
- ...
|
|
|
|
每个迁移文件应该是幂等的(可以多次执行而不出错)。
|