PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Uzyskaj wszystkie proceduralne, zdefiniowane przez użytkownika funkcje

Rozważ:

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

Zobacz też:Jakie jest polecenie, aby znaleźć skrypt istniejącej funkcji w postgresql?

Użyj pg_get_functiondef lub prosrc kolumna z pg_proc bezpośrednio. Kluczowym pomysłem jest dołączenie do pg_namespace i odfiltruj funkcje katalogu PostgreSQL, które prawdopodobnie będą wystarczające dla większości celów:

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

Problem z uzyskaniem kodu źródłowego dla zdefiniowanego przez użytkownika funkcje decydują o tym, który użytkownik oznacza. Można utworzyć wiele rodzajów funkcji:

  • Funkcje za pomocą CREATE EXTENSION .
  • Funkcje stworzone przez PostgreSQL.
  • Funkcje skompilowane i zainstalowane przez administratora.

Superużytkownicy z wystarczającymi grantami mogą definiować funkcje w pg_proc , ale zwykle nie.

Ponieważ tylko superużytkownicy mogą tworzyć funkcje w języku C, wyklucz je. Takie funkcje mogą być instalowane na zamówienie w określonej bazie danych przez administratora, ale nie zwykłego użytkownika.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przyspieszyć plpgsql, który zlicza typy dokumentów w pętli?

  2. Odwróć współrzędne w kolumnie wielokątów PostgreSQL

  3. Zapobiegaj wyzwalaniu rekurencyjnemu w PostgreSQL

  4. Różnica wydajności:warunek umieszczony w klauzuli INNER JOIN vs WHERE

  5. Jak działa justify_days() w PostgreSQL