Initial commit of akmon project
This commit is contained in:
78
doc_news/fix_indexes.sql
Normal file
78
doc_news/fix_indexes.sql
Normal file
@@ -0,0 +1,78 @@
|
||||
-- ===================================================================
|
||||
-- 数据库清理和重建脚本
|
||||
-- 用于解决索引和表已存在的问题
|
||||
-- 在执行主数据库脚本前运行此脚本
|
||||
-- ===================================================================
|
||||
|
||||
-- 设置客户端编码
|
||||
SET client_encoding = 'UTF8';
|
||||
|
||||
-- 删除可能已存在的索引
|
||||
DO $$
|
||||
DECLARE
|
||||
r RECORD;
|
||||
BEGIN
|
||||
-- 删除所有以 idx_ 开头的索引
|
||||
FOR r IN (SELECT indexname FROM pg_indexes WHERE indexname LIKE 'idx_%' AND schemaname = 'public')
|
||||
LOOP
|
||||
EXECUTE 'DROP INDEX IF EXISTS public.' || quote_ident(r.indexname);
|
||||
RAISE NOTICE '删除索引: %', r.indexname;
|
||||
END LOOP;
|
||||
|
||||
RAISE NOTICE '所有相关索引已清理完成!';
|
||||
END $$;
|
||||
|
||||
-- 删除可能已存在的触发器
|
||||
DO $$
|
||||
DECLARE
|
||||
r RECORD;
|
||||
BEGIN
|
||||
FOR r IN (SELECT trigger_name, event_object_table
|
||||
FROM information_schema.triggers
|
||||
WHERE trigger_schema = 'public'
|
||||
AND trigger_name LIKE 'trigger_%')
|
||||
LOOP
|
||||
EXECUTE 'DROP TRIGGER IF EXISTS ' || quote_ident(r.trigger_name) || ' ON public.' || quote_ident(r.event_object_table);
|
||||
RAISE NOTICE '删除触发器: % on %', r.trigger_name, r.event_object_table;
|
||||
END LOOP;
|
||||
|
||||
RAISE NOTICE '所有相关触发器已清理完成!';
|
||||
END $$;
|
||||
|
||||
-- 删除可能已存在的函数
|
||||
DO $$
|
||||
DECLARE
|
||||
r RECORD;
|
||||
BEGIN
|
||||
FOR r IN (SELECT proname, oidvectortypes(proargtypes) as args
|
||||
FROM pg_proc p JOIN pg_namespace n ON p.pronamespace = n.oid
|
||||
WHERE n.nspname = 'public'
|
||||
AND proname IN ('update_favorite_folder_count', 'update_content_favorite_stats',
|
||||
'update_content_share_stats', 'generate_share_code', 'update_share_analytics'))
|
||||
LOOP
|
||||
EXECUTE 'DROP FUNCTION IF EXISTS public.' || quote_ident(r.proname) || '(' || r.args || ')';
|
||||
RAISE NOTICE '删除函数: %', r.proname;
|
||||
END LOOP;
|
||||
|
||||
RAISE NOTICE '所有相关函数已清理完成!';
|
||||
END $$;
|
||||
|
||||
-- 可选:删除可能已存在的表(谨慎使用!)
|
||||
/*
|
||||
DO $$
|
||||
DECLARE
|
||||
r RECORD;
|
||||
BEGIN
|
||||
FOR r IN (SELECT tablename FROM pg_tables
|
||||
WHERE schemaname = 'public'
|
||||
AND tablename LIKE 'ak_%')
|
||||
LOOP
|
||||
EXECUTE 'DROP TABLE IF EXISTS public.' || quote_ident(r.tablename) || ' CASCADE';
|
||||
RAISE NOTICE '删除表: %', r.tablename;
|
||||
END LOOP;
|
||||
|
||||
RAISE NOTICE '所有相关表已删除!';
|
||||
END $$;
|
||||
*/
|
||||
|
||||
RAISE NOTICE '数据库清理完成!现在可以运行主数据库脚本了。';
|
||||
Reference in New Issue
Block a user