PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como encontrar todas as funções definidas pelo usuário (não relacionadas à extensão)?


Conforme comentado por @Craig, as dependências são armazenadas em pg_catalog.pg_depend .

A consulta pode ficar assim (Postgres 11 ou mais tarde):
SELECT p.proname AS function_name
     , pg_get_function_identity_arguments(p.oid) AS parameter_list
     , pg_get_functiondef(p.oid) AS function_def  -- CREATE FUNCTION statement
FROM   pg_proc p
LEFT   JOIN pg_depend d ON d.objid = p.oid 
                       AND d.deptype = 'e'        -- would depend on extension
WHERE  p.pronamespace = 'public'::regnamespace    -- your schema(s) of interest
AND    d.objid IS NULL                            -- no such dependency
AND    p.prokind = 'f';                           -- only plain functions

Isso exclui todas as funções dependendo de uma extensão do resultado. O manual sobre o tipo de dependência deptype = 'e' :

E p.prokind = 'f' restringe o resultado a funções simples. O manual:

Isso é novo no Postgres 11. Para Postgres 10 ou mais antigo use em vez disso:
SELECT ...
...
AND    NOT proisagg     -- no aggregate functions
AND    NOT proiswindow  -- no window functions

Não houve procedimentos , ainda.

Encontre pg_get_function_identity_arguments() e pg_get_functiondef() no ​​manual aqui . Relacionado: