# 数据库迁移指南

## 环境准备

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

每个迁移文件应该是幂等的（可以多次执行而不出错）。
