1

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

不是一个表演停止者,但知道为什么会这样会很有用。

有什么想法吗?

4

1 回答 1

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)
于 2012-09-30T08:40:14.520 回答