sql >> Database >  >> RDS >> PostgreSQL

Krijg alle procedurele, door de gebruiker gedefinieerde functies

Overweeg:

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';

Zie ook:Wat is de opdracht om het script van een bestaande functie in postgresql te vinden?

Gebruik pg_get_functiondef of de prosrc kolom van pg_proc direct. Het belangrijkste idee is om mee te doen op pg_namespace en filter de PostgreSQL-catalogusfuncties uit, die waarschijnlijk voor de meeste doeleinden voldoende zullen zijn:

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

Het probleem met het verkrijgen van de broncode voor door de gebruiker gedefinieerde functies bepaalt wat gebruiker middelen. Er kunnen veel soorten functies worden gemaakt:

  • Functies met CREATE EXTENSION .
  • Functies gemaakt door PostgreSQL.
  • Functies samengesteld en geïnstalleerd door een beheerder.

Superusers met voldoende subsidies kunnen functies definiëren in pg_proc , maar meestal niet.

Aangezien alleen superusers C-taalfuncties kunnen maken, sluit u deze uit. Dergelijke functies kunnen op maat worden geïnstalleerd op een bepaalde database door de beheerder, maar niet door een normale gebruiker.




  1. Een opgeslagen procedure opvragen voor zijn parameternamen en typen

  2. records van één en slechts één type verkrijgen

  3. PDO MySQL:voeg meerdere rijen in één query in

  4. Bespaar tijd bij het uitvoeren van Microsoft Access-rapporten met filters in de lay-outweergave