PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come trovare tutte le funzioni definite dall'utente (non relative all'interno)?

Come commentato da @Craig, le dipendenze sono archiviate in pg_catalog.pg_depend .

La query può essere simile a questa (Postgres 11 o successivo):

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

Ciò esclude tutte le funzioni che dipendono da un'estensione dal risultato. Il manuale sul tipo di dipendenza deptype = 'e' :

E p.prokind = 'f' limita il risultato a funzioni semplici. Il manuale:

Questa è una novità in Postgres 11. Per Postgres 10 o versioni precedenti usa invece:

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

Non c'erano procedure , ancora.

Trova pg_get_function_identity_arguments() e pg_get_functiondef() nel manuale qui . Correlati: