Initial commit of akmon project
This commit is contained in:
263
force_cleanup_new_tables.sql
Normal file
263
force_cleanup_new_tables.sql
Normal 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 $$;
|
||||
Reference in New Issue
Block a user