140 lines
4.2 KiB
SQL
140 lines
4.2 KiB
SQL
-- 查询当前数据库中的 Analytics RPC 函数状态
|
|
|
|
-- 1. 查询所有 get_teacher_analytics 相关函数
|
|
SELECT
|
|
routine_name as function_name,
|
|
routine_type as type,
|
|
data_type as return_type,
|
|
routine_definition as definition,
|
|
specific_name,
|
|
routine_schema,
|
|
security_type,
|
|
is_deterministic,
|
|
sql_data_access,
|
|
routine_body,
|
|
external_language
|
|
FROM information_schema.routines
|
|
WHERE routine_schema = 'public'
|
|
AND routine_name LIKE '%teacher_analytics%'
|
|
ORDER BY routine_name, specific_name;
|
|
|
|
-- 2. 查询函数的参数信息
|
|
SELECT
|
|
routine_name,
|
|
parameter_name,
|
|
data_type,
|
|
parameter_mode,
|
|
ordinal_position,
|
|
parameter_default
|
|
FROM information_schema.parameters
|
|
WHERE specific_schema = 'public'
|
|
AND routine_name LIKE '%teacher_analytics%'
|
|
ORDER BY routine_name, ordinal_position;
|
|
|
|
-- 3. 查询所有 analytics 相关函数
|
|
SELECT
|
|
routine_name as function_name,
|
|
routine_type as type,
|
|
data_type as return_type,
|
|
specific_name
|
|
FROM information_schema.routines
|
|
WHERE routine_schema = 'public'
|
|
AND (
|
|
routine_name LIKE '%analytics%' OR
|
|
routine_name LIKE '%performers%' OR
|
|
routine_name LIKE '%chart_data%' OR
|
|
routine_name LIKE '%recent_activities%'
|
|
)
|
|
ORDER BY routine_name;
|
|
|
|
-- 4. 查询函数权限
|
|
SELECT
|
|
routine_name,
|
|
grantor,
|
|
grantee,
|
|
privilege_type,
|
|
is_grantable
|
|
FROM information_schema.routine_privileges
|
|
WHERE routine_schema = 'public'
|
|
AND routine_name IN ('get_teacher_analytics', 'get_top_performers', 'get_chart_data', 'get_recent_activities')
|
|
ORDER BY routine_name, grantee;
|
|
|
|
-- 5. 尝试调用现有的 get_teacher_analytics 函数(如果存在)
|
|
DO $$
|
|
DECLARE
|
|
test_result jsonb;
|
|
func_exists boolean := false;
|
|
BEGIN
|
|
-- 检查函数是否存在
|
|
SELECT EXISTS(
|
|
SELECT 1 FROM information_schema.routines
|
|
WHERE routine_schema = 'public'
|
|
AND routine_name = 'get_teacher_analytics'
|
|
) INTO func_exists;
|
|
|
|
IF func_exists THEN
|
|
BEGIN
|
|
-- 尝试调用无参数版本
|
|
SELECT public.get_teacher_analytics() INTO test_result;
|
|
RAISE NOTICE '✅ get_teacher_analytics() 调用成功: %', test_result;
|
|
EXCEPTION WHEN OTHERS THEN
|
|
RAISE NOTICE '❌ get_teacher_analytics() 调用失败: %', SQLERRM;
|
|
|
|
-- 尝试调用带参数版本
|
|
BEGIN
|
|
SELECT public.get_teacher_analytics(NULL, NULL, NULL) INTO test_result;
|
|
RAISE NOTICE '✅ get_teacher_analytics(NULL, NULL, NULL) 调用成功: %', test_result;
|
|
EXCEPTION WHEN OTHERS THEN
|
|
RAISE NOTICE '❌ get_teacher_analytics(NULL, NULL, NULL) 调用也失败: %', SQLERRM;
|
|
END;
|
|
END;
|
|
ELSE
|
|
RAISE NOTICE '❌ 函数 get_teacher_analytics 不存在';
|
|
END IF;
|
|
END;
|
|
$$;
|
|
|
|
-- 6. 显示当前数据库连接信息
|
|
SELECT
|
|
current_database() as database_name,
|
|
current_schema() as current_schema,
|
|
current_user as current_user,
|
|
session_user as session_user,
|
|
version() as postgres_version;
|
|
|
|
-- 7. 检查是否有冲突的函数定义
|
|
WITH function_conflicts AS (
|
|
SELECT
|
|
routine_name,
|
|
COUNT(*) as function_count,
|
|
array_agg(specific_name) as specific_names,
|
|
array_agg(data_type) as return_types
|
|
FROM information_schema.routines
|
|
WHERE routine_schema = 'public'
|
|
AND routine_name IN ('get_teacher_analytics', 'get_top_performers', 'get_chart_data', 'get_recent_activities')
|
|
GROUP BY routine_name
|
|
HAVING COUNT(*) > 1
|
|
)
|
|
SELECT
|
|
routine_name as conflicted_function,
|
|
function_count,
|
|
specific_names,
|
|
return_types
|
|
FROM function_conflicts;
|
|
|
|
-- 8. 生成清理建议
|
|
SELECT
|
|
'-- 清理建议:' as suggestion_type,
|
|
'DROP FUNCTION IF EXISTS public.' || routine_name || '(' ||
|
|
COALESCE(
|
|
(SELECT string_agg(data_type, ', ' ORDER BY ordinal_position)
|
|
FROM information_schema.parameters p
|
|
WHERE p.specific_schema = r.routine_schema
|
|
AND p.specific_name = r.specific_name),
|
|
''
|
|
) || ');' as cleanup_command
|
|
FROM information_schema.routines r
|
|
WHERE routine_schema = 'public'
|
|
AND routine_name IN ('get_teacher_analytics', 'get_top_performers', 'get_chart_data', 'get_recent_activities')
|
|
ORDER BY routine_name;
|