sql >> Databáze >  >> RDS >> PostgreSQL

Získejte všechny procedurální, uživatelem definované funkce

Zvažte:

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

Viz také:Jaký je příkaz k nalezení skriptu existující funkce v postgresql?

Použijte pg_get_functiondef nebo prosrc sloupec z pg_proc přímo. Klíčovou myšlenkou je připojit se na pg_namespace a odfiltrujte funkce katalogu PostgreSQL, které budou pravděpodobně pro většinu účelů dostačující:

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

Problém se získáním zdrojového kódu pro definované uživatelem funkce rozhoduje o tom, jaký uživatel prostředek. Lze vytvořit mnoho typů funkcí:

  • Funkce využívající CREATE EXTENSION .
  • Funkce vytvořené PostgreSQL.
  • Funkce zkompilované a nainstalované administrátorem.

Superuživatelé s dostatečnými granty mohou definovat funkce v pg_proc , ale obvykle ne.

Protože funkce jazyka C mohou vytvářet pouze superuživatelé, vylučte je. Tyto funkce může do konkrétní databáze nainstalovat uživatel, ale ne normální uživatel.




  1. Chyba neplatná sekvence bajtů při obnově databáze PostgreSQL

  2. ERROR 1356 (HY000):Zobrazení 'mysql.user' odkazuje na neplatné tabulky nebo sloupce nebo funkce nebo definující/vyvolavatel pohledu nemá práva je používat

  3. dotazování postgres db pomocí node-postgres

  4. Sphinx vs. MySql – prohledávejte seznam přátel (efektivita/rychlost)