sql >> Databasteknik >  >> RDS >> PostgreSQL

Få alla procedurmässiga, användardefinierade funktioner

Tänk på:

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 även:Vad är kommandot för att hitta skript för en befintlig funktion i postgresql?

Använd pg_get_functiondef eller prosrc kolumn från pg_proc direkt. Nyckelidén är att gå med på pg_namespace och filtrera bort PostgreSQL-katalogfunktionerna, som förmodligen kommer att vara tillräckliga för de flesta ändamål:

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

Problemet med att skaffa källkoden för användardefinierad funktioner avgör vilken användare betyder att. Många typer av funktioner kan skapas:

  • Funktioner som använder CREATE EXTENSION .
  • Funktioner skapade av PostgreSQL.
  • Funktioner kompilerade och installerade av en administratör.

Superanvändare med tillräckliga anslag kan definiera funktioner i pg_proc , men vanligtvis inte.

Eftersom endast superanvändare kan skapa C-språkfunktioner, uteslut dem. Sådana funktioner kan specialinstalleras på en viss databas av administratören, men inte en normal användare.




  1. Hur kan jag veta om ett SQL-undantag kastades på grund av brott mot främmande nyckel?

  2. Hur växlar man mellan en indexerad och icke-indexerad operation beroende på ingången?

  3. ladda upp flera filer till servern och skriv till databasen

  4. Hur man konverterar till versaler i SQLite