sql >> Database >  >> RDS >> PostgreSQL

Hoe vind je alle door de gebruiker gedefinieerde (niet extensie-gerelateerde) functies?

Zoals opgemerkt door @Craig, worden afhankelijkheden opgeslagen in pg_catalog.pg_depend .

De zoekopdracht kan er als volgt uitzien (Postgres 11 of later):

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

Dit sluit alle functies die afhankelijk zijn van een extensie uit van het resultaat. De handleiding over het afhankelijkheidstype deptype = 'e' :

En p.prokind = 'f' beperkt het resultaat tot gewone functies. De handleiding:

Dat is nieuw in Postgres 11. Voor Postgres 10 of ouder gebruik in plaats daarvan:

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

Er waren geen procedures , nog niet.

Zoek pg_get_function_identity_arguments() en pg_get_functiondef() in de handleiding hier . Gerelateerd:




  1. Optimaliseer MySQL-query's met veel LEFT JOINs en GROUP BY

  2. Waarschijnlijk slechte index, volledige tabelscan

  3. PESSIMESTIC LOCK werkt niet met Spring Data die toegang heeft tot MySQL

  4. bulk verzamelen met voor update