264 lines
10 KiB
PL/PgSQL
264 lines
10 KiB
PL/PgSQL
-- ===================================================================
|
||
-- 强力清理脚本:彻底删除所有新设计的全局配置表
|
||
-- 保留原有的 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 $$;
|