postgresql extracting function source

2020-04-20 05:39发布

问题:

Need to extract the source of a PostgreSQL function using SQL.

I am seeing this odd behavior with one of the function, all other functions (around 200+ ) work absolutely fine.

When I run the following statement, it works:

select prosrc  from pg_proc where proname= 'accounts_count';

However when I run the following, it returns an empty string:

select  routine_definition
from    information_schema.routines
where   specific_name = 'accounts_count_66243'

PostgreSQL version 8.3. I have tried using both pgAdmin III and psql.

Not a show stopper, but would be useful to know why this might be.

Any ideas anyone?

回答1:

if you look on definition of information_schema.routines, then you can find following filter:

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

so my theory:

  • there are some issue in rights and ownership of related function (probably) - try to use different account for validation of this theory (postgres is best)