sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo encontrar todas las funciones definidas por el usuario (no relacionadas con la extensión)?

Como comentó @Craig, las dependencias se almacenan en pg_catalog.pg_depend .

La consulta puede verse así (Postgres 11 o posterior):

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

Esto excluye todas las funciones que dependen de una extensión del resultado. El manual sobre el tipo de dependencia deptype = 'e' :

Y p.prokind = 'f' restringe el resultado a funciones simples. El manual:

Eso es nuevo en Postgres 11. Para Postgres 10 o anterior usa en su lugar:

SELECT ...
...
AND    NOT proisagg     -- no aggregate functions
AND    NOT proiswindow  -- no window functions

No hubo procedimientos , todavía.

Encuentra pg_get_function_identity_arguments() y pg_get_functiondef() en el manual aquí . Relacionado: