Ya se puede hacer más fácilmente desde psql en la versión 8.4. Por ejemplo: 1- \df nombre_funcion \df+ nombre_funcion Estos comandos muestran la definición de la función
2- \ef nombre_funcion Abre la definición de la función para su edición. 3- \df Lista todas las funciones del usuario 4- \dfS Lista todas las funciones Espero que te haya servido de algo Saludos "The hurry is enemy of the success: for that reason.......Be patient" Ing. Marcos L. Ortiz Valmaseda Línea Soporte y Despliegue Centro de Tecnologías de Almacenamiento y Análisis de Datos (CENTALAD) Linux User # 418229 PostgreSQL User http://www.postgresql.org http://www.planetpostgresql.org/ http://www.postgresql-es.org/ ----- Mensaje original ----- De: "Pedro Mateo" <[email protected]> Para: "ayuda postgres" <[email protected]> Enviados: Domingo, 20 de Septiembre 2009 8:55:32 GMT -10:00 Hawai Asunto: [pgsql-es-ayuda] sobre obtener definiciones de funciones hola a todos resulta que a mi no me gusta mucho pgadmin para hacer consultas en postgres, de hecho prefier psql el problema con psql es que si necesitas editar una funcion no tienes forma de hacerlo (sin tener que copiar y pegar jjjejejej) forzando la jugada creo que encontre una forma un poco mas practica de hacerlo pero me parece que se puede hacer mejor la comparto con todos ustedes porque se que muchos han tenido una necesidad de este tipo lo que hago es crear una view con el nombre y la definicion de todas las funciones (incluye las del sistema, cosa que me gustaria mejorar) el view le he llamado df y tiene 2 campos: funcion y definicion para mandar la definicion de una funcion a un archivo hago esto desde el shell: psql -c "copy (select definicion from df where funcion='mi_funcion') stdout with csv ">archivo_destino.sql cuando tengo mi arhivo lo edito con gedit (perdon los fanaticos vi) luego luego lo ejecuto con psql -f archivo_destino.sql me resulta mas facil tener un shell y un editor grafico abierto que el pgadmin hay un par de cosas que me gustaria mejorar 1- como veran hago un copy con destino al stdout en formato csv, lo que me da como resultado que en la definicion de mi fucion aparece una comilla al principio y otra en el final 2- en el view aparence las funciones del sistema y me gustaria que no aparecieran 3- si lo pueden poner en una funcion seria un exito, yo no pude porque me da un error de escritura cuando intento mandar a un archivo en vez del stdout 4- no domino el ingles por lo que no se como proponerle a los desarrolladores de psql incluirle esa tonteria, algo asi como \edit mi_objeto que mandaria al buffer el script de creacion del objeto (no me digan que no les gustaria!!) el view lo obtuve al ingresar al psql con la opcion -E que hace que el psql te muestre las consultas que ejecuta para desplegar informacion informacion en la pantalla gracias por su tiempo espero sus sugerencias a continuacion les dejo la definicion del view: ================================================================== create view df as SELECT p.proname as funcion,'create or replace '||p.proname||'('|| CASE WHEN p.proretset THEN 'setof ' ELSE '' END || CASE WHEN proallargtypes IS NOT NULL THEN pg_catalog.array_to_string(ARRAY( SELECT CASE WHEN p.proargmodes[s.i] = 'i' THEN '' WHEN p.proargmodes[s.i] = 'o' THEN 'OUT ' WHEN p.proargmodes[s.i] = 'b' THEN 'INOUT ' END || CASE WHEN COALESCE(p.proargnames[s.i], '') = '' THEN '' ELSE p.proargnames[s.i] || ' ' END || pg_catalog.format_type(p.proallargtypes[s.i], NULL) FROM pg_catalog.generate_series(1, pg_catalog.array_upper(p.proallargtypes, 1)) AS s(i) ), ', ') ELSE pg_catalog.array_to_string(ARRAY( SELECT CASE WHEN COALESCE(p.proargnames[s.i+1], '') = '' THEN '' ELSE p.proargnames[s.i+1] || ' ' END || pg_catalog.format_type(p.proargtypes[s.i], NULL) FROM pg_catalog.generate_series(0, pg_catalog.array_upper(p.proargtypes, 1)) AS s(i) ), ', ') END||')returns '||pg_catalog.format_type(p.prorettype, NULL)||' language '||l.lanname ||' as $body$'||p.prosrc||'$body$' as definicion FROM pg_catalog.pg_proc p LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace LEFT JOIN pg_catalog.pg_language l ON l.oid = p.prolang JOIN pg_catalog.pg_roles r ON r.oid = p.proowner WHERE p.prorettype <> 'pg_catalog.cstring'::pg_catalog.regtype AND (p.proargtypes[0] IS NULL OR p.proargtypes[0] <> 'pg_catalog.cstring'::pg_catalog.regtype) AND NOT p.proisagg AND pg_catalog.pg_function_is_visible(p.oid) ================================================================ -- TIP 5: �Has le�do nuestro extenso FAQ? http://www.postgresql.org/docs/faqs.FAQ.html
