# PostgreSQL Docker Compose 配置

这个配置提供了一个完整的 PostgreSQL 开发环境，包括数据库服务和可选的管理界面。

## 🚀 快速启动

### 1. 启动服务

```bash
# 启动 PostgreSQL 服务
docker-compose up -d postgres

# 或者启动所有服务（包括 pgAdmin）
docker-compose up -d
```

### 2. 停止服务

```bash
# 停止所有服务
docker-compose down

# 停止并删除数据卷（⚠️ 会删除所有数据）
docker-compose down -v
```

## 📋 服务配置

### PostgreSQL 数据库

- **镜像**: `postgres:15-alpine`
- **容器名**: `mixvideo_postgres`
- **端口**: `5432:5432`
- **数据库名**: `mixvideo`
- **用户名**: `mixvideo_user`
- **密码**: `mixvideo_password`

### pgAdmin 管理界面（可选）

- **镜像**: `dpage/pgadmin4:latest`
- **容器名**: `mixvideo_pgadmin`
- **端口**: `8080:80`
- **访问地址**: http://localhost:8080
- **邮箱**: `admin@mixvideo.com`
- **密码**: `admin123`

## 🔧 连接配置

### 应用程序连接

```python
# Python 连接示例
DATABASE_CONFIG = {
    'host': 'localhost',
    'port': 5432,
    'database': 'mixvideo',
    'user': 'mixvideo_user',
    'password': 'mixvideo_password'
}
```

```javascript
// Node.js 连接示例
const connectionString = 'postgresql://mixvideo_user:mixvideo_password@localhost:5432/mixvideo'
```

### 命令行连接

```bash
# 使用 psql 连接
psql -h localhost -p 5432 -U mixvideo_user -d mixvideo

# 或者进入容器内部
docker exec -it mixvideo_postgres psql -U mixvideo_user -d mixvideo
```

## 📁 目录结构

```
.
├── docker-compose.yaml          # Docker Compose 配置文件
├── init-scripts/               # 数据库初始化脚本目录
│   └── 01-init-database.sql    # 初始化脚本
└── README-postgres.md          # 使用说明
```

## 🗄️ 数据库结构

初始化脚本会自动创建以下表：

### 1. users（用户表）
- `id` - 用户ID (UUID)
- `username` - 用户名
- `email` - 邮箱
- `password_hash` - 密码哈希
- `access_token` - 访问令牌
- `token_expires_at` - 令牌过期时间
- `created_at` - 创建时间
- `updated_at` - 更新时间
- `is_active` - 是否激活

### 2. templates（模板表）
- `id` - 模板ID (UUID)
- `name` - 模板名称
- `description` - 模板描述
- `thumbnail_path` - 缩略图路径
- `draft_content_path` - 草稿内容路径
- `resources_path` - 资源路径
- `canvas_config` - 画布配置 (JSONB)
- `duration` - 时长
- `material_count` - 素材数量
- `track_count` - 轨道数量
- `tags` - 标签数组
- `is_cloud` - 是否云端
- `user_id` - 用户ID
- `draft_content` - 草稿内容 (JSONB)
- `created_at` - 创建时间
- `updated_at` - 更新时间

### 3. resource_categories（资源分类表）
- `id` - 分类ID (UUID)
- `title` - 分类标题
- `ai_prompt` - AI 提示词
- `color` - 分类颜色
- `is_active` - 是否激活
- `is_cloud` - 是否云端
- `user_id` - 用户ID
- `created_at` - 创建时间
- `updated_at` - 更新时间

### 4. projects（项目表）
- `id` - 项目ID (UUID)
- `name` - 项目名称
- `description` - 项目描述
- `project_directory` - 项目目录
- `thumbnail_path` - 缩略图路径
- `canvas_config` - 画布配置 (JSONB)
- `user_id` - 用户ID
- `created_at` - 创建时间
- `updated_at` - 更新时间

## 🔍 常用操作

### 查看服务状态

```bash
# 查看运行中的容器
docker-compose ps

# 查看服务日志
docker-compose logs postgres
docker-compose logs pgadmin
```

### 数据库操作

```bash
# 备份数据库
docker exec mixvideo_postgres pg_dump -U mixvideo_user mixvideo > backup.sql

# 恢复数据库
docker exec -i mixvideo_postgres psql -U mixvideo_user mixvideo < backup.sql

# 查看数据库大小
docker exec mixvideo_postgres psql -U mixvideo_user -d mixvideo -c "SELECT pg_size_pretty(pg_database_size('mixvideo'));"
```

### 性能监控

```bash
# 查看活跃连接
docker exec mixvideo_postgres psql -U mixvideo_user -d mixvideo -c "SELECT * FROM pg_stat_activity;"

# 查看表大小
docker exec mixvideo_postgres psql -U mixvideo_user -d mixvideo -c "SELECT schemaname,tablename,pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) as size FROM pg_tables ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC;"
```

## 🛠️ 自定义配置

### 修改数据库配置

编辑 `docker-compose.yaml` 文件中的环境变量：

```yaml
environment:
  POSTGRES_DB: your_database_name
  POSTGRES_USER: your_username
  POSTGRES_PASSWORD: your_password
```

### 添加初始化脚本

在 `init-scripts/` 目录下添加 `.sql` 或 `.sh` 文件，它们会在容器首次启动时按字母顺序执行。

### 持久化数据

数据会自动持久化到 Docker 卷中：
- `postgres_data` - PostgreSQL 数据
- `pgadmin_data` - pgAdmin 配置

## ⚠️ 注意事项

1. **生产环境**: 请修改默认密码和配置
2. **防火墙**: 确保端口 5432 和 8080 可访问
3. **数据备份**: 定期备份重要数据
4. **资源限制**: 根据需要调整内存和CPU限制

## 🔧 故障排除

### 常见问题

1. **端口冲突**: 如果端口被占用，修改 `docker-compose.yaml` 中的端口映射
2. **权限问题**: 确保 Docker 有足够权限访问数据卷
3. **连接失败**: 检查防火墙设置和网络配置

### 重置数据库

```bash
# 停止服务并删除数据
docker-compose down -v

# 重新启动
docker-compose up -d
```

这样就可以获得一个全新的数据库环境。
