PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie finde ich alle benutzerdefinierten (nicht erweiterungsbezogenen) Funktionen?

Wie von @Craig kommentiert, werden Abhängigkeiten in pg_catalog.pg_depend .

Die Abfrage kann so aussehen (Postgres 11 oder später):

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

Dadurch werden alle Funktionen, die von einer Erweiterung abhängen, vom Ergebnis ausgeschlossen. Das Handbuch über den Abhängigkeitstyp deptype = 'e' :

Und p.prokind = 'f' schränkt das Ergebnis auf einfache Funktionen ein. Das Handbuch:

Das ist neu in Postgres 11. Für Postgres 10 oder älter Verwenden Sie stattdessen:

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

Es gab keine Verfahren , noch.

Finden Sie pg_get_function_identity_arguments() und pg_get_functiondef() im Handbuch hier . Verwandte: