1

SQL を使用して PostgreSQL 関数のソースを抽出する必要があります。

関数の 1 つでこの奇妙な動作が見られますが、他のすべての関数 (約 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 に答える