需要使用SQL提取PostgreSQL函数的源代码。
我看到这个奇怪的行为与其中一个功能,所有其他功能(约200+)工作绝对正常。
当我运行以下语句时,它可以工作:
select prosrc from pg_proc where proname= 'accounts_count';
但是,当我运行以下命令时,它返回一个空字符串:
select routine_definition
from information_schema.routines
where specific_name = 'accounts_count_66243'
PostgreSQL版本8.3。我尝试过使用pgAdmin III和psql。
不是节目制作者,但知道为什么会这样做会很有用。
任何想法?
答案 0 :(得分:2)
如果你查看information_schema.routines的定义,那么你可以找到以下过滤器:
FROM pg_namespace n, pg_proc p, pg_language l, pg_type t, pg_namespace nt
WHERE n.oid = p.pronamespace AND p.prolang = l.oid AND p.prorettype = t.oid
AND t.typnamespace = nt.oid AND (pg_has_role(p.proowner, 'USAGE'::text)
OR has_function_privilege(p.oid, 'EXECUTE'::text));
所以我的理论: