Search code examples
postgresqlmetadatapgadminpsql

postgresql extracting function source


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?


Solution

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