sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur hittar man alla användardefinierade (inte tilläggsrelaterade) funktioner?

Som kommenterat av @Craig, lagras beroenden i pg_catalog.pg_depend .

Frågan kan se ut så här (Postgres 11 eller senare):

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

Detta exkluderar alla funktioner beroende på en tillägg från resultatet. Handboken om beroendetypen deptype = 'e' :

Och p.prokind = 'f' begränsar resultatet till vanliga funktioner. Manualen:

Det är nytt i Postgres 11. För Postgres 10 eller äldre använd istället:

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

Det fanns inga procedurer , ännu.

Hitta pg_get_function_identity_arguments() och pg_get_functiondef() i manualen här . Relaterat:




  1. Importera CSV eller XML till MySQL

  2. MySQL returnerar endast en rad

  3. Extrahera data från PostgreSQL DB utan att använda pg_dump

  4. Problem med Sqlalchemy och infoga array av jsonb till postgresql