Initial commit of akmon project
This commit is contained in:
139
doc_zhipao/check_current_functions.sql
Normal file
139
doc_zhipao/check_current_functions.sql
Normal file
@@ -0,0 +1,139 @@
|
||||
-- 查询当前数据库中的 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;
|
||||
Reference in New Issue
Block a user