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

Få alle proceduremæssige, brugerdefinerede funktioner

Overvej:

select 
    pp.proname,
    pl.lanname,
    pn.nspname,
    pg_get_functiondef(pp.oid)
from pg_proc pp
inner join pg_namespace pn on (pp.pronamespace = pn.oid)
inner join pg_language pl on (pp.prolang = pl.oid)
where pl.lanname NOT IN ('c','internal') 
  and pn.nspname NOT LIKE 'pg_%'
  and pn.nspname <> 'information_schema';

Se også:Hvad er kommandoen til at finde script til en eksisterende funktion i postgresql?

Brug pg_get_functiondef eller prosrc kolonne fra pg_proc direkte. Nøgleideen er at deltage på pg_namespace og filtrer PostgreSQL-katalogfunktionerne fra, som sandsynligvis vil være tilstrækkelige til de fleste formål:

FROM pg_proc pp INNER JOIN pg_namespace ON (pp.pronamespace = pn.oid)
WHERE pn.nspname <> 'pg_catalog'

Problemet med at få kildekoden til brugerdefineret funktioner bestemmer hvilken bruger midler. Mange typer funktioner kan oprettes:

  • Funktioner ved hjælp af CREATE EXTENSION .
  • Funktioner oprettet af PostgreSQL.
  • Funktioner kompileret og installeret af en administrator.

Superbrugere med tilstrækkelige bevillinger kan definere funktioner i pg_proc , men gør det normalt ikke.

Da kun superbrugere kan oprette C-sprogfunktioner, skal du ekskludere dem. Sådanne funktioner kan specialinstalleres på en bestemt database af administratoren, men ikke en normal bruger.




  1. Bruger MySQL væsentligt flere ressourcer sammenlignet med andre DBMS?

  2. transaktionsisolationsniveau god forklaring

  3. Udskift CHAR med VARCHAR2

  4. Udskydbare begrænsninger i SQL Server