PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Вземете всички процедурни, дефинирани от потребителя функции

Помислете за следното:

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

Вижте също:Каква е командата за намиране на скрипт на съществуваща функция в postgresql?

Използвайте pg_get_functiondef или prosrc колона от pg_proc директно. Основната идея е да се присъедините към pg_namespace и филтрирайте каталожните функции на PostgreSQL, което вероятно ще бъде подходящо за повечето цели:

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

Проблемът с получаването на изходния код за дефиниран от потребителя функции решава какъв потребител означава. Могат да се създават много видове функции:

  • Функции, използващи CREATE EXTENSION .
  • Функции, създадени от PostgreSQL.
  • Функции, компилирани и инсталирани от администратор.

Суперпотребители с достатъчно разрешения могат да дефинират функции в pg_proc , но обикновено не го правят.

Тъй като само суперпотребители могат да създават функции на език C, изключете ги. Такива функции могат да бъдат персонализирано инсталирани в конкретна база данни от администратора, но не и от нормален потребител.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres:проверете дали полето на масива съдържа стойност?

  2. Наследяването на SQLAlchemy не работи

  3. Как мога да съхранявам HTML код в поле на таблица на Postgresql DB?

  4. Таблица за връщане на функция на PostgreSQL

  5. Защо st_intersection връща не-многоъгълници?