postgresql提取函数源

时间:2012-09-29 20:25:31

标签: postgresql metadata pgadmin psql

需要使用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。

不是节目制作者,但知道为什么会这样做会很有用。

任何想法?

1 个答案:

答案 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));

所以我的理论:

  • 相关功能的权利和所有权存在一些问题(可能) - 尝试使用不同的帐户来验证这一理论(postgres是最好的)