-- ===================================================== -- 快速修复函数冲突 -- 解决 "cannot change name of input parameter" 错误 -- ===================================================== -- 删除所有可能冲突的函数 DO $$ BEGIN RAISE NOTICE '🧹 删除可能冲突的函数'; -- 删除角色管理相关函数(按依赖顺序) DROP FUNCTION IF EXISTS public.batch_update_user_roles(JSONB, UUID) CASCADE; DROP FUNCTION IF EXISTS public.batch_update_user_roles(JSONB) CASCADE; DROP FUNCTION IF EXISTS public.update_user_role(UUID, TEXT, UUID) CASCADE; DROP FUNCTION IF EXISTS public.update_user_role(UUID, TEXT) CASCADE; DROP FUNCTION IF EXISTS public.get_user_role(UUID) CASCADE; DROP FUNCTION IF EXISTS public.get_user_role() CASCADE; -- 删除辅助函数 DROP FUNCTION IF EXISTS public.sync_user_role_metadata(UUID) CASCADE; DROP FUNCTION IF EXISTS public.user_has_permission(TEXT, UUID) CASCADE; DROP FUNCTION IF EXISTS public.can_access_resource(TEXT, UUID, TEXT, UUID) CASCADE; -- 删除触发器函数 DROP FUNCTION IF EXISTS public.update_user_roles_updated_at() CASCADE; DROP FUNCTION IF EXISTS public.handle_new_user() CASCADE; -- 删除测试函数 DROP FUNCTION IF EXISTS public.test_message_permissions(UUID) CASCADE; DROP FUNCTION IF EXISTS public.test_deployment() CASCADE; RAISE NOTICE '✅ 函数清理完成'; END $$; -- 删除触发器(函数删除后触发器会自动删除,但为了确保) DO $$ BEGIN RAISE NOTICE '🧹 删除触发器'; DROP TRIGGER IF EXISTS trigger_update_user_roles_updated_at ON public.user_roles CASCADE; DROP TRIGGER IF EXISTS on_auth_user_created ON auth.users CASCADE; RAISE NOTICE '✅ 触发器清理完成'; END $$; -- 验证清理结果 DO $$ DECLARE function_count INTEGER; trigger_count INTEGER; BEGIN RAISE NOTICE '🔍 验证清理结果'; -- 检查剩余函数 SELECT COUNT(*) INTO function_count FROM information_schema.routines WHERE routine_schema = 'public' AND routine_name IN ( 'get_user_role', 'update_user_role', 'batch_update_user_roles', 'handle_new_user', 'update_user_roles_updated_at', 'sync_user_role_metadata', 'user_has_permission' ); -- 检查剩余触发器 SELECT COUNT(*) INTO trigger_count FROM information_schema.triggers WHERE trigger_schema = 'public' AND trigger_name IN ('trigger_update_user_roles_updated_at', 'on_auth_user_created'); RAISE NOTICE '📊 清理统计:'; RAISE NOTICE ' - 剩余相关函数: %', function_count; RAISE NOTICE ' - 剩余相关触发器: %', trigger_count; IF function_count = 0 AND trigger_count = 0 THEN RAISE NOTICE '🎉 函数清理成功!可以安全地重新创建函数'; ELSE RAISE NOTICE '⚠️ 仍有函数或触发器存在,可能需要手动检查'; END IF; END $$; -- 完成消息 SELECT '✅ 函数冲突已解决' as status, '现在可以重新运行您的SQL脚本' as message;