2009-10-13 10 views
65

Solo una pregunta rápida y sencilla: en PostgreSQL, ¿cómo se enumeran los nombres de todas las funciones almacenadas/procedimientos almacenados usando una tabla usando solo una instrucción SELECT, si es posible? Si un SELECT simple es insuficiente, puedo arreglarme con una función almacenada.Listar funciones almacenadas que hacen referencia a una tabla en PostgreSQL

Mi pregunta, creo, es algo similar a esta otra pregunta, pero esta otra pregunta es para SQL Server 2005:
List of Stored Procedure from Table

(opcional) Para el caso, ¿cómo también la lista de los factores desencadenantes y restricciones que usan la misma tabla de la misma manera?

+6

Usted * podría * querer aceptar una respuesta. – John

+1

[Lista funciones almacenadas ** usando una tabla ** en PostgreSQL] (http://stackoverflow.com/questions/31166303/how-to-get-a-list-of-stored-procedures-using-a-specific- table-in-postgresql/31168357 # 31168357) – klin

Respuesta

4

Excluyendo la materia del sistema:

select proname from pg_proc where proowner <> 1; 
+1

¿Por qué <> 1? En mi instalación Postgresql, los procedimientos del sistema tienen un propietario de 10, no 1. – bortzmeyer

+0

No lo sabía. La solución es, por supuesto, cambiar el "1" en consecuencia. – windyjonas

88
SELECT p.proname 
FROM pg_catalog.pg_namespace n 
JOIN pg_catalog.pg_proc p 
ON  p.pronamespace = n.oid 
WHERE n.nspname = 'public' 
+1

Como señaló Lukáš Lalinský en su respuesta, PostgreSQL admite el estándar 'information_schema.routines', útil para todo eso como cosas estándar. –

+0

falta punto y coma;) – knutole

5

Puede utilizar el information_schema esquema estándar para obtener los metadatos de la base de datos (está en el estándar SQL, así que debería funcionar de la misma manera en diferentes sistemas de bases de datos) En este caso, quiere information_schema.routines.

+0

Útil, pero realmente no responde la pregunta. –

4

Eche un vistazo a mi recipe. Lee funciones y disparadores. Se basa en información de: Extracting META information from PostgreSQL (INFORMATION_SCHEMA)

+0

Gracias, esto funcionó. Combinado con SELECT pg_catalog.pg_get_functiondef ('functionName' :: regproc) también puede obtener las sentencias create. – Wulfhart

+0

El enlace Extracting META ... fue lo que funcionó para mí. Hasta ahora no había visto el enlace "receta". – Wulfhart

+1

El segundo enlace está muerto. :-(Por favor, incorpore el contenido del primer enlace en esta respuesta para que no queden en la oscuridad cuando ese muera. Gracias. –

16
SELECT proname, prosrc 
FROM pg_catalog.pg_namespace n 
JOIN pg_catalog.pg_proc p 
ON  pronamespace = n.oid 
WHERE nspname = 'public'; 
+0

Quizás la próxima vez simplemente edite la publicación por encima de la suya en lugar de cambiar una cosa pequeña –

9

Igual que @quassnoi y @davidwhthomas, excepto he añadido los nombres de los argumentos en que hay:

SELECT proname, proargnames, prosrc 
FROM pg_catalog.pg_namespace n 
JOIN pg_catalog.pg_proc p 
ON  pronamespace = n.oid 
WHERE nspname = 'public'; 

Si el propósito detrás de la lista de las funciones es para limpiarlos o recorrer una nueva función con una lista params cambiando, se necesitan con frecuencia a caer funciones:

DROP FUNCTION <name>(<args>); 

Mediante la adición de proargnames, soy capaz de construir el fu aplicable nombre de la conexión para la caída.

Además, es agradable ver una imagen más completa al evaluar las funciones.

13

Si está utilizando psql, tratar \df

Desde la página del manual:

Tip 
To look up functions taking arguments or returning values of a specific type, use your pager's search capability to scroll through the \df output. 

Correr \set ECHO_HIDDEN revelará lo \df se está ejecutando en segundo plano.

Cuestiones relacionadas