Get all procedural , user defined functions

前端 未结 1 498
小鲜肉
小鲜肉 2020-12-28 22:14

How to get list of all user defined functions via SQL query ?


I find this code here

SELECT p.proname, p.pronargs, t.typname
 FROM          


        
相关标签:
1条回答
  • 2020-12-28 22:59

    Consider:

    select 
        pp.proname,
        pl.lanname,
        pn.nspname,
        pg_get_functiondef(pp.oid)
    from pg_proc pp
    inner join pg_namespace pn on (pp.pronamespace = pn.oid)
    inner join pg_language pl on (pp.prolang = pl.oid)
    where pl.lanname NOT IN ('c','internal') 
      and pn.nspname NOT LIKE 'pg_%'
      and pn.nspname <> 'information_schema';
    

    See also: What is the command to find script of a existing function in postgresql?

    Use pg_get_functiondef or the prosrc column from pg_proc directly. The key idea is to join on pg_namespace and filter out the PostgreSQL catalog functions, which will probably be adequate for most purposes:

    FROM pg_proc pp INNER JOIN pg_namespace ON (pp.pronamespace = pn.oid)
    WHERE pn.nspname <> 'pg_catalog'
    

    The trouble with obtaining the source code for user defined functions is deciding what user means. Many types of functions can be created:

    • Functions using CREATE EXTENSION.
    • Functions created by PostgreSQL.
    • Functions compiled and installed by an administrator.

    Superusers with sufficent grants can define functions in pg_proc, but usually don't.

    Since only superusers can create C language functions, exclude them. Such functions can be custom-installed on a particular database by the admin, but not a normal user.

    0 讨论(0)
提交回复
热议问题