Initial commit of akmon project

This commit is contained in:
2026-01-20 08:04:15 +08:00
commit 77a2bab985
1309 changed files with 343305 additions and 0 deletions

View File

@@ -0,0 +1,62 @@
# ON CONFLICT (42P10) 错误修复报告
## 问题描述
在PostgreSQL部署过程中遇到了42P10错误`there is no unique or exclusion constraint matching the ON CONFLICT specification`
这个错误表示ON CONFLICT子句引用的约束不存在。
## 修复内容
### 1. ak_content_categories 表
**问题**: `ON CONFLICT (name_key)` 但name_key字段没有唯一约束
**修复**: 添加UNIQUE约束到name_key字段
```sql
name_key VARCHAR(64) NOT NULL UNIQUE, -- i18n key
```
### 2. ak_ai_usage_stats 表
**问题**: `ON CONFLICT (service_type, ai_provider, date_bucket)` 但没有对应的唯一约束
**修复**: 添加复合唯一约束
```sql
UNIQUE(service_type, ai_provider, date_bucket)
```
### 3. ak_user_profiles 表
**状态**: ✅ 已正确user_id字段已有UNIQUE约束
```sql
user_id uuid REFERENCES public.ak_users(id) ON DELETE CASCADE UNIQUE,
```
### 4. ak_database_versions 表
**问题**: `ON CONFLICT (version)` 但version字段没有唯一约束
**修复**: 添加UNIQUE约束到version字段
```sql
version VARCHAR(32) NOT NULL UNIQUE,
```
### 5. ak_cost_limits 表
**状态**: ✅ 使用`ON CONFLICT DO NOTHING`不指定字段,依赖主键
## 验证结果
- ✅ 所有ON CONFLICT语句现在都有对应的唯一约束或主键
- ✅ 保持了数据完整性
- ✅ 支持幂等性部署
## 部署建议
1. 这些修复确保了所有INSERT ... ON CONFLICT语句都能正确执行
2. 数据库可以安全地重复执行而不会报错
3. 唯一约束保证了数据的一致性
## 测试验证
建议在部署前在测试环境中验证:
```sql
-- 测试重复插入是否正常处理
INSERT INTO public.ak_content_categories (name_key, ai_keywords, sort_order)
VALUES ('test.category', ARRAY['测试'], 999)
ON CONFLICT (name_key) DO NOTHING;
```
## 注意事项
- 所有修复都是向后兼容的
- 不会影响现有数据
- 增强了数据完整性保护