sql >> Base de Datos >  >> RDS >> PostgreSQL

Obtener todas las funciones de procedimiento definidas por el usuario

Considere:

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

Ver también:¿Cuál es el comando para encontrar el script de una función existente en postgresql?

Usa pg_get_functiondef o el prosrc columna de pg_proc directamente. La idea clave es unirse en pg_namespace y filtre las funciones del catálogo de PostgreSQL, que probablemente serán adecuadas para la mayoría de los propósitos:

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

El problema de obtener el código fuente para definido por el usuario funciones es decidir qué usuario medio. Se pueden crear muchos tipos de funciones:

  • Funciones usando CREATE EXTENSION .
  • Funciones creadas por PostgreSQL.
  • Funciones compiladas e instaladas por un administrador.

Los superusuarios con suficientes permisos pueden definir funciones en pg_proc , pero normalmente no.

Dado que solo los superusuarios pueden crear funciones en lenguaje C, exclúyalos. Estas funciones pueden ser instaladas de forma personalizada en una base de datos particular por el administrador, pero no por un usuario normal.