PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment trouver toutes les fonctions définies par l'utilisateur (non liées à l'extension) ?

Comme l'a commenté @Craig, les dépendances sont stockées dans pg_catalog.pg_depend .

La requête peut ressembler à ceci (Postgres 11 ou version ultérieure) :

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

Cela exclut toutes les fonctions dépendant d'une extension du résultat. Le manuel à propos du type de dépendance deptype = 'e' :

Et p.prokind = 'f' limite le résultat à des fonctions simples. Le manuel :

C'est nouveau dans Postgres 11. Pour Postgres 10 ou plus ancien utilisez à la place :

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

Il n'y avait pas de procédures , encore.

Trouvez pg_get_function_identity_arguments() et pg_get_functiondef() dans le manuel ici . Connexe :