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,263 @@
-- ===================================================================
-- 强力清理脚本:彻底删除所有新设计的全局配置表
-- 保留原有的 ak_global_config 表(单表+key后缀设计
-- ===================================================================
-- 注意:此脚本会强制删除所有可能的新设计表和对象
-- 执行前请确保已备份重要数据!
-- 首先检查当前存在的表
DO $$
DECLARE
rec RECORD;
BEGIN
RAISE NOTICE '========================================';
RAISE NOTICE '当前存在的配置相关表:';
RAISE NOTICE '========================================';
FOR rec IN
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'public'
AND (table_name LIKE '%config%' OR table_name LIKE '%language%')
ORDER BY table_name
LOOP
RAISE NOTICE '表: %', rec.table_name;
END LOOP;
RAISE NOTICE '========================================';
END $$;
-- 1. 删除所有相关函数(包括可能的不同版本)
-- 删除新设计的函数
DROP FUNCTION IF EXISTS public.get_configs_by_language(VARCHAR);
DROP FUNCTION IF EXISTS public.get_config_by_language(VARCHAR);
DROP FUNCTION IF EXISTS public.get_config_value(VARCHAR, VARCHAR);
DROP FUNCTION IF EXISTS public.get_hot_searches(VARCHAR);
-- 删除基于现有表的优化函数(来自 optimize_existing_global_config.sql
DROP FUNCTION IF EXISTS public.get_global_config_by_language(VARCHAR);
DROP FUNCTION IF EXISTS public.get_global_config_value(VARCHAR, VARCHAR);
DROP FUNCTION IF EXISTS public.get_company_config(VARCHAR);
DROP FUNCTION IF EXISTS public.get_hot_search_keywords(VARCHAR);
DROP FUNCTION IF EXISTS public.get_social_media_config(VARCHAR);
-- 2. 删除所有相关视图
-- 删除新设计的视图
DROP VIEW IF EXISTS public.vw_global_config_multilingual CASCADE;
DROP VIEW IF EXISTS public.vw_config_by_language CASCADE;
-- 删除基于现有表的优化视图(来自 optimize_existing_global_config.sql
DROP VIEW IF EXISTS public.vw_global_config_by_language CASCADE;
-- 3. 删除所有可能的触发器
DROP TRIGGER IF EXISTS update_ak_global_config_updated_at ON public.ak_global_config;
DROP TRIGGER IF EXISTS update_ak_global_configs_updated_at ON public.ak_global_configs;
DROP TRIGGER IF EXISTS update_ak_global_config_translations_updated_at ON public.ak_global_config_translations;
DROP TRIGGER IF EXISTS update_ak_config_main_updated_at ON public.ak_config_main;
DROP TRIGGER IF EXISTS update_ak_config_translations_updated_at ON public.ak_config_translations;
-- 4. 强制删除所有可能的新设计表(按依赖顺序)
-- 注意:保留 ak_languages 表,因为它与 ak_contents 系统有关联
DROP TABLE IF EXISTS public.ak_global_config_translations CASCADE;
DROP TABLE IF EXISTS public.ak_config_translations CASCADE;
DROP TABLE IF EXISTS public.ak_global_configs CASCADE;
DROP TABLE IF EXISTS public.ak_config_main CASCADE;
-- DROP TABLE IF EXISTS public.ak_languages CASCADE; -- 保留现有语言表
DROP TABLE IF EXISTS public.ak_language CASCADE;
DROP TABLE IF EXISTS public.languages CASCADE;
-- 5. 删除可能存在的序列(保留 ak_languages 相关序列)
DROP SEQUENCE IF EXISTS public.ak_global_configs_id_seq CASCADE;
DROP SEQUENCE IF EXISTS public.ak_config_main_id_seq CASCADE;
DROP SEQUENCE IF EXISTS public.ak_global_config_translations_id_seq CASCADE;
DROP SEQUENCE IF EXISTS public.ak_config_translations_id_seq CASCADE;
-- DROP SEQUENCE IF EXISTS public.ak_languages_id_seq CASCADE; -- 保留现有语言表序列
-- 6. 删除可能存在的类型定义
DROP TYPE IF EXISTS public.config_type CASCADE;
DROP TYPE IF EXISTS public.language_code CASCADE;
-- 7. 验证清理结果
DO $$
DECLARE
table_count INTEGER;
function_count INTEGER;
view_count INTEGER;
trigger_count INTEGER;
sequence_count INTEGER;
rec RECORD;
BEGIN
-- 检查剩余的配置相关表(排除现有的 ak_languages 表)
SELECT COUNT(*) INTO table_count
FROM information_schema.tables
WHERE table_schema = 'public'
AND table_name IN (
'ak_global_configs',
'ak_global_config_translations',
'ak_config_main',
'ak_config_translations',
'ak_language',
'languages'
);
-- 检查剩余的相关函数
SELECT COUNT(*) INTO function_count
FROM information_schema.routines
WHERE routine_schema = 'public'
AND routine_name IN (
'get_configs_by_language',
'get_config_by_language',
'get_config_value',
'get_hot_searches',
'get_global_config_by_language',
'get_global_config_value',
'get_company_config',
'get_hot_search_keywords',
'get_social_media_config'
);
-- 检查剩余的相关视图
SELECT COUNT(*) INTO view_count
FROM information_schema.views
WHERE table_schema = 'public'
AND table_name IN (
'vw_global_config_multilingual',
'vw_global_config_by_language',
'vw_config_by_language'
);
-- 检查剩余的相关序列
SELECT COUNT(*) INTO sequence_count
FROM information_schema.sequences
WHERE sequence_schema = 'public'
AND sequence_name LIKE '%config%';
RAISE NOTICE '========================================';
RAISE NOTICE '强力清理结果检查:';
RAISE NOTICE '剩余新设计表数量: %', table_count;
RAISE NOTICE '剩余相关函数数量: %', function_count;
RAISE NOTICE '剩余相关视图数量: %', view_count;
RAISE NOTICE '剩余相关序列数量: %', sequence_count;
RAISE NOTICE '========================================';
-- 显示剩余的配置相关表ak_languages 是现有系统表,会保留)
RAISE NOTICE '当前剩余的配置相关表:';
FOR rec IN
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'public'
AND (table_name LIKE '%config%' OR table_name LIKE '%language%')
ORDER BY table_name
LOOP
RAISE NOTICE ' - %', rec.table_name;
END LOOP;
-- 特别说明保留的表
IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_schema = 'public' AND table_name = 'ak_languages') THEN
RAISE NOTICE ' ak_languages 表已保留(与 ak_contents 系统关联)';
END IF;
IF table_count = 0 AND function_count = 0 AND view_count = 0 THEN
RAISE NOTICE '✅ 全面清理完成!所有新设计的表结构和优化函数已删除';
RAISE NOTICE '现在可以重新执行 optimize_existing_global_config.sql 创建新的优化函数';
ELSE
RAISE NOTICE '⚠️ 还有一些对象未删除,可能需要手动处理';
END IF;
RAISE NOTICE '========================================';
END $$;
-- 8. 检查原有表是否还存在并显示其结构
DO $$
DECLARE
original_table_exists BOOLEAN;
column_info RECORD;
BEGIN
SELECT EXISTS (
SELECT 1 FROM information_schema.tables
WHERE table_schema = 'public'
AND table_name = 'ak_global_config'
AND table_type = 'BASE TABLE'
) INTO original_table_exists;
IF original_table_exists THEN
RAISE NOTICE '✅ 原有的 ak_global_config 表仍然存在';
-- 显示表结构
RAISE NOTICE '表结构:';
FOR column_info IN
SELECT column_name, data_type, is_nullable, column_default
FROM information_schema.columns
WHERE table_schema = 'public'
AND table_name = 'ak_global_config'
ORDER BY ordinal_position
LOOP
RAISE NOTICE ' - % (% %)',
column_info.column_name,
column_info.data_type,
CASE WHEN column_info.is_nullable = 'NO' THEN 'NOT NULL' ELSE 'NULL' END;
END LOOP;
-- 显示配置数量
RAISE NOTICE '当前配置数量: %', (
SELECT COUNT(*) FROM public.ak_global_config WHERE is_active = true
);
-- 显示一些示例配置
RAISE NOTICE '示例配置前5个';
FOR column_info IN
SELECT config_key, config_value
FROM public.ak_global_config
WHERE is_active = true
ORDER BY config_key
LIMIT 5
LOOP
RAISE NOTICE ' - %: %', column_info.config_key, LEFT(column_info.config_value, 50);
END LOOP;
ELSE
RAISE NOTICE '❌ 警告:原有的 ak_global_config 表不存在!';
RAISE NOTICE '您可能需要:';
RAISE NOTICE '1. 从备份恢复原有表';
RAISE NOTICE '2. 或者执行 init_company_global_config.sql 重新创建';
END IF;
END $$;
-- 9. 可选:重新创建基础触发器函数(如果被删除了)
CREATE OR REPLACE FUNCTION update_updated_at_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = NOW();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-- 10. 可选:重新为原有表创建触发器(如果被删除了)
DO $$
BEGIN
IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_schema = 'public' AND table_name = 'ak_global_config') THEN
DROP TRIGGER IF EXISTS update_ak_global_config_updated_at ON public.ak_global_config;
CREATE TRIGGER update_ak_global_config_updated_at
BEFORE UPDATE ON public.ak_global_config
FOR EACH ROW
EXECUTE FUNCTION update_updated_at_column();
RAISE NOTICE '✅ 为原有表重新创建了更新触发器';
END IF;
END $$;
-- 完成提示
DO $$
BEGIN
RAISE NOTICE '========================================';
RAISE NOTICE '全面清理脚本执行完成!';
RAISE NOTICE '已删除所有新设计的表、函数、视图等对象';
RAISE NOTICE '========================================';
RAISE NOTICE '后续建议步骤:';
RAISE NOTICE '1. 验证原有的 ak_global_config 表功能正常';
RAISE NOTICE '2. 确认 ak_languages 表与 ak_contents 系统关联正常';
RAISE NOTICE '3. 重新执行 optimize_existing_global_config.sql 创建优化查询函数';
RAISE NOTICE '4. 测试前端配置加载功能';
RAISE NOTICE '5. 如果原有表不存在,执行 init_company_global_config.sql';
RAISE NOTICE '========================================';
END $$;