-- =================================================================== -- 清理脚本:删除新设计的全局配置表 -- 保留原有的 ak_global_config 表(单表设计) -- =================================================================== -- 注意:执行前请确保已备份重要数据! -- 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); -- 2. 删除视图 DROP VIEW IF EXISTS public.vw_global_config_multilingual; -- 3. 删除触发器 DROP TRIGGER IF EXISTS update_ak_global_config_updated_at ON public.ak_global_config; DROP TRIGGER IF EXISTS update_ak_global_config_translations_updated_at ON public.ak_global_config_translations; -- 4. 删除翻译表(有外键约束,先删除) DROP TABLE IF EXISTS public.ak_global_config_translations CASCADE; -- 5. 删除新设计的主配置表 -- 注意:确保只删除新设计的表,保留原有的单表设计 DROP TABLE IF EXISTS public.ak_global_configs CASCADE; -- 6. 删除语言表(如果是新创建的) -- 注意:保留现有的 ak_languages 表,因为它与 ak_contents 系统有关联 -- DROP TABLE IF EXISTS public.ak_languages CASCADE; -- 7. 强制删除可能存在的其他新设计表 DROP TABLE IF EXISTS public.ak_config_main CASCADE; DROP TABLE IF EXISTS public.ak_config_translations CASCADE; -- 8. 删除相关索引(如果表还存在的话,索引会自动删除) -- 这些索引可能在删除表时已经自动删除了 -- 8. 验证清理结果 DO $$ DECLARE table_count INTEGER; function_count INTEGER; view_count INTEGER; BEGIN -- 检查表是否还存在(排除现有的 ak_languages 表) SELECT COUNT(*) INTO table_count FROM information_schema.tables WHERE table_schema = 'public' AND table_name IN ('ak_global_config_translations', 'ak_global_configs'); -- 检查函数是否还存在 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'); -- 检查视图是否还存在 SELECT COUNT(*) INTO view_count FROM information_schema.views WHERE table_schema = 'public' AND table_name = 'vw_global_config_multilingual'; RAISE NOTICE '========================================'; RAISE NOTICE '清理结果检查:'; RAISE NOTICE '剩余相关表数量: %', table_count; RAISE NOTICE '剩余相关函数数量: %', function_count; RAISE NOTICE '剩余相关视图数量: %', view_count; IF table_count = 0 AND function_count = 0 AND view_count = 0 THEN RAISE NOTICE '✅ 清理完成!新设计的表结构已完全删除'; ELSE RAISE NOTICE '⚠️ 还有一些对象未删除,请检查'; END IF; RAISE NOTICE '========================================'; END $$; -- 9. 检查原有表是否还存在 DO $$ DECLARE original_table_exists BOOLEAN; 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 '原有表的配置数量: %', ( SELECT COUNT(*) FROM public.ak_global_config WHERE is_active = true ); ELSE RAISE NOTICE '❌ 警告:原有的 ak_global_config 表不存在!'; RAISE NOTICE '如果您不小心删除了原有表,请从备份恢复'; END IF; END $$; -- 10. 可选:重新创建 update_updated_at_column 函数(如果被删除了) CREATE OR REPLACE FUNCTION update_updated_at_column() RETURNS TRIGGER AS $$ BEGIN NEW.updated_at = NOW(); RETURN NEW; END; $$ language 'plpgsql'; -- 11. 可选:重新为原有表创建触发器(如果被删除了) 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(); -- 完成提示 DO $$ BEGIN RAISE NOTICE '========================================'; RAISE NOTICE '清理脚本执行完成!'; RAISE NOTICE '========================================'; RAISE NOTICE '后续步骤:'; RAISE NOTICE '1. 确认原有的 ak_global_config 表正常工作'; RAISE NOTICE '2. 执行 optimize_existing_global_config.sql 优化现有表的查询'; RAISE NOTICE '3. 更新前端代码使用优化后的查询函数'; RAISE NOTICE '4. 测试配置系统功能是否正常'; RAISE NOTICE '========================================'; END $$;