# AI多语言资讯系统 - 部署指南 ![PostgreSQL](https://img.shields.io/badge/PostgreSQL-15+-blue.svg) ![Supabase](https://img.shields.io/badge/Supabase-Compatible-green.svg) ![License](https://img.shields.io/badge/License-MIT-yellow.svg) ## 📋 项目概述 AI多语言资讯系统是一个基于PostgreSQL的现代化新闻资讯管理平台,支持多语言内容管理、AI智能翻译、用户行为分析、社交功能等特性。 ## ✨ 主要功能 - 🌍 **多语言支持**: 支持多种语言的内容管理和AI翻译 - 📰 **内容管理**: 完整的新闻内容管理系统 - 🏷️ **专题系统**: 专题创建、订阅、内容聚合 - 💬 **评论系统**: 多层级评论、点赞、举报、审核 - ⭐ **收藏功能**: 个人收藏夹、内容收藏管理 - 🔄 **转发分享**: 内容转发和社交分享 - 🤖 **AI智能**: 智能翻译、内容分析、聊天机器人 - 👥 **用户系统**: 用户行为分析、个性化推荐 - 🔒 **安全控制**: 基于RLS的行级安全策略 - 📊 **性能优化**: 全文搜索、复合索引、查询优化 ## 🏗️ 系统架构 ``` ┌─────────────────────────────────────────────────────────────┐ │ AI多语言资讯系统 │ ├─────────────────────────────────────────────────────────────┤ │ 内容层 │ 专题管理 │ 评论系统 │ 收藏转发 │ 用户行为 │ ├─────────────────────────────────────────────────────────────┤ │ AI层 │ 智能翻译 │ 内容分析 │ 聊天机器人 │ 推荐系统 │ ├─────────────────────────────────────────────────────────────┤ │ 数据层 │ PostgreSQL 数据库 (21+ 张表) │ ├─────────────────────────────────────────────────────────────┤ │ 安全层 │ RLS策略 + 索引优化 + 触发器 │ └─────────────────────────────────────────────────────────────┘ ``` ## 📦 文件结构 ``` doc_news/ ├── 🗄️ 数据库文件 │ ├── ai_multilingual_news_database.sql # 主数据库结构 │ └── topics_comments_init_data.sql # 演示数据 ├── 🚀 部署脚本 │ ├── deploy.sh # Linux/MacOS 部署脚本 │ └── deploy.ps1 # Windows PowerShell 部署脚本 ├── 📖 文档 │ ├── README.md # 项目说明 (本文件) │ ├── SQL_DEPLOYMENT_GUIDE.md # 详细部署指南 │ ├── FINAL_DEPLOYMENT_VALIDATION.md # 验证报告 │ └── INDEX_ERROR_SOLUTION.md # 错误解决方案 └── 🔧 工具脚本 ├── fix_indexes.sql # 索引修复脚本 └── clean_policies.sql # 策略清理脚本 ``` ## 🚀 快速开始 ### 方式一:自动部署 (推荐) #### Linux/MacOS: ```bash # 1. 确保PostgreSQL客户端已安装 sudo apt-get install postgresql-client # Ubuntu/Debian # 或 brew install postgresql # MacOS # 2. 执行部署脚本 chmod +x deploy.sh ./deploy.sh --host localhost --database ai_news --username postgres ``` #### Windows: ```powershell # 1. 在PowerShell中执行 .\deploy.ps1 -DBHost "localhost" -DBName "ai_news" -DBUser "postgres" # 2. 或者使用默认参数 .\deploy.ps1 ``` ### 方式二:手动部署 #### 1. 创建数据库结构 ```sql -- 在PostgreSQL或Supabase SQL编辑器中执行 \i ai_multilingual_news_database.sql ``` #### 2. 插入演示数据 (可选) ```sql -- 在SQL编辑器中执行 \i topics_comments_init_data.sql ``` ### 方式三:Supabase 部署 1. 登录 [Supabase Dashboard](https://app.supabase.com/) 2. 创建新项目或选择现有项目 3. 进入 `SQL Editor` 4. 复制 `ai_multilingual_news_database.sql` 内容并执行 5. 复制 `topics_comments_init_data.sql` 内容并执行 (可选) ## 🔧 配置参数 ### 数据库连接参数 | 参数 | 默认值 | 说明 | |------|--------|------| | DB_HOST | localhost | 数据库主机地址 | | DB_PORT | 5432 | 数据库端口 | | DB_NAME | ai_news | 数据库名称 | | DB_USER | postgres | 数据库用户名 | ### 环境变量配置 ```bash # 设置数据库连接 export DB_HOST="your-db-host" export DB_PORT="5432" export DB_NAME="your-database" export DB_USER="your-username" export PGPASSWORD="your-password" ``` ## ✅ 部署验证 部署完成后,可以通过以下SQL命令验证: ```sql -- 检查表创建 SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' AND table_name LIKE 'ak_%'; -- 检查RLS策略 SELECT schemaname, tablename, policyname FROM pg_policies WHERE schemaname = 'public'; -- 检查索引 SELECT indexname FROM pg_indexes WHERE schemaname = 'public' AND indexname LIKE 'idx_%'; -- 检查演示数据 SELECT COUNT(*) as topic_count FROM ak_topics; SELECT COUNT(*) as comment_count FROM ak_comments; ``` 预期结果: - ✅ 21+ 个数据表 - ✅ 9+ 个RLS安全策略 - ✅ 21+ 个性能索引 - ✅ 演示数据 (如果选择插入) ## 🗃️ 数据库表结构 ### 核心表 - `ak_contents` - 内容管理 - `ak_content_translations` - 内容翻译 - `ak_topics` - 专题管理 - `ak_comments` - 评论系统 - `ak_content_favorites` - 收藏功能 - `ak_content_shares` - 转发分享 ### AI功能表 - `ak_ai_translation_logs` - AI翻译记录 - `ak_ai_usage_stats` - AI使用统计 - `ak_chat_sessions` - 聊天会话 - `ak_chat_messages` - 聊天消息 ### 用户分析表 - `ak_user_behaviors` - 用户行为 - `ak_user_profiles` - 用户画像 - `ak_recommendations` - 推荐记录 ## 🔒 安全特性 - **RLS行级安全**: 用户只能访问自己的数据 - **策略隔离**: 不同功能模块的策略分离 - **数据加密**: 敏感信息加密存储 - **访问控制**: 基于角色的访问控制 ## 🚨 故障排除 ### 常见问题 #### 1. 策略重复创建错误 ``` ERROR: 42710: policy "xxx" for table "xxx" already exists ``` **解决方案**: 所有策略已添加 `DROP POLICY IF EXISTS`,可安全重复执行。 #### 2. 索引重复创建错误 ``` ERROR: 42P07: relation "idx_xxx" already exists ``` **解决方案**: 所有索引使用 `CREATE INDEX IF NOT EXISTS`,支持幂等执行。 #### 3. 扩展不存在错误 ``` ERROR: extension "uuid-ossp" does not exist ``` **解决方案**: ```sql -- 手动安装所需扩展 CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; CREATE EXTENSION IF NOT EXISTS "pg_trgm"; CREATE EXTENSION IF NOT EXISTS "btree_gin"; ``` #### 4. 全文搜索IMMUTABLE函数错误 ``` ERROR: 42P17: functions in index predicate must be marked IMMUTABLE ``` **解决方案**: 已创建IMMUTABLE包装函数 ```sql -- 自动使用IMMUTABLE函数创建索引 CREATE INDEX IF NOT EXISTS idx_contents_fts_title ON public.ak_contents USING gin(content_title_to_tsvector(title)); ``` #### 5. 权限不足错误 ``` ERROR: permission denied to create extension ``` **解决方案**: 使用超级用户权限或联系数据库管理员。 ### 获取更多帮助 - 📖 查看 `SQL_DEPLOYMENT_GUIDE.md` 了解详细部署步骤 - 🔍 查看 `INDEX_ERROR_SOLUTION.md` 了解错误解决方案 - ✅ 查看 `FINAL_DEPLOYMENT_VALIDATION.md` 了解验证详情 ## 📈 性能优化 - **全文搜索**: 使用GIN索引支持高效的文本搜索 - **复合索引**: 针对常用查询组合优化 - **分区表**: 大数据量时支持表分区 - **连接池**: 建议使用连接池管理数据库连接 ## 🤝 贡献指南 1. Fork 项目 2. 创建功能分支 (`git checkout -b feature/amazing-feature`) 3. 提交更改 (`git commit -m 'Add amazing feature'`) 4. 推送到分支 (`git push origin feature/amazing-feature`) 5. 打开 Pull Request ## 📄 许可证 该项目基于 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。 ## 🙏 致谢 - PostgreSQL 社区 - Supabase 团队 - 所有贡献者 --- **最后更新**: 2025年1月27日 **版本**: v1.0.0 **状态**: ✅ 生产就绪