7.2 KiB
7.2 KiB
新配置系统部署和使用指南
概述
本指南说明如何部署和使用新的 ak_global_config + ak_global_config_translations 配置系统,替代原有的 key 后缀方式。
部署步骤
1. 数据库部署
创建新表结构
# 执行新配置表结构脚本
psql -h your-host -U your-user -d your-db -f improved_global_config_with_translation.sql
数据迁移(如需要)
# 如果有现有数据需要迁移
psql -h your-host -U your-user -d your-db -f migrate_global_config_data.sql
2. 验证数据库函数
执行以下 SQL 验证函数是否正确创建:
-- 1. 验证批量配置获取函数
SELECT * FROM get_configs_by_language('zh') LIMIT 5;
-- 2. 验证单值配置获取函数
SELECT get_config_value('company_name', 'zh');
-- 3. 验证热门搜索函数
SELECT * FROM get_hot_searches('zh');
-- 4. 验证多语言视图
SELECT * FROM vw_global_config_multilingual
WHERE language_code = 'zh' AND config_category = 'company';
3. 前端代码部署
前端代码已更新为支持以下回退机制:
- 主要方法:
get_configs_by_language(p_language_code)- 推荐使用 - 备用方法1:
get_config_by_language(lang_code)- 向后兼容 - 备用方法2: 直接查询
vw_global_config_multilingual视图 - 兜底方案: 使用硬编码的默认配置
可用的数据库函数
1. 批量配置获取(推荐)
-- 函数签名
get_configs_by_language(p_language_code VARCHAR(10) DEFAULT 'zh')
-- 返回字段
config_key, config_value, config_type, config_category, sort_order
-- 使用示例
SELECT * FROM get_configs_by_language('zh');
SELECT * FROM get_configs_by_language('en');
2. 单值配置获取
-- 函数签名
get_config_value(p_config_key VARCHAR(100), p_language_code VARCHAR(10) DEFAULT 'zh')
-- 使用示例
SELECT get_config_value('company_name', 'zh');
SELECT get_config_value('company_phone', 'en'); -- 无多语言差异的配置
3. 热门搜索关键词
-- 函数签名
get_hot_searches(lang_code VARCHAR(10) DEFAULT 'zh')
-- 返回字段
search_term, sort_order
-- 使用示例
SELECT * FROM get_hot_searches('zh');
4. 多语言配置视图
-- 视图名称
vw_global_config_multilingual
-- 主要字段
config_key, config_value, config_type, config_category, language_code, is_active
-- 使用示例
SELECT * FROM vw_global_config_multilingual
WHERE language_code = 'zh' AND config_category = 'company';
前端使用示例
JavaScript/TypeScript
// 使用 Supabase 客户端
const loadConfig = async (languageCode = 'zh') => {
try {
// 方法1: 使用 RPC 函数(推荐)
const { data, error } = await supabase
.rpc('get_configs_by_language', {
p_language_code: languageCode
});
if (data && !error) {
return data;
}
// 方法2: 使用视图查询(备用)
const { data: fallbackData, error: fallbackError } = await supabase
.from('vw_global_config_multilingual')
.select('config_key, config_value, config_type, config_category')
.eq('language_code', languageCode)
.eq('is_active', true);
return fallbackData || [];
} catch (error) {
console.error('配置加载失败:', error);
return [];
}
};
// 获取单个配置值
const getConfigValue = async (key, language = 'zh') => {
try {
const { data, error } = await supabase
.rpc('get_config_value', {
p_config_key: key,
p_language_code: language
});
return data || null;
} catch (error) {
console.error('配置获取失败:', error);
return null;
}
};
// 使用示例
const companyName = await getConfigValue('company_name', 'zh');
const configs = await loadConfig('en');
配置管理
添加新配置项
-- 1. 添加主配置记录
INSERT INTO ak_global_config (
config_key,
config_category,
is_translatable,
sort_order,
default_value
) VALUES (
'new_config_key',
'category_name',
true, -- 或 false,表示是否需要翻译
100,
'default_value'
);
-- 2. 如果需要翻译,添加翻译记录
INSERT INTO ak_global_config_translations (config_id, language_code, translated_value)
SELECT
c.id,
'zh',
'中文值'
FROM ak_global_config c
WHERE c.config_key = 'new_config_key';
-- 重复上述步骤为其他语言添加翻译
更新配置值
-- 更新不需要翻译的配置
UPDATE ak_global_config
SET default_value = 'new_value'
WHERE config_key = 'config_key';
-- 更新需要翻译的配置
UPDATE ak_global_config_translations
SET translated_value = 'new_translated_value'
WHERE config_id = (
SELECT id FROM ak_global_config WHERE config_key = 'config_key'
) AND language_code = 'zh';
添加新语言
-- 1. 添加语言记录
INSERT INTO ak_languages (code, name, native_name, sort_order)
VALUES ('fr', 'French', 'Français', 5);
-- 2. 为可翻译的配置添加法语翻译
INSERT INTO ak_global_config_translations (config_id, language_code, translated_value)
SELECT
c.id,
'fr',
'French translation here'
FROM ak_global_config c
WHERE c.is_translatable = true;
调试和故障排除
前端调试
页面包含了调试面板(仅在开发环境显示),可以:
- 查看当前配置状态
- 测试各种数据库函数
- 手动重新加载配置
数据库调试
-- 检查配置数量
SELECT
config_category,
COUNT(*) as config_count
FROM ak_global_config
WHERE is_active = true
GROUP BY config_category;
-- 检查翻译完整性
SELECT
c.config_key,
c.is_translatable,
COUNT(t.language_code) as translation_count
FROM ak_global_config c
LEFT JOIN ak_global_config_translations t ON c.id = t.config_id
WHERE c.is_active = true
GROUP BY c.config_key, c.is_translatable
ORDER BY c.config_key;
-- 检查缺失的翻译
SELECT
c.config_key,
l.code as missing_language
FROM ak_global_config c
CROSS JOIN ak_languages l
LEFT JOIN ak_global_config_translations t
ON c.id = t.config_id AND l.code = t.language_code
WHERE c.is_translatable = true
AND c.is_active = true
AND l.is_active = true
AND t.id IS NULL;
常见问题
-
函数不存在错误
- 确认是否执行了
improved_global_config_with_translation.sql - 检查函数是否在正确的 schema 中创建
- 确认是否执行了
-
配置加载失败
- 检查表是否存在数据
- 验证
is_active字段设置正确 - 检查语言代码是否匹配
-
翻译缺失
- 使用调试 SQL 检查翻译完整性
- 确认
is_translatable字段设置正确
性能优化
-
索引优化
- 确保相关索引已创建(脚本中已包含)
- 监控查询性能
-
缓存策略
- 前端可以缓存配置数据
- 考虑使用 Redis 等缓存解决方案
-
查询优化
- 优先使用 RPC 函数而非复杂视图查询
- 按需加载配置分类
总结
新的配置系统提供了:
- ✅ 更科学的数据结构设计
- ✅ 更灵活的多语言支持
- ✅ 更好的扩展性和维护性
- ✅ 向后兼容的迁移方案
- ✅ 完善的调试和监控工具
通过本指南,您可以成功部署和使用新的全局配置系统。